/*++ Copyright (c) 1990-2003 Microsoft Corporation Module Name: htblt.h Abstract: This module contains definitions and prototypes for htblt.c Author: 18-Dec-1993 Sat 08:50:09 created [Environment:] GDI Device Driver - Plotter. [Notes:] Revision History: 10-Feb-1994 Thu 15:24:13 updated Adding MonoPal[] to the DRVHTINFO --*/ #ifndef _HTBLT_ #define _HTBLT_ typedef struct _FOURBYTES { BYTE b1st; BYTE b2nd; BYTE b3rd; BYTE b4th; } FOURBYTES, *PFOURBYTES, FAR *LPFOURBYTES; typedef union _HTXB { FOURBYTES b4; DWORD dw; } HTXB, *PHTXB, FAR *LPHTXB; #define HTXB_H_NIBBLE_MAX 8 #define HTXB_L_NIBBLE_MAX 8 #define HTXB_H_NIBBLE_DUP 128 #define HTXB_L_NIBBLE_DUP 8 #define HTXB_COUNT (HTXB_H_NIBBLE_DUP * 2) #define HTXB_TABLE_SIZE (HTXB_COUNT * sizeof(HTXB)) #define HTPAL_XLATE_COUNT 8 #define HTPALXOR_NOTSRCCOPY (DWORD)0xffffffff #define HTPALXOR_SRCCOPY (DWORD)0x0 #define DHIF_IN_STRETCHBLT 0x01 typedef union _PALDW { DWORD dw; PALENTRY Pal; } PALDW; typedef struct _DRVHTINFO { BYTE Flags; BYTE HTPalCount; BYTE HTBmpFormat; BYTE AltBmpFormat; DWORD HTPalXor; PHTXB pHTXB; PALDW RTLPal[2]; BYTE PalXlate[HTPAL_XLATE_COUNT]; } DRVHTINFO, *PDRVHTINFO; #define PAL_MIN_I 0x00 #define PAL_MAX_I 0xff #define HTXB_R(htxb) htxb.b4.b1st #define HTXB_G(htxb) htxb.b4.b2nd #define HTXB_B(htxb) htxb.b4.b3rd #define HTXB_I(htxb) htxb.b4.b4th #define RGB_BLACK 0x00000000 #define RGB_WHITE 0x00FFFFFF #define P4B_TO_3P_DW(dwRet, pHTXB, pbData) \ { \ (dwRet) = (DWORD)((pHTXB[*(pbData + 0)].dw & (DWORD)0xc0c0c0c0) | \ (pHTXB[*(pbData + 1)].dw & (DWORD)0x30303030) | \ (pHTXB[*(pbData + 2)].dw & (DWORD)0x0c0c0c0c) | \ (pHTXB[*(pbData + 3)].dw & (DWORD)0x03030303)); \ ++((LPDWORD)pbData); \ } // // When outputing halftoned bitmaps, the HTENUMRCLS structure can accomodate // up to MAX_HTENUM_RECTLS when calling the engine. // #define MAX_HTENUM_RECTLS 8 typedef struct _HTENUMRCLS { DWORD c; // count of rectangles enumerated RECTL rcl[MAX_HTENUM_RECTLS]; // enumerated rectangles array } HTENUMRCL, *PHTENUMRCL; // // HTBMPINFO is passed to the halftone bitmap output function // #define HTBIF_FLIP_MONOBITS 0x00000001 #define HTBIF_BA_PAD_1 0x00000002 typedef struct _HTBMPINFO { PPDEV pPDev; // Our pPDev LPBYTE pScan0; // point to the first scan line of the bitmap LONG Delta; // count to be added to next scan line RECTL rclBmp; // visible area for the final output POINTL OffBmp; // x/y offset from the rclBmp.left SIZEL szlBmp; // size of visible rectangle LPBYTE pScanBuf; // pointer to scan buffer (may be RGB 3 scans) LPBYTE pRotBuf; // tempoprary rotation buffer if not null DWORD Flags; // HTBIF_xxxx PLOTDBGBLK(DWORD cScanBuf) // debug check PLOTDBGBLK(DWORD cRotBuf) // debug check } HTBMPINFO, FAR *PHTBMPINFO; typedef BOOL (*OUTHTBMPFUNC)(PHTBMPINFO); #define ISHTF_ALTFMT 0x0001 #define ISHTF_HTXB 0x0002 #define ISHTF_DSTPRIM_OK 0x0004 #define OHTF_IN_RTLMODE 0x00000001 #define OHTF_CLIPWINDOW 0x00000002 #define OHTF_SET_TR1 0x00000004 #define OHTF_DONE_ROPTR1 0x08000000 #define OHTF_EXIT_TO_HPGL2 0x80000000 #define OHTF_MASK (OHTF_IN_RTLMODE | \ OHTF_CLIPWINDOW | \ OHTF_SET_TR1 | \ OHTF_DONE_ROPTR1 | \ OHTF_EXIT_TO_HPGL2) // // Functions prototype // BOOL IsHTCompatibleSurfObj( PPDEV pPDev, SURFOBJ *pso, XLATEOBJ *pxlo, DWORD Flags ); BOOL OutputHTBitmap( PPDEV pPDev, SURFOBJ *psoHT, CLIPOBJ *pco, PPOINTL pptlDest, PRECTL prclSrc, DWORD Rop3, LPDWORD pOHTFlags ); LONG GetBmpDelta( DWORD SurfaceFormat, DWORD cx ); SURFOBJ * CreateBitmapSURFOBJ( PPDEV pPDev, HBITMAP *phBmp, LONG cxSize, LONG cySize, DWORD Format, LPVOID pvBits ); BOOL HalftoneBlt( PPDEV pPDev, SURFOBJ *psoDst, SURFOBJ *psoHTBlt, SURFOBJ *psoSrc, XLATEOBJ *pxlo, PRECTL prclDst, PRECTL prclSrc, PPOINTL pptlHTOrigin, BOOL DoStretchBlt ); SURFOBJ * CreateSolidColorSURFOBJ( PPDEV pPDev, SURFOBJ *psoDst, HBITMAP *phBmp, DWORD SolidColor ); SURFOBJ * CloneBrushSURFOBJ( PPDEV pPDev, SURFOBJ *psoDst, HBITMAP *phBmp, BRUSHOBJ *pbo ); SURFOBJ * CloneSURFOBJToHT( PPDEV pPDev, SURFOBJ *psoDst, SURFOBJ *psoSrc, XLATEOBJ *pxlo, HBITMAP *phBmp, PRECTL prclDst, PRECTL prclSrc ); SURFOBJ * CloneMaskSURFOBJ( PPDEV pPDev, SURFOBJ *psoMask, HBITMAP *phBmp, PRECTL prclMask ); #endif // _HTBLT_