|
|
/*++
Copyright (c) 1996-1997 Microsoft Corporation
Module Name:
printoem.h
Abstract:
Declarations for Windows NT printer driver OEM plugins
--*/
#ifndef _PRINTOEM_
#define _PRINTOEM_
#ifdef __cplusplus
extern "C" { #endif
//
// Current OEM plugin interface version number
//
#define PRINTER_OEMINTF_VERSION 0x00010000
#define OEM_MODE_PUBLISHER 0x00000001
typedef struct _PUBLISHERINFO {
DWORD dwMode; // flags for publisher
WORD wMinoutlinePPEM; // min size to download as Type1
WORD wMaxbitmapPPEM; // max size to download as Type3
} PUBLISHERINFO, *PPUBLISHERINFO;
#define OEMGI_GETSIGNATURE 1
#define OEMGI_GETINTERFACEVERSION 2
#define OEMGI_GETVERSION 3
#define OEMGI_GETPUBLISHERINFO 4
//
// OEMGetInfo
//
BOOL APIENTRY OEMGetInfo( IN DWORD dwMode, OUT PVOID pBuffer, IN DWORD cbSize, OUT PDWORD pcbNeeded );
BOOL APIENTRY OEMDriverDMS( PVOID pDevObj, PVOID pBuffer, DWORD cbSize, PDWORD pcbNeeded );
//
// OEMDevMode
//
#define OEMDM_SIZE 1
#define OEMDM_DEFAULT 2
#define OEMDM_CONVERT 3
#define OEMDM_MERGE 4
typedef struct _OEMDMPARAM {
DWORD cbSize; // size of OEM_DEVMODEPARAM
PVOID pdriverobj; // reference to driver data structure
HANDLE hPrinter; // PRINTER handle
HANDLE hModule; // OEM module handle
PDEVMODE pPublicDMIn; // public devmode in
PDEVMODE pPublicDMOut; // public devmode out
PVOID pOEMDMIn; // OEM private devmode in
PVOID pOEMDMOut; // OEM private devmode out
DWORD cbBufSize; // output size of pOEMDMOut buffer
} OEMDMPARAM, *POEMDMPARAM;
typedef struct _OEM_DMEXTRAHEADER {
DWORD dwSize; // size of OEM extra data
DWORD dwSignature; // Unique OEM signature
DWORD dwVersion; // OEM DLL version number
} OEM_DMEXTRAHEADER, *POEM_DMEXTRAHEADER;
//
// USERDATA for OPTITEM.UserData
//
typedef struct _USERDATA {
DWORD dwSize; // Size of this structure
ULONG_PTR dwItemID; // XXX_ITEM or pointer to FEATURE
PSTR pKeyWordName; // Keyword name
DWORD dwReserved[8]; } USERDATA, *PUSERDATA;
BOOL APIENTRY OEMDevMode( DWORD dwMode, POEMDMPARAM pOemDMParam );
//
// Callback function provided by the driver to
// allow OEM plugins access/set/update to driver private settings
//
typedef BOOL (APIENTRY *PFN_DrvGetDriverSetting)( PVOID pdriverobj, PCSTR Feature, PVOID pOutput, DWORD cbSize, PDWORD pcbNeeded, PDWORD pdwOptionsReturned );
//
// Callback function provided by the driver to
// allow OEM plugins upgrade private registry settings.
//
typedef BOOL (APIENTRY *PFN_DrvUpgradeRegistrySetting)( HANDLE hPrinter, PCSTR pFeature, PCSTR pOption );
//
// Callback function provided by the driver UI to
// allow OEM plugins to update the driver UI settings and
// shows constraint. This function is called only when the UI is present.
//
typedef BOOL (APIENTRY *PFN_DrvUpdateUISetting)( PVOID pdriverobj, PVOID pOptItem, DWORD dwPreviousSelection, DWORD dwMode );
// Predefined feature indices used for accessing driver private settings
#define OEMGDS_MIN_DOCSTICKY 1
#define OEMGDS_PSDM_FLAGS 1 // DWORD - misc. flag bits
#define OEMGDS_PSDM_DIALECT 2 // INT - PS output option
#define OEMGDS_PSDM_TTDLFMT 3 // INT - TrueType font downloading option
#define OEMGDS_PSDM_NUP 4 // INT - N-up option
#define OEMGDS_PSDM_PSLEVEL 5 // INT - target language level
#define OEMGDS_PSDM_CUSTOMSIZE 6 // 5*DWORD - custom page size parameters
#define OEMGDS_UNIDM_GPDVER 0x4000 // WORD - GPD Version
#define OEMGDS_UNIDM_FLAGS 0x4001 // DWORD - misc flag bits
// Indices for private devmode fields - start at 0x4000
#define OEMGDS_MIN_PRINTERSTICKY 0x8000
#define OEMGDS_PRINTFLAGS 0x8000 // DWORD - misc. flag bits
#define OEMGDS_FREEMEM 0x8001 // DWORD - amount of VM, ps only
#define OEMGDS_JOBTIMEOUT 0x8002 // DWORD - job timeout, ps only
#define OEMGDS_WAITTIMEOUT 0x8003 // DWORD - wait timeout, ps only
#define OEMGDS_PROTOCOL 0x8004 // WORD - output protocol, ps only
#define OEMGDS_MINOUTLINE 0x8005 // WORD - min outline font size, ps only
#define OEMGDS_MAXBITMAP 0x8006 // WORD - max bitmap font size, ps only
#define OEMGDS_MAX 0x10000
// dwType flags for use with STDMETHOD (DrvGetGPDData)
#define GPD_OEMCUSTOMDATA 1
/*******************************************************************************
* * Definitions used by kernel-mode rendering module only: * Make sure the macro KERNEL_MODE is defined and * the header file winddi.h is included before this file. */
#ifdef KERNEL_MODE
//
// OEMEnableDriver
//
BOOL APIENTRY OEMEnableDriver( DWORD dwOemIntfVersion, DWORD cbSize, PDRVENABLEDATA pded );
typedef struct _DEVOBJ *PDEVOBJ; typedef PVOID PDEVOEM;
typedef DWORD (APIENTRY *PFN_DrvWriteSpoolBuf)( PDEVOBJ pdevobj, PVOID pBuffer, DWORD cbSize );
typedef DWORD (APIENTRY *PFN_DrvWriteAbortBuf)( PDEVOBJ pdevobj, PVOID pBuffer, DWORD cbSize, DWORD dwWait
);
typedef INT (APIENTRY *PFN_DrvXMoveTo)( PDEVOBJ pdevobj, INT x, DWORD dwFlags );
typedef INT (APIENTRY *PFN_DrvYMoveTo)( PDEVOBJ pdevobj, INT y, DWORD dwFlags );
typedef BOOL (APIENTRY *PFN_DrvGetStandardVariable)( PDEVOBJ pdevobj, DWORD dwIndex, PVOID pBuffer, DWORD cbSize, PDWORD pcbNeeded );
typedef enum _STDVARIABLEINDEX{
SVI_NUMDATABYTES, // "NumOfDataBytes"
SVI_WIDTHINBYTES, // "RasterDataWidthInBytes"
SVI_HEIGHTINPIXELS, // "RasterDataHeightInPixels"
SVI_COPIES, // "NumOfCopies"
SVI_PRINTDIRECTION, // "PrintDirInCCDegrees"
SVI_DESTX, // "DestX"
SVI_DESTY, // "DestY"
SVI_DESTXREL, // "DestXRel"
SVI_DESTYREL, // "DestYRel"
SVI_LINEFEEDSPACING, // "LinefeedSpacing"
SVI_RECTXSIZE, // "RectXSize"
SVI_RECTYSIZE, // "RectYSize"
SVI_GRAYPERCENT, // "GrayPercentage"
SVI_NEXTFONTID, // "NextFontID"
SVI_NEXTGLYPH, // "NextGlyph"
SVI_PHYSPAPERLENGTH, // "PhysPaperLength"
SVI_PHYSPAPERWIDTH, // "PhysPaperWidth"
SVI_FONTHEIGHT, // "FontHeight"
SVI_FONTWIDTH, // "FontWidth"
SVI_FONTMAXWIDTH, // "FontMaxWidth"
SVI_FONTBOLD, // "FontBold"
SVI_FONTITALIC, // "FontItalic"
SVI_FONTUNDERLINE, // "FontUnderline"
SVI_FONTSTRIKETHRU, // "FontStrikeThru"
SVI_CURRENTFONTID, // "CurrentFontID"
SVI_TEXTYRES, // "TextYRes"
SVI_TEXTXRES, // "TextXRes"
// #ifdef BETA2
SVI_GRAPHICSYRES, // "GraphicsYRes"
SVI_GRAPHICSXRES, // "GraphicsXRes"
// #endif
SVI_ROP3, // "Rop3"
SVI_REDVALUE, // "RedValue"
SVI_GREENVALUE, // "GreenValue"
SVI_BLUEVALUE, // "BlueValue"
SVI_PALETTEINDEXTOPROGRAM, // "PaletteIndexToProgram"
SVI_CURRENTPALETTEINDEX, // "CurrentPaletteIndex"
SVI_PATTERNBRUSH_TYPE, // "PatternBrushType"
SVI_PATTERNBRUSH_ID, // "PatternBrushID"
SVI_PATTERNBRUSH_SIZE, // "PatternBrushSize"
SVI_CURSORORIGINX, // "CursorOriginX"
SVI_CURSORORIGINY, // "CursorOriginY"
// this is in MasterUnits and in the coordinates of the currently selected orientation.
// this value is defined as ImageableOrigin - CursorOrigin
SVI_PAGENUMBER, // "PageNumber"
// this value tracks number of times DrvStartBand has been called since
// StartDoc.
SVI_MAX // Just a placeholder do not use.
}STDVARIABLEINDEX;
typedef BOOL (APIENTRY *PFN_DrvUnidriverTextOut)( SURFOBJ *pso, STROBJ *pstro, FONTOBJ *pfo, CLIPOBJ *pco, RECTL *prclExtra, RECTL *prclOpaque, BRUSHOBJ *pboFore, BRUSHOBJ *pboOpaque, POINTL *pptlBrushOrg, MIX mix );
//
// bit fields defined for dwFlags
//
// Note: The following Bit values are reserved for an internal use!
// 0x4000
// 0x8000
//
//
#define MV_UPDATE 0x0001
#define MV_RELATIVE 0x0002
#define MV_GRAPHICS 0x0004
#define MV_PHYSICAL 0x0008
#define MV_SENDXMOVECMD 0x0010
#define MV_SENDYMOVECMD 0x0020
typedef struct _DRVPROCS {
PFN_DrvWriteSpoolBuf DrvWriteSpoolBuf; // common to both pscript and unidrv
PFN_DrvXMoveTo DrvXMoveTo; // unidrv specific
PFN_DrvYMoveTo DrvYMoveTo; // unidrv specific
PFN_DrvGetDriverSetting DrvGetDriverSetting;// common to both pscript and unidrv
PFN_DrvGetStandardVariable BGetStandardVariable; // unidrv specific
PFN_DrvUnidriverTextOut DrvUnidriverTextOut; // unidrv specific
PFN_DrvWriteAbortBuf DrvWriteAbortBuf; // unidrv specific
} DRVPROCS, *PDRVPROCS;
typedef struct _DEVOBJ {
DWORD dwSize; // size of DEVOBJ structure
PDEVOEM pdevOEM; // pointer to OEM's device data
HANDLE hEngine; // GDI handle for current printer
HANDLE hPrinter; // spooler handle for current printer
HANDLE hOEM; // handle to OEM dll
PDEVMODE pPublicDM; // public devmode
PVOID pOEMDM; // OEM private devmode
PDRVPROCS pDrvProcs; // pointer to kernel mode helper function table
} DEVOBJ;
//
// OEMDisableDriver
//
VOID APIENTRY OEMDisableDriver( VOID );
//
// OEMEnablePDEV
//
PDEVOEM APIENTRY OEMEnablePDEV( PDEVOBJ pdevobj, PWSTR pPrinterName, ULONG cPatterns, HSURF *phsurfPatterns, ULONG cjGdiInfo, GDIINFO *pGdiInfo, ULONG cjDevInfo, DEVINFO *pDevInfo, DRVENABLEDATA *pded );
//
// OEMDisablePDEV
//
VOID APIENTRY OEMDisablePDEV( PDEVOBJ pdevobj );
//
// OEMResetPDEV
//
BOOL APIENTRY OEMResetPDEV( PDEVOBJ pdevobjOld, PDEVOBJ pdevobjNew );
//
// OEMCommand - PSCRIPT only
//
DWORD APIENTRY OEMCommand( PDEVOBJ pdevobj, DWORD dwIndex, PVOID pData, DWORD cbSize );
INT APIENTRY OEMCommandCallback( PDEVOBJ pdevobj, DWORD dwCallbackID, DWORD dwCount, PDWORD pdwParams );
//
// OEMImageProcessing - UNIDRV only
//
typedef struct { DWORD dwSize; POINT ptOffset; PSTR pHalftoneOption; BOOL bBanding; BOOL bBlankBand; } IPPARAMS, *PIPPARAMS;
PBYTE APIENTRY OEMImageProcessing( PDEVOBJ pdevobj, PBYTE pSrcBitmap, PBITMAPINFOHEADER pBitmapInfoHeader, PBYTE pColorTable, DWORD dwCallbackID, PIPPARAMS pIPParams );
//
// OEMFilterGraphics - UNIDRV only
//
BOOL APIENTRY OEMFilterGraphics( PDEVOBJ pdevobj, PBYTE pBuf, DWORD dwLen );
//
// OEMCompression - UNIDRV only
//
INT APIENTRY OEMCompression( PDEVOBJ pdevobj, PBYTE pInBuf, PBYTE pOutBuf, DWORD dwInLen, DWORD dwOutLen );
//
// OEMHalftone - UNIDRV only
//
BOOL APIENTRY OEMHalftonePattern( PDEVOBJ pdevobj, PBYTE pHTPattern, DWORD dwHTPatternX, DWORD dwHTPatternY, DWORD dwHTNumPatterns, DWORD dwCallbackID, PBYTE pResource, DWORD dwResourceSize );
//
// OEMMemoryUsage - UNIDRV only
//
typedef struct { DWORD dwFixedMemoryUsage; DWORD dwPercentMemoryUsage; DWORD dwMaxBandSize; } OEMMEMORYUSAGE, *POEMMEMORYUSAGE;
VOID APIENTRY OEMMemoryUsage( PDEVOBJ pdevobj, POEMMEMORYUSAGE pMemoryUsage );
//
// OEMTTYGetInfo - UNIDRV only
//
INT APIENTRY OEMTTYGetInfo( PDEVOBJ pdevobj, DWORD dwInfoIndex, PVOID pOutputBuf, DWORD dwSize, DWORD *pcbcNeeded );
#define OEMTTY_INFO_MARGINS 1
#define OEMTTY_INFO_CODEPAGE 2
#define OEMTTY_INFO_NUM_UFMS 3
#define OEMTTY_INFO_UFM_IDS 4
//
// UNIDRV font callback
//
typedef BOOL (*PFNGETINFO)(struct _UNIFONTOBJ*, DWORD, PVOID, DWORD, PDWORD);
typedef struct _UNIFONTOBJ { ULONG ulFontID; DWORD dwFlags; // General flags
IFIMETRICS *pIFIMetrics; // Pointer to IFIMETRICS
PFNGETINFO pfnGetInfo; // Pointer to UNIFONTOBJ_GetInfo callback
} UNIFONTOBJ, *PUNIFONTOBJ;
//
// UNIFONTOBJ.dwFlags
//
#define UFOFLAG_TTFONT 0x00000001
#define UFOFLAG_TTDOWNLOAD_BITMAP 0x00000002
#define UFOFLAG_TTDOWNLOAD_TTOUTLINE 0x00000004
#define UFOFLAG_TTOUTLINE_BOLD_SIM 0x00000008
#define UFOFLAG_TTOUTLINE_ITALIC_SIM 0x00000010
#define UFOFLAG_TTOUTLINE_VERTICAL 0x00000020
#define UFOFLAG_TTSUBSTITUTED 0x00000040
//
// UNIFONTOBJ callback ID
//
#define UFO_GETINFO_FONTOBJ 1
#define UFO_GETINFO_GLYPHSTRING 2
#define UFO_GETINFO_GLYPHBITMAP 3
#define UFO_GETINFO_GLYPHWIDTH 4
#define UFO_GETINFO_MEMORY 5
#define UFO_GETINFO_STDVARIABLE 6
//
// UFO_GETINFO_FONTOBJ callback structure
//
typedef struct _GETINFO_FONTOBJ { DWORD dwSize; // Size of this structure
FONTOBJ *pFontObj; // Pointer to the FONTOBJ
} GETINFO_FONTOBJ, *PGETINFO_FONTOBJ;
//
// UFO_GETINFO_FONTOBJ callback structure
//
typedef struct _GETINFO_GLYPHSTRING { DWORD dwSize; // Size of this structure
DWORD dwCount; // Count of glyphs in pGlyphIn
DWORD dwTypeIn; // Glyph type of pGlyphIn, TYPE_GLYPHID/TYPE_HANDLE.
PVOID pGlyphIn; // Pointer to the input glyph string
DWORD dwTypeOut; // Glyph type of pGlyphOut, TYPE_UNICODE/TYPE_TRANSDATA.
PVOID pGlyphOut; // Pointer to the output glyph string
DWORD dwGlyphOutSize; // The size of pGlyphOut buffer
} GETINFO_GLYPHSTRING, *PGETINFO_GLYPHSTRING;
//
// UFO_GETINFO_GLYPHBITMAP
//
typedef struct _GETINFO_GLYPHBITMAP { DWORD dwSize; // Size of this structure
HGLYPH hGlyph; // Glyph hangle passed in OEMDownloadCharGlyph
GLYPHDATA *pGlyphData; // Pointer to the GLYPHDATA data structure
} GETINFO_GLYPHBITMAP, *PGETINFO_GLYPHBITMAP;
//
// UFO_GETINFO_GLYPHWIDTH
//
typedef struct _GETINFO_GLYPHWIDTH { DWORD dwSize; // Size of this structure
DWORD dwType; // Type of glyph stirng in pGlyph, TYPE_GLYPHHANDLE/GLYPHID.
DWORD dwCount; // Count of glyph in pGlyph
PVOID pGlyph; // Pointer to a glyph string
PLONG plWidth; // Pointer to the buffer of width table.
// Minidriver has to prepare this.
} GETINFO_GLYPHWIDTH, *PGETINFO_GLYPHWIDTH;
//
// UFO_GETINFO_MEMORY
//
typedef struct _GETINFO_MEMORY { DWORD dwSize; DWORD dwRemainingMemory; } GETINFO_MEMORY, PGETINFO_MEMROY;
//
// UFO_GETINFO_STDVARIABLE
//
// OEM DLL has to prepare all StdVar buffer and set ID in dwStdVarID.
//
typedef struct _GETINFO_STDVAR { DWORD dwSize; DWORD dwNumOfVariable; struct { DWORD dwStdVarID; LONG lStdVariable; } StdVar[1]; } GETINFO_STDVAR, *PGETINFO_STDVAR;
#define FNT_INFO_PRINTDIRINCCDEGREES 0 // PrintDirInCCDegrees
#define FNT_INFO_GRAYPERCENTAGE 1 // GrayPercentage
#define FNT_INFO_NEXTFONTID 2 // NextfontID
#define FNT_INFO_NEXTGLYPH 3 // NextGlyph
#define FNT_INFO_FONTHEIGHT 4 // FontHeight
#define FNT_INFO_FONTWIDTH 5 // FontWidth
#define FNT_INFO_FONTBOLD 6 // FontBold
#define FNT_INFO_FONTITALIC 7 // FontItalic
#define FNT_INFO_FONTUNDERLINE 8 // FontUnderline
#define FNT_INFO_FONTSTRIKETHRU 9 // FontStrikeThru
#define FNT_INFO_CURRENTFONTID 10 // Current
#define FNT_INFO_TEXTYRES 11 // TextYRes
#define FNT_INFO_TEXTXRES 12 // TextXRes
#define FNT_INFO_FONTMAXWIDTH 13 // FontMaxWidth
#define FNT_INFO_MAX 14
//
// OEMDownloadFontheader - UNIDRV only
//
DWORD APIENTRY OEMDownloadFontHeader( PDEVOBJ pdevobj, PUNIFONTOBJ pUFObj );
//
// OEMDownloadCharGlyph - UNIDRV only
//
DWORD APIENTRY OEMDownloadCharGlyph( PDEVOBJ pdevobj, PUNIFONTOBJ pUFObj, HGLYPH hGlyph, PDWORD pdwWidth );
//
// OEMTTDownloadMethod - UNIDRV only
//
DWORD APIENTRY OEMTTDownloadMethod( PDEVOBJ pdevobj, PUNIFONTOBJ pUFObj );
#define TTDOWNLOAD_DONTCARE 0
#define TTDOWNLOAD_GRAPHICS 1
#define TTDOWNLOAD_BITMAP 2
#define TTDOWNLOAD_TTOUTLINE 3
//
// OEMOutputCharStr - UNIDRV only
//
VOID APIENTRY OEMOutputCharStr( PDEVOBJ pdevobj, PUNIFONTOBJ pUFObj, DWORD dwType, DWORD dwCount, PVOID pGlyph );
#define TYPE_UNICODE 1
#define TYPE_TRANSDATA 2
#define TYPE_GLYPHHANDLE 3
#define TYPE_GLYPHID 4
//
// OEMSendFontCmd - UNIDRV only
//
typedef struct _FINVOCATION { DWORD dwCount; // Size of command
PBYTE pubCommand; // Pointer to font selection command
} FINVOCATION, *PFINVOCATION;
VOID APIENTRY OEMSendFontCmd( PDEVOBJ pdevobj, PUNIFONTOBJ pUFObj, PFINVOCATION pFInv );
//
// OEMTextOutAsBitmap - UNIDRV only
//
BOOL APIENTRY OEMTextOutAsBitmap( SURFOBJ *pso, STROBJ *pstro, FONTOBJ *pfo, CLIPOBJ *pco, RECTL *prclExtra, RECTL *prclOpaque, BRUSHOBJ *pboFore, BRUSHOBJ *pboOpaque, POINTL *pptlOrg, MIX mix );
//
// OEMBitBlt
//
BOOL APIENTRY OEMBitBlt( SURFOBJ *psoTrg, SURFOBJ *psoSrc, SURFOBJ *psoMask, CLIPOBJ *pco, XLATEOBJ *pxlo, RECTL *prclTrg, POINTL *pptlSrc, POINTL *pptlMask, BRUSHOBJ *pbo, POINTL *pptlBrush, ROP4 rop4 );
//
// OEMStretchBlt
//
BOOL APIENTRY OEMStretchBlt( SURFOBJ *psoDest, SURFOBJ *psoSrc, SURFOBJ *psoMask, CLIPOBJ *pco, XLATEOBJ *pxlo, COLORADJUSTMENT *pca, POINTL *pptlHTOrg, RECTL *prclDest, RECTL *prclSrc, POINTL *pptlMask, ULONG iMode );
//
// OEMCopyBits
//
BOOL APIENTRY OEMCopyBits( SURFOBJ *psoDest, SURFOBJ *psoSrc, CLIPOBJ *pco, XLATEOBJ *pxlo, RECTL *prclDest, POINTL *pptlSrc );
//
// OEMTextOut
//
BOOL APIENTRY OEMTextOut( SURFOBJ *pso, STROBJ *pstro, FONTOBJ *pfo, CLIPOBJ *pco, RECTL *prclExtra, RECTL *prclOpaque, BRUSHOBJ *pboFore, BRUSHOBJ *pboOpaque, POINTL *pptlOrg, MIX mix );
//
// OEMStrokePath
//
BOOL APIENTRY OEMStrokePath( SURFOBJ *pso, PATHOBJ *ppo, CLIPOBJ *pco, XFORMOBJ *pxo, BRUSHOBJ *pbo, POINTL *pptlBrushOrg, LINEATTRS *plineattrs, MIX mix );
//
// OEMFillPath
//
BOOL APIENTRY OEMFillPath( SURFOBJ *pso, PATHOBJ *ppo, CLIPOBJ *pco, BRUSHOBJ *pbo, POINTL *pptlBrushOrg, MIX mix, FLONG flOptions );
//
// OEMStrokeAndFillPath
//
BOOL APIENTRY OEMStrokeAndFillPath( SURFOBJ *pso, PATHOBJ *ppo, CLIPOBJ *pco, XFORMOBJ *pxo, BRUSHOBJ *pboStroke, LINEATTRS *plineattrs, BRUSHOBJ *pboFill, POINTL *pptlBrushOrg, MIX mixFill, FLONG flOptions );
//
// OEMRealizeBrush
//
BOOL APIENTRY OEMRealizeBrush( BRUSHOBJ *pbo, SURFOBJ *psoTarget, SURFOBJ *psoPattern, SURFOBJ *psoMask, XLATEOBJ *pxlo, ULONG iHatch );
//
// OEMStartPage
//
BOOL APIENTRY OEMStartPage( SURFOBJ *pso );
//
// OEMSendPage
//
BOOL APIENTRY OEMSendPage( SURFOBJ *pso );
//
// OEMEscape
//
ULONG APIENTRY OEMEscape( SURFOBJ *pso, ULONG iEsc, ULONG cjIn, PVOID pvIn, ULONG cjOut, PVOID pvOut );
//
// OEMStartDoc
//
BOOL APIENTRY OEMStartDoc( SURFOBJ *pso, PWSTR pwszDocName, DWORD dwJobId );
//
// OEMEndDoc
//
BOOL APIENTRY OEMEndDoc( SURFOBJ *pso, FLONG fl );
//
// OEMQueryFont
//
PIFIMETRICS APIENTRY OEMQueryFont( DHPDEV dhpdev, ULONG_PTR iFile, ULONG iFace, ULONG_PTR *pid );
//
// OEMQueryFontTree
//
PVOID APIENTRY OEMQueryFontTree( DHPDEV dhpdev, ULONG_PTR iFile, ULONG iFace, ULONG iMode, ULONG_PTR *pid );
//
// OEMQueryFontData
//
LONG APIENTRY OEMQueryFontData( DHPDEV dhpdev, FONTOBJ *pfo, ULONG iMode, HGLYPH hg, GLYPHDATA *pgd, PVOID pv, ULONG cjSize );
//
// OEMQueryAdvanceWidths
//
BOOL APIENTRY OEMQueryAdvanceWidths( DHPDEV dhpdev, FONTOBJ *pfo, ULONG iMode, HGLYPH *phg, PVOID pvWidths, ULONG cGlyphs );
//
// OEMFontManagement
//
ULONG APIENTRY OEMFontManagement( SURFOBJ *pso, FONTOBJ *pfo, ULONG iMode, ULONG cjIn, PVOID pvIn, ULONG cjOut, PVOID pvOut );
//
// OEMGetGlyphMode
//
ULONG APIENTRY OEMGetGlyphMode( DHPDEV dhpdev, FONTOBJ *pfo );
BOOL APIENTRY OEMNextBand( SURFOBJ *pso, POINTL *pptl );
BOOL APIENTRY OEMStartBanding( SURFOBJ *pso, POINTL *pptl );
ULONG APIENTRY OEMDitherColor( DHPDEV dhpdev, ULONG iMode, ULONG rgbColor, ULONG *pulDither );
BOOL APIENTRY OEMPaint( SURFOBJ *pso, CLIPOBJ *pco, BRUSHOBJ *pbo, POINTL *pptlBrushOrg, MIX mix );
BOOL APIENTRY OEMLineTo( SURFOBJ *pso, CLIPOBJ *pco, BRUSHOBJ *pbo, LONG x1, LONG y1, LONG x2, LONG y2, RECTL *prclBounds, MIX mix );
#ifndef WINNT_40
//
// OEMStretchBltROP
//
BOOL APIENTRY OEMStretchBltROP( SURFOBJ *psoDest, SURFOBJ *psoSrc, SURFOBJ *psoMask, CLIPOBJ *pco, XLATEOBJ *pxlo, COLORADJUSTMENT *pca, POINTL *pptlHTOrg, RECTL *prclDest, RECTL *prclSrc, POINTL *pptlMask, ULONG iMode, BRUSHOBJ *pbo, ROP4 rop4 );
//
// OEMPlgBlt
//
BOOL APIENTRY OEMPlgBlt( SURFOBJ *psoDst, SURFOBJ *psoSrc, SURFOBJ *psoMask, CLIPOBJ *pco, XLATEOBJ *pxlo, COLORADJUSTMENT *pca, POINTL *pptlBrushOrg, POINTFIX *pptfixDest, RECTL *prclSrc, POINTL *pptlMask, ULONG iMode );
//
// OEMAlphaBlend
//
BOOL APIENTRY OEMAlphaBlend( SURFOBJ *psoDest, SURFOBJ *psoSrc, CLIPOBJ *pco, XLATEOBJ *pxlo, RECTL *prclDest, RECTL *prclSrc, BLENDOBJ *pBlendObj );
//
// OEMGradientFill
//
BOOL APIENTRY OEMGradientFill( SURFOBJ *psoDest, CLIPOBJ *pco, XLATEOBJ *pxlo, TRIVERTEX *pVertex, ULONG nVertex, PVOID pMesh, ULONG nMesh, RECTL *prclExtents, POINTL *pptlDitherOrg, ULONG ulMode );
//
// OEMIcmCreateTransform
//
HANDLE APIENTRY OEMIcmCreateColorTransform( DHPDEV dhpdev, LPLOGCOLORSPACEW pLogColorSpace, PVOID pvSourceProfile, ULONG cjSourceProfile, PVOID pvDestProfile, ULONG cjDestProfile, PVOID pvTargetProfile, ULONG cjTargetProfile, DWORD dwReserved );
//
// OEMIcmDeleteTransform
//
BOOL APIENTRY OEMIcmDeleteColorTransform( DHPDEV dhpdev, HANDLE hcmXform );
//
// OEMQueryDeviceSupport
//
BOOL APIENTRY OEMQueryDeviceSupport( SURFOBJ *pso, XLATEOBJ *pxlo, XFORMOBJ *pxo, ULONG iType, ULONG cjIn, PVOID pvIn, ULONG cjOut, PVOID pvOut );
//
// OEMTransparentBlt
//
BOOL APIENTRY OEMTransparentBlt( SURFOBJ *psoDst, SURFOBJ *psoSrc, CLIPOBJ *pco, XLATEOBJ *pxlo, RECTL *prclDst, RECTL *prclSrc, ULONG iTransColor, ULONG ulReserved );
#endif // !WINNT_40
//
// Function prototype define's for the driver hooks.
//
// NOTE: These are only needed for NT4. For NT5, they are defined in winddi.h.
//
#ifdef WINNT_40
typedef BOOL (APIENTRY *LPFNDLLINITIALIZE)( ULONG ulReason );
typedef BOOL (APIENTRY *PFN_DrvBitBlt)( SURFOBJ *psoTrg, SURFOBJ *psoSrc, SURFOBJ *psoMask, CLIPOBJ *pco, XLATEOBJ *pxlo, RECTL *prclTrg, POINTL *pptlSrc, POINTL *pptlMask, BRUSHOBJ *pbo, POINTL *pptlBrush, ROP4 rop4 );
typedef BOOL (APIENTRY *PFN_DrvStretchBlt)( SURFOBJ *psoDest, SURFOBJ *psoSrc, SURFOBJ *psoMask, CLIPOBJ *pco, XLATEOBJ *pxlo, COLORADJUSTMENT *pca, POINTL *pptlHTOrg, RECTL *prclDest, RECTL *prclSrc, POINTL *pptlMask, ULONG iMode );
typedef BOOL (APIENTRY *PFN_DrvCopyBits)( SURFOBJ *psoDest, SURFOBJ *psoSrc, CLIPOBJ *pco, XLATEOBJ *pxlo, RECTL *prclDest, POINTL *pptlSrc );
typedef BOOL (APIENTRY *PFN_DrvTextOut)( SURFOBJ *pso, STROBJ *pstro, FONTOBJ *pfo, CLIPOBJ *pco, RECTL *prclExtra, RECTL *prclOpaque, BRUSHOBJ *pboFore, BRUSHOBJ *pboOpaque, POINTL *pptlOrg, MIX mix );
typedef BOOL (APIENTRY *PFN_DrvStrokePath)( SURFOBJ *pso, PATHOBJ *ppo, CLIPOBJ *pco, XFORMOBJ *pxo, BRUSHOBJ *pbo, POINTL *pptlBrushOrg, LINEATTRS *plineattrs, MIX mix );
typedef BOOL (APIENTRY *PFN_DrvFillPath)( SURFOBJ *pso, PATHOBJ *ppo, CLIPOBJ *pco, BRUSHOBJ *pbo, POINTL *pptlBrushOrg, MIX mix, FLONG flOptions );
typedef BOOL (APIENTRY *PFN_DrvStrokeAndFillPath)( SURFOBJ *pso, PATHOBJ *ppo, CLIPOBJ *pco, XFORMOBJ *pxo, BRUSHOBJ *pboStroke, LINEATTRS *plineattrs, BRUSHOBJ *pboFill, POINTL *pptlBrushOrg, MIX mixFill, FLONG flOptions );
typedef BOOL (APIENTRY *PFN_DrvRealizeBrush)( BRUSHOBJ *pbo, SURFOBJ *psoTarget, SURFOBJ *psoPattern, SURFOBJ *psoMask, XLATEOBJ *pxlo, ULONG iHatch );
typedef BOOL (APIENTRY *PFN_DrvStartPage)( SURFOBJ *pso );
typedef BOOL (APIENTRY *PFN_DrvSendPage)( SURFOBJ *pso );
typedef ULONG (APIENTRY *PFN_DrvEscape)( SURFOBJ *pso, ULONG iEsc, ULONG cjIn, PVOID pvIn, ULONG cjOut, PVOID pvOut );
typedef BOOL (APIENTRY *PFN_DrvStartDoc)( SURFOBJ *pso, PWSTR pwszDocName, DWORD dwJobId );
typedef BOOL (APIENTRY *PFN_DrvEndDoc)( SURFOBJ *pso, FLONG fl );
typedef PIFIMETRICS (APIENTRY *PFN_DrvQueryFont)( DHPDEV dhpdev, ULONG_PTR iFile, ULONG iFace, ULONG_PTR *pid );
typedef PVOID (APIENTRY *PFN_DrvQueryFontTree)( DHPDEV dhpdev, ULONG_PTR iFile, ULONG iFace, ULONG iMode, ULONG_PTR *pid );
typedef LONG (APIENTRY *PFN_DrvQueryFontData)( DHPDEV dhpdev, FONTOBJ *pfo, ULONG iMode, HGLYPH hg, GLYPHDATA *pgd, PVOID pv, ULONG cjSize );
typedef BOOL (APIENTRY *PFN_DrvQueryAdvanceWidths)( DHPDEV dhpdev, FONTOBJ *pfo, ULONG iMode, HGLYPH *phg, PVOID pvWidths, ULONG cGlyphs );
typedef ULONG (APIENTRY *PFN_DrvFontManagement)( SURFOBJ *pso, FONTOBJ *pfo, ULONG iMode, ULONG cjIn, PVOID pvIn, ULONG cjOut, PVOID pvOut );
typedef ULONG (APIENTRY *PFN_DrvGetGlyphMode)( DHPDEV dhpdev, FONTOBJ *pfo );
typedef BOOL (APIENTRY *PFN_DrvNextBand)( SURFOBJ *pso, POINTL *pptl );
typedef BOOL (APIENTRY *PFN_DrvStartBanding)( SURFOBJ *pso, POINTL *pptl );
typedef ULONG (APIENTRY *PFN_DrvDitherColor)( DHPDEV dhpdev, ULONG iMode, ULONG rgbColor, ULONG *pulDither );
typedef BOOL (APIENTRY *PFN_DrvPaint)( SURFOBJ *pso, CLIPOBJ *pco, BRUSHOBJ *pbo, POINTL *pptlBrushOrg, MIX mix );
typedef BOOL (APIENTRY *PFN_DrvLineTo)( SURFOBJ *pso, CLIPOBJ *pco, BRUSHOBJ *pbo, LONG x1, LONG y1, LONG x2, LONG y2, RECTL *prclBounds, MIX mix );
#endif // WINNT_40
//
// for the IPrintOemPS2::GetPDEVAdjustment call
//
#define PDEV_ADJUST_PAPER_MARGIN_TYPE 1
typedef struct _PDEV_ADJUST_PAPER_MARGIN {
RECTL rcImageableArea; // contains the imageable area in 0.001 mm units
} PDEV_ADJUST_PAPER_MARGIN;
#define PDEV_HOSTFONT_ENABLED_TYPE 2
typedef struct _PDEV_HOSTFONT_ENABLED {
BOOL bHostfontEnabled;
} PDEV_HOSTFONT_ENABLED;
#define PDEV_USE_TRUE_COLOR_TYPE 3
typedef struct _PDEV_USE_TRUE_COLOR {
BOOL bUseTrueColor;
} PDEV_USE_TRUE_COLOR;
#endif // KERNEL_MODE
/*******************************************************************************
* * Definitions used by user-mode UI module only: * Make sure the macro KERNEL_MODE is NOT defined and * the header file winddiui.h is included before this file. * */
#ifndef KERNEL_MODE
//
// Reports capability of simulated features
//
typedef struct _SIMULATE_CAPS_1 { DWORD dwLevel; DWORD dwPageOrderFlags; // Reverse page order
DWORD dwNumberOfCopies; // Max number of copies
DWORD dwCollate; // Collate support
DWORD dwNupOptions; // The (1-base) bit set represents the N-up option available.
// 0x0001 means 1-up
// 0x0002 means 2-up
// 0x0008 means 4-up
// 0x812B means (1,2,4,6,9,16)
} SIMULATE_CAPS_1, *PSIMULATE_CAPS_1;
//
// Reference to driver data structure. This is passed to
// most of the OEM UI DLL entrypoints.
//
typedef struct _OEMUIPROCS {
PFN_DrvGetDriverSetting DrvGetDriverSetting; PFN_DrvUpdateUISetting DrvUpdateUISetting;
} OEMUIPROCS, *POEMUIPROCS;
typedef struct _OEMUIOBJ {
DWORD cbSize; // size of this structure
POEMUIPROCS pOemUIProcs; // pointer to user mode helper function table
} OEMUIOBJ, *POEMUIOBJ;
//
// OEMCommonUIProp
//
typedef struct _OEMCUIPPARAM *POEMCUIPPARAM; typedef LONG (APIENTRY *OEMCUIPCALLBACK)(PCPSUICBPARAM, POEMCUIPPARAM);
typedef struct _OEMCUIPPARAM {
DWORD cbSize; // size of this structure
POEMUIOBJ poemuiobj; // reference to driver data structure
HANDLE hPrinter; // handle to the current printer
PWSTR pPrinterName; // name of current printer
HANDLE hModule; // instance handle to OEM DLL
HANDLE hOEMHeap; // handle to the OEM memory heap
PDEVMODE pPublicDM; // public devmode
PVOID pOEMDM; // OEM private devmode
DWORD dwFlags; // misc. flag bits
POPTITEM pDrvOptItems; // pointer to driver items
DWORD cDrvOptItems; // number of driver items
POPTITEM pOEMOptItems; // pointer to OEM items
DWORD cOEMOptItems; // number of OEM items
PVOID pOEMUserData; // pointer to OEM private data
OEMCUIPCALLBACK OEMCUIPCallback; // address of callback function
} OEMCUIPPARAM;
BOOL APIENTRY OEMCommonUIProp( DWORD dwMode, POEMCUIPPARAM pOemCUIPParam );
//
// OEMCommonUIProp dwMode parameter value
//
#define OEMCUIP_DOCPROP 1
#define OEMCUIP_PRNPROP 2
//
// OEMDocumentPropertySheets
//
LRESULT APIENTRY OEMDocumentPropertySheets( PPROPSHEETUI_INFO pPSUIInfo, LPARAM lParam );
//
// OEMDevicePropertySheets
//
LRESULT APIENTRY OEMDevicePropertySheets( PPROPSHEETUI_INFO pPSUIInfo, LPARAM lParam );
//
// pPSUIInfo->lParamInit is a pointer to _OEMUIPSPARAM structure defined below.
//
typedef struct _OEMUIPSPARAM {
DWORD cbSize; // size of this structure
POEMUIOBJ poemuiobj; // reference to driver data structure
HANDLE hPrinter; // handle to the current printer
PWSTR pPrinterName; // name of current printer
HANDLE hModule; // instance handle to OEM DLL
HANDLE hOEMHeap; // handle to the OEM memory heap
PDEVMODE pPublicDM; // public devmode
PVOID pOEMDM; // OEM private devmode
PVOID pOEMUserData; // pointer to OEM private data
DWORD dwFlags; // misc. flag bits
PVOID pOemEntry;
} OEMUIPSPARAM, *POEMUIPSPARAM;
//
// OEMDevQueryPrintEx
//
BOOL APIENTRY OEMDevQueryPrintEx( POEMUIOBJ poemuiobj, PDEVQUERYPRINT_INFO pDQPInfo, PDEVMODE pPublicDM, PVOID pOEMDM );
//
// OEMDeviceCapabilities
//
DWORD APIENTRY OEMDeviceCapabilities( POEMUIOBJ poemuiobj, HANDLE hPrinter, PWSTR pDeviceName, WORD wCapability, PVOID pOutput, PDEVMODE pPublicDM, PVOID pOEMDM, DWORD dwLastResult );
//
// OEMUpgradePrinter
//
BOOL APIENTRY OEMUpgradePrinter( DWORD dwLevel, PBYTE pDriverUpgradeInfo );
//
// OEMUpgradeRegistry
//
BOOL APIENTRY OEMUpgradeRegistry( DWORD dwLevel, PBYTE pDriverUpgradeInfo, PFN_DrvUpgradeRegistrySetting pfnUpgrade );
//
// OEMPrinterEvent
//
BOOL APIENTRY OEMPrinterEvent( PWSTR pPrinterName, INT iDriverEvent, DWORD dwFlags, LPARAM lParam );
//
// OEMDriverEvent
//
BOOL APIENTRY OEMPDriverEvent( DWORD dwDriverEvent, DWORD dwLevel, LPBYTE pDriverInfo, LPARAM lParam );
//
// OEMQueryColorProfile
//
BOOL APIENTRY OEMQueryColorProfile( HANDLE hPrinter, POEMUIOBJ poemuiobj, PDEVMODE pPublicDM, PVOID pOEMDM, ULONG ulQueryMode, VOID *pvProfileData, ULONG *pcbProfileData, FLONG *pflProfileData );
//
// Font Installer dialog proc
//
INT_PTR CALLBACK OEMFontInstallerDlgProc( HWND hWnd, UINT usMsg, WPARAM wParam, LPARAM lParam );
BOOL CALLBACK OEMUpdateExternalFonts( HANDLE hPrinter, HANDLE hHeap, PWSTR pwstrCartridges );
#endif // !KERNEL_MODE
//
// Datatypes for attributes plugin can get by calling core driver's
// following helper functions:
//
// GetGlobalAttribute, GetFeatureAttribute, GetOptionAttribute
//
typedef enum _EATTRIBUTE_DATATYPE {
kADT_UNKNOWN, kADT_BOOL, kADT_INT, kADT_LONG, kADT_DWORD, kADT_ASCII, // NULL terminated ASCII string
kADT_UNICODE, // NULL terminated Unicode string
kADT_BINARY, // binary blob
kADT_SIZE, kADT_RECT, kADT_CUSTOMSIZEPARAMS, // array of CUSTOMSIZEPARAM structures
} EATTRIBUTE_DATATYPE;
//
// Data structure for storing information about PPD's *ParamCustomPageSize entries
//
#define CUSTOMPARAM_WIDTH 0
#define CUSTOMPARAM_HEIGHT 1
#define CUSTOMPARAM_WIDTHOFFSET 2
#define CUSTOMPARAM_HEIGHTOFFSET 3
#define CUSTOMPARAM_ORIENTATION 4
#define CUSTOMPARAM_MAX 5
typedef struct _CUSTOMSIZEPARAM {
LONG dwOrder; // order value
LONG lMinVal; // min value (in microns)
LONG lMaxVal; // max value (in microns)
} CUSTOMSIZEPARAM, *PCUSTOMSIZEPARAM;
//
// constants for SetOptions helper function
//
// SetOptions flag
//
#define SETOPTIONS_FLAG_RESOLVE_CONFLICT 0x00000001
#define SETOPTIONS_FLAG_KEEP_CONFLICT 0x00000002
//
// SetOptions result code
//
#define SETOPTIONS_RESULT_NO_CONFLICT 0
#define SETOPTIONS_RESULT_CONFLICT_RESOLVED 1
#define SETOPTIONS_RESULT_CONFLICT_REMAINED 2
#ifdef __cplusplus
} #endif
#endif // !_PRINTOEM_
|