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.
 
 
 
 
 
 

222 lines
7.3 KiB

/******************************Module*Header*******************************\
* Module Name: bltrec.hxx
*
* This contains the data structures for the BLTREC data structure.
*
* Created: 02-Jun-1992 16:30:44
* Author: Donald Sidoroff [donalds]
*
* Copyright (c) 1990-1999 Microsoft Corporation
\**************************************************************************/
#define AVEC_NEED_MASK 0x00010000
#define BLTREC_PBO 0x00000001
#define BLTREC_PXLO 0x00000002
#define BLTREC_PRO 0x00000004
#define BLTREC_MIRROR_X 0x00000008
#define BLTREC_MIRROR_Y 0x00000010
// This is set if we should pass the mask down to the call.
#define BLTREC_MASK_NEEDED 0x00010000
// This is set if we should unlock the mask at the end of the call.
#define BLTREC_MASK_LOCKED 0x00020000
class BLTRECORD
{
protected:
BYTE ajxoTrg[sizeof(EXFORMOBJ)];
BYTE ajxoSrc[sizeof(EXFORMOBJ)];
BYTE ajpoTrg[sizeof(XEPALOBJ)];
BYTE ajpoTrgDC[sizeof(XEPALOBJ)];
BYTE ajpoSrc[sizeof(XEPALOBJ)];
BYTE ajpoSrcDC[sizeof(XEPALOBJ)];
SURFACE *pSurfTrg_;
SURFACE *pSurfSrc_;
SURFACE *pSurfMsk_;
BYTE ajxlo[sizeof(EXLATEOBJ)];
EBRUSHOBJ *pebo;
BYTE ajro[sizeof(RGNMEMOBJ)];
POINTFIX aptfxTrg[4];
POINTL aptlTrg[3];
POINTL aptlSrc[2];
POINTL aptlMask[2];
POINTL aptlBrush[1];
ROP4 rop4;
FLONG flState;
int iLeft;
int iTop;
public:
BLTRECORD() { flState = 0; }
~BLTRECORD()
{
if (flState & (BLTREC_PBO | BLTREC_MASK_LOCKED | BLTREC_PXLO | BLTREC_PRO))
{
if (flState & BLTREC_MASK_LOCKED)
{
pSurfMsk_->vAltUnlockFast();
pSurfMsk_ = (SURFACE *) NULL;
}
if (flState & BLTREC_PXLO)
((EXLATEOBJ *) &ajxlo[0])->vAltUnlock();
if (flState & BLTREC_PRO)
((RGNOBJ *) &ajro[0])->bDeleteRGNOBJ();
}
}
EXFORMOBJ *pxoTrg() { return((EXFORMOBJ *) &ajxoTrg[0]); }
EXFORMOBJ *pxoSrc() { return((EXFORMOBJ *) &ajxoSrc[0]); }
XEPALOBJ *ppoTrg() { return((XEPALOBJ *) &ajpoTrg[0]); }
XEPALOBJ *ppoTrgDC() { return((XEPALOBJ *) &ajpoTrgDC[0]); }
XEPALOBJ *ppoSrc() { return((XEPALOBJ *) &ajpoSrc[0]); }
XEPALOBJ *ppoSrcDC() { return((XEPALOBJ *) &ajpoSrcDC[0]); }
SURFACE *pSurfTrg(SURFACE *pSurf) { return(pSurfTrg_ = pSurf); }
SURFACE *pSurfSrc(SURFACE *pSurf) { return(pSurfSrc_ = pSurf); }
SURFACE *pSurfMsk(SURFACE *pSurf) { return(pSurfMsk_ = pSurf); }
SURFACE *pSurfTrg() { return(pSurfTrg_); }
SURFACE *pSurfSrc() { return(pSurfSrc_); }
SURFACE *pSurfMsk() { return(pSurfMsk_); }
SURFACE *pSurfMskOut() { return((flState & BLTREC_MASK_NEEDED) ? pSurfMsk_ : ((SURFACE *) NULL)); }
EXLATEOBJ *pexlo() { return((EXLATEOBJ *) &ajxlo[0]); }
EBRUSHOBJ *pbo() { return(pebo); }
EBRUSHOBJ *pbo(EBRUSHOBJ *_pbo) { return(pebo = _pbo); }
RGNMEMOBJ *prmo() { return((RGNMEMOBJ *) &ajro[0]); }
POINTFIX *pptfx() { return((POINTFIX *) &aptfxTrg[0]); }
POINTL *pptlTrg() { return((POINTL *) &aptlTrg[0]); }
POINTL *pptlSrc() { return((POINTL *) &aptlSrc[0]); }
POINTL *pptlMask() { return((POINTL *) &aptlMask[0]); }
POINTL *pptlBrush() { return((POINTL *) &aptlBrush[0]); }
ERECTL *perclTrg() { return((ERECTL *) &aptlTrg[0]); }
ERECTL *perclSrc() { return((ERECTL *) &aptlSrc[0]); }
ERECTL *perclMask() { return((ERECTL *) &aptlMask[0]); }
BOOL Trg(int x, int y, int cx, int cy)
{
aptlTrg[0].x = x;
aptlTrg[0].y = y;
aptlTrg[1].x = x + cx;
aptlTrg[1].y = y + cy;
return(((EXFORMOBJ *) &ajxoTrg[0])->bXform(aptlTrg, 2));
}
BOOL TrgPlg(int x, int y, int cx, int cy)
{
aptlTrg[0].x = x;
aptlTrg[0].y = y;
aptlTrg[1].x = x + cx;
aptlTrg[1].y = y;
aptlTrg[2].x = x;
aptlTrg[2].y = y + cy;
return(((EXFORMOBJ *) &ajxoTrg[0])->bXform(aptlTrg, aptfxTrg, 3));
}
BOOL TrgPlg(LPPOINT pptl)
{
return(((EXFORMOBJ *) &ajxoTrg[0])->bXform((POINTL *) pptl, aptfxTrg, 3));
}
BOOL Src(int x, int y, int cx, int cy)
{
aptlSrc[0].x = x;
aptlSrc[0].y = y;
aptlSrc[1].x = x + cx;
aptlSrc[1].y = y + cy;
return(((EXFORMOBJ *) &ajxoSrc[0])->bXform(aptlSrc, 2));
}
VOID Msk(int x, int y)
{
aptlMask[0].x = x;
aptlMask[0].y = y;
aptlMask[1].x = x + aptlSrc[1].x - aptlSrc[0].x;
aptlMask[1].y = y + aptlSrc[1].y - aptlSrc[0].y;
}
BOOL Msk(int x, int y, int cx, int cy)
{
aptlMask[0].x = x;
aptlMask[0].y = y;
aptlSrc[0].x = 0;
aptlSrc[0].y = 0;
aptlSrc[1].x = cx;
aptlSrc[1].y = cy;
if (!((EXFORMOBJ *) &ajxoSrc[0])->bXform(aptlSrc, 2))
return(FALSE);
else
{
aptlMask[1].x = x + aptlSrc[1].x - aptlSrc[0].x;
aptlMask[1].y = y + aptlSrc[1].y - aptlSrc[0].y;
return(TRUE);
}
}
VOID Brush(POINTL& ptl) { aptlBrush[0] = ptl; }
ULONG rop() { return(rop4); }
VOID rop(ROP4 r) { rop4 = r; }
VOID flSet(FLONG fl) { flState |= fl;}
FLONG flGet() { return(flState); }
BOOL bEqualExtents()
{
return(((aptlSrc[1].x-aptlSrc[0].x) == (aptlTrg[1].x-aptlTrg[0].x)) &&
((aptlSrc[1].y-aptlSrc[0].y) == (aptlTrg[1].y-aptlTrg[0].y)));
}
VOID vOffset(EPOINTL& eptl)
{
aptfxTrg[0].x += FIX_FROM_LONG(eptl.x);
aptfxTrg[0].y += FIX_FROM_LONG(eptl.y);
aptfxTrg[1].x += FIX_FROM_LONG(eptl.x);
aptfxTrg[1].y += FIX_FROM_LONG(eptl.y);
aptfxTrg[2].x += FIX_FROM_LONG(eptl.x);
aptfxTrg[2].y += FIX_FROM_LONG(eptl.y);
aptfxTrg[3].x += FIX_FROM_LONG(eptl.x);
aptfxTrg[3].y += FIX_FROM_LONG(eptl.y);
}
ULONG ropFore() { return(rop4 & 0x00ff); }
ULONG ropBack() { return((rop4 >> 8) & 0x00ff); }
VOID vExtrema();
VOID vBound(ERECTL *);
VOID vOrder(ERECTL *);
VOID vOrderStupid(ERECTL *);
VOID vOrderAmnesia(ERECTL *);
VOID vMirror(ERECTL *percl);
VOID vMirror(POINTFIX *pptfx);
BOOL bCreateRegion(DCOBJ&, POINTFIX *pptfx);
BOOL bRotated();
BOOL bRotate(SURFMEM&, ULONG);
BOOL bRotate(DCOBJ&, SURFMEM&, SURFMEM&, ULONG, ULONG);
BOOL bRotate(DCOBJ&, DCOBJ&, ULONG, BYTE);
BOOL bStretch(SURFMEM&, ULONG);
BOOL bStretch(DCOBJ&, SURFMEM&, SURFMEM&, ULONG, ULONG);
BOOL bStretch(DCOBJ&, DCOBJ&, ULONG, BYTE);
BOOL bBitBlt(DCOBJ&, DCOBJ&, ULONG, LONG, LONG);
BOOL bBitBlt(DCOBJ&, DCOBJ&, ULONG);
};