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