// ClipSurface.cpp: implementation of the CClipSurface class.
//
//////////////////////////////////////////////////////////////////////
#include "ClipSurface.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CClipSurface::CClipSurface(ISurface* surf, const rectangle_t* rect)
{
m_surf = surf;
m_rect = *rect;
m_refs = 0;
}
CClipSurface::~CClipSurface()
{
m_surf->Release();
}
HRESULT CClipSurface::QueryInterface(REFIID iid, void** ppvObject)
{
if (InlineIsEqualGUID(iid, IID_IUnknown) ||
InlineIsEqualGUID(iid, IID_ISurface))
{
AddRef();
*ppvObject = (ISurface*) this;
return S_OK;
}
else
return E_FAIL;
}
HRESULT CClipSurface::SetPalette(int nIndex, int red, int green, int blue)
{
return m_surf->SetPalette(nIndex, red, green, blue);
}
HRESULT CClipSurface::Blt(ISurface* pSrc, int x, int y, int nWidth,
int nHeight, int nSrcX, int nSrcY, pixel_t pixTrans)
{
return m_surf->Blt(pSrc, x + m_rect.left, y + m_rect.top, nWidth, nHeight, nSrcX, nSrcY, pixTrans);
}
HRESULT CClipSurface::Lock(surface_t* pDesc)
{
return m_surf->Lock(pDesc);
}
HRESULT CClipSurface::Unlock()
{
return m_surf->Unlock();
}
HRESULT CClipSurface::GetSurfaceDesc(surface_t* pDesc)
{
return m_surf->GetSurfaceDesc(pDesc);
}
pixel_t CClipSurface::ColourMatch(colour_t clr)
{
return m_surf->ColourMatch(clr);
}
HRESULT CClipSurface::SetPixel(int x, int y, pixel_t pix)
{
return m_surf->SetPixel(x + m_rect.left, y + m_rect.top, pix);
}
pixel_t CClipSurface::GetPixel(int x, int y)
{
return m_surf->GetPixel(x + m_rect.left, y + m_rect.top);
}
DrawMode CClipSurface::SetDrawMode(DrawMode mode)
{
return m_surf->SetDrawMode(mode);
}
HRESULT CClipSurface::FillRect(const rectangle_t* rect, pixel_t pix)
{
rectangle_t rc = *rect;
rc.OffsetRect(m_rect.left, m_rect.top);
return m_surf->FillRect(rc, pix);
}
HRESULT CClipSurface::Rect3d(const rectangle_t* rect, pixel_t pixTop,
pixel_t pixBottom, int nWidth)
{
rectangle_t rc = *rect;
rc.OffsetRect(m_rect.left, m_rect.top);
return m_surf->Rect3d(rc, pixTop, pixBottom, nWidth);
}
HRESULT CClipSurface::Rect(const rectangle_t* rect, pixel_t pix, int nWidth)
{
rectangle_t rc = *rect;
rc.OffsetRect(m_rect.left, m_rect.top);
return m_surf->Rect(rc, pix, nWidth);
}
HRESULT CClipSurface::GetClipRect(rectangle_t* rect)
{
*rect = m_rect;
return S_OK;
}