Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
#include "stdafx.h"
#include "Services.h"
#include "Surface.h"
#include "GdiCache.h"
#include "OSAL.h"
#include "ResourceManager.h"
/***************************************************************************\
***************************************************************************** * * class DuDCSurface * ***************************************************************************** \***************************************************************************/
//------------------------------------------------------------------------------
HRESULT DuDCSurface::Build( IN DuDCSurface::ESource src, OUT DuDCSurface ** ppsrfNew) { DuDCSurface * psrfNew = ClientNew(DuDCSurface); if (psrfNew == NULL) { return E_OUTOFMEMORY; }
switch (src) { case srcTempDC: psrfNew->m_hdc = GetGdiCache()->GetTempDC(); psrfNew->m_fTempDC = TRUE; break;
case srcCompatibleDC: psrfNew->m_hdc = GetGdiCache()->GetCompatibleDC(); psrfNew->m_fCompatibleDC = TRUE; break;
default: AssertMsg(0, "Unknown DC Source"); }
if (psrfNew->m_hdc == NULL) { ClientDelete(DuDCSurface, psrfNew); return DU_E_OUTOFGDIRESOURCES; }
*ppsrfNew = psrfNew; return S_OK; }
//------------------------------------------------------------------------------
HRESULT DuDCSurface::Build( IN HDC hdc, OUT DuDCSurface ** ppsrfNew) { Assert(hdc != NULL);
DuDCSurface * psrfNew = ClientNew(DuDCSurface); if (psrfNew == NULL) { return E_OUTOFMEMORY; }
psrfNew->m_hdc = hdc;
*ppsrfNew = psrfNew; return S_OK; }
//------------------------------------------------------------------------------
void DuDCSurface::Destroy() { if (m_hdc != NULL) { if (m_fTempDC) { GetGdiCache()->ReleaseTempDC(m_hdc); } else if (m_fCompatibleDC) { GetGdiCache()->ReleaseCompatibleDC(m_hdc); } }
ClientDelete(DuDCSurface, this); }
//------------------------------------------------------------------------------
void DuDCSurface::SetIdentityTransform() { OS()->SetIdentityTransform(m_hdc); }
//------------------------------------------------------------------------------
void DuDCSurface::SetWorldTransform(const XFORM * pxf) { OS()->SetWorldTransform(m_hdc, pxf); }
//------------------------------------------------------------------------------
void * DuDCSurface::Save() { return IntToPtr(SaveDC(m_hdc)); }
//------------------------------------------------------------------------------
void DuDCSurface::Restore(void * pvState) { RestoreDC(m_hdc, PtrToInt(pvState)); }
/***************************************************************************\
***************************************************************************** * * class DuGpSurface * ***************************************************************************** \***************************************************************************/
//------------------------------------------------------------------------------
HRESULT DuGpSurface::Build( IN Gdiplus::Graphics * pgpgr, OUT DuGpSurface ** ppsrfNew) { Assert(pgpgr != NULL);
DuGpSurface * psrfNew = ClientNew(DuGpSurface); if (psrfNew == NULL) { return E_OUTOFMEMORY; }
psrfNew->m_pgpgr = pgpgr;
//
// Initialize common settings on the GDI+ surface
//
pgpgr->SetSmoothingMode(Gdiplus::SmoothingModeHighSpeed); pgpgr->SetPixelOffsetMode(Gdiplus::PixelOffsetModeHighSpeed); pgpgr->SetCompositingQuality(Gdiplus::CompositingQualityHighSpeed);
*ppsrfNew = psrfNew; return S_OK; }
//------------------------------------------------------------------------------
void DuGpSurface::Destroy() { ClientDelete(DuGpSurface, this); }
//------------------------------------------------------------------------------
void DuGpSurface::SetIdentityTransform() { m_pgpgr->ResetTransform(); }
//------------------------------------------------------------------------------
void DuGpSurface::SetWorldTransform(const XFORM * pxf) { Gdiplus::Matrix mat(pxf->eM11, pxf->eM12, pxf->eM21, pxf->eM22, pxf->eDx, pxf->eDy); m_pgpgr->SetTransform(&mat); }
//------------------------------------------------------------------------------
void * DuGpSurface::Save() { return ULongToPtr(m_pgpgr->Save()); }
//------------------------------------------------------------------------------
void DuGpSurface::Restore(void * pvState) { m_pgpgr->Restore(static_cast<Gdiplus::GraphicsState>(PtrToUlong(pvState))); }
|