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.
 
 
 
 
 
 

247 lines
5.7 KiB

/*++
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_