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
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);
|
|
};
|