/*++ BUILD Version: 0007 // Increment this if a change has global effects Copyright (c) 1985 - 1999, Microsoft Corporation Module Name: gre.h Abstract: This module contains private GDI functions used by USER All of these function are named GRExxx. Author: Andre Vachon (andreva) 19-Apr-1995 Revision History: --*/ #include "w32wow64.h" DECLARE_HANDLE(HOBJ); DECLARE_KHANDLE(HOBJ); DECLARE_HANDLE(HLFONT); #define GGB_ENABLE_WINMGR 0x00000001 #define GGB_DISABLE_WINMGR 0x00000002 #define ULW_NOREPAINT 0x80000000 #define ULW_DEFAULT_ATTRIBUTES 0x40000000 #define ULW_NEW_ATTRIBUTES 0x20000000 // // Various owner ship functions // // GDI object ownership flags // Note that normal process IDs (executive handles) use the upper 30 bits // of the handle. We set the second bit to 1 in the PIDs below so that // they will not conflict with normal PIDs. The lowest bit is reserved for // the OBJECTOWNER lock. #define OBJECT_OWNER_ERROR ( 0x80000022) #define OBJECT_OWNER_PUBLIC ( 0x00000000) #define OBJECT_OWNER_CURRENT ( 0x80000002) #define OBJECT_OWNER_NONE ( 0x80000012) // // WINBUG #83303 2-8-2000 bhouse Investigate old comment // Old Comment: // - make these functions call direct to NtGdi // #define GrePatBlt NtGdiPatBlt BOOL APIENTRY GrePatBlt(HDC,int,int,int,int,DWORD); // // Define _WINDOWBLT_NOTIFICATION_ to turn on Window BLT notification. // This notification will set a special flag in the SURFOBJ passed to // drivers when the DrvCopyBits operation is called to move a window. // // See also: // ntgdi\gre\maskblt.cxx // #ifndef _WINDOWBLT_NOTIFICATION_ #define _WINDOWBLT_NOTIFICATION_ #endif #ifdef _WINDOWBLT_NOTIFICATION_ // Flags passed to NtGdiBitBlt: #define GBB_WINDOWBLT 0x00000001 #define GreBitBlt(a,b,c,d,e,f,g,h,i,j) NtGdiBitBlt((a),(b),(c),(d),(e),(f),(g),(h),(i),(j),0) BOOL APIENTRY NtGdiBitBlt(HDC,int,int,int,int,HDC,int,int,DWORD,DWORD,FLONG); #else #define GreBitBlt NtGdiBitBlt BOOL APIENTRY GreBitBlt(HDC,int,int,int,int,HDC,int,int,DWORD,DWORD); #endif typedef struct _POLYPATBLT POLYPATBLT,*PPOLYPATBLT; BOOL GrePolyPatBlt( HDC hdc, DWORD rop, PPOLYPATBLT pPoly, DWORD Count, DWORD Mode); // // Owner APIs // BOOL GreSetBrushOwner( HBRUSH hbr, W32PID lPid ); #define GreSetBrushOwnerPublic(x) GreSetBrushOwner((x), OBJECT_OWNER_PUBLIC) BOOL GreSetDCOwner( HDC hdc, W32PID lPid ); BOOL GreSetBitmapOwner( HBITMAP hbm, W32PID lPid ); HBITMAP GreMakeBitmapStock( HBITMAP hbm); HBITMAP GreMakeBitmapNonStock( HBITMAP hbm); HBRUSH GreMakeBrushStock( HBRUSH hbr); HBRUSH GreMakeBrushNonStock( HBRUSH hbr); W32PID GreGetObjectOwner( HOBJ hobj, DWORD objt ); BOOL GreSetLFONTOwner( HLFONT hlfnt, W32PID lPid ); BOOL GreSetRegionOwner( HRGN hrgn, W32PID lPid ); int GreSetMetaRgn( HDC ); HRGN APIENTRY NtGdiCreateRoundRectRgn(int, int, int, int, int, int); BOOL APIENTRY NtGdiFrameRgn(HDC, HRGN, HBRUSH, int, int); BOOL APIENTRY NtGdiRoundRect(HDC, int, int, int, int, int, int); BOOL GreSetPaletteOwner( HPALETTE hpal, W32PID lPid ); BOOL GreWindowInsteadOfClient( PVOID pwo ); // // Mark Global APIS // VOID GreSetBrushGlobal(HBRUSH hbr); // // Mark Delete\Undelete APIS // VOID GreMarkDeletableBrush( HBRUSH hbr ); VOID GreMarkUndeletableBrush( HBRUSH hbr ); VOID GreMarkUndeletableDC( HDC hdc ); VOID GreMarkDeletableDC( HDC hdc ); VOID GreMarkUndeletableFont( HFONT hfnt ); VOID GreMarkDeletableFont( HFONT hfnt ); BOOL GreMarkUndeletableBitmap( HBITMAP hbm ); BOOL GreMarkDeletableBitmap( HBITMAP hbm ); ULONG GreGetFontEnumeration( ); ULONG GreGetFontContrast( ); VOID GreLockDisplay( HDEV hdev ); VOID GreUnlockDisplay( HDEV hdev ); #if DBG BOOL GreIsDisplayLocked( HDEV hdev ); #endif #if DBG || defined(PRERELEASE) VOID GreValidateVisrgn( HDC hdc, BOOL bValidateVisrgn ); #endif BOOL APIENTRY GreIsValidRegion(HRGN hrgn); BOOL APIENTRY bSetDevDragRect(HDEV, RECTL*, RECTL *); BOOL APIENTRY bSetDevDragWidth(HDEV, ULONG); BOOL APIENTRY bMoveDevDragRect(HDEV, RECTL*); ULONG_PTR APIENTRY GreSaveScreenBits(HDEV hdev, ULONG iMode, ULONG_PTR iIdent, RECTL *prcl); typedef struct _CURSINFO *PCURSINFO; VOID APIENTRY GreSetPointer(HDEV hdev,PCURSINFO pci,ULONG fl, ULONG ulTrailLength, ULONG ulFreq); VOID APIENTRY GreMovePointer(HDEV hdev,int x,int y, ULONG ulFlags); // // Vis region calls // typedef enum _VIS_REGION_SELECT { SVR_DELETEOLD = 1, SVR_COPYNEW, SVR_ORIGIN, SVR_SWAP, } VIS_REGION_SELECT; BOOL GreSelectVisRgn( HDC hdc, HRGN hrgn, VIS_REGION_SELECT fl ); BOOL GreGetDCOrgEx( HDC hdc, PPOINT ppt, PRECT prc ); BOOL GreGetDCOrg( HDC hdc, LPPOINT pptl ); BOOL GreSetDCOrg( HDC hdc, LONG x, LONG y, PRECTL prcl ); // // DC creation // HDC GreCreateDisplayDC( HDEV hdev, ULONG iType, BOOL bAltType ); BOOL GreDeleteDC( HDC hdc ); BOOL GreCleanDC( HDC hdc ); HBRUSH GreGetFillBrush( HDC hdc ); int GreSetMetaRgn( HDC hdc ); int GreGetDIBitsInternal( HDC hdc, HBITMAP hBitmap, UINT iStartScan, UINT cNumScan, LPBYTE pjBits, LPBITMAPINFO pBitsInfo, UINT iUsage, UINT cjMaxBits, UINT cjMaxInfo ); HBITMAP APIENTRY GreCreateDIBitmapReal( HDC hdc, DWORD fInit, LPBYTE pInitBits, LPBITMAPINFO pInitInfo, DWORD iUsage, UINT cjMaxInitInfo, UINT cjMaxBits, HANDLE hSection, DWORD dwOffset, HANDLE hSecure, FLONG fl, ULONG_PTR dwClientColorSpace, //dwClientColorSpace used to pass pointer PVOID *ppvBits); HBRUSH GreCreateSolidBrush( COLORREF ); ULONG GreRealizeDefaultPalette( HDC, BOOL ); BOOL IsDCCurrentPalette( HDC ); HPALETTE GreSelectPalette( HDC hdc, HPALETTE hpalNew, BOOL bForceBackground ); DWORD GreRealizePalette( HDC ); BOOL GreDeleteServerMetaFile( HANDLE hmo ); // // Fonts // ULONG GreSetFontEnumeration( ULONG ulType ); ULONG GreSetFontContrast( ULONG ulContrast ); VOID GreSetLCDOrientation( DWORD dwOrientation ); int GreGetTextCharacterExtra( HDC ); int GreSetTextCharacterExtra( HDC, int ); int GreGetTextCharsetInfo( HDC, LPFONTSIGNATURE, DWORD); VOID GreGetCannonicalName( const WCHAR*, WCHAR*, ULONG*, DESIGNVECTOR*); // // For fullscreen support // NTSTATUS GreDeviceIoControl( HANDLE hDevice, DWORD dwIoControlCode, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer, DWORD nOutBufferSize, LPDWORD lpBytesReturned ); // // Pixel format support // int NtGdiDescribePixelFormat( HDC hdc, int ipfd, UINT cjpfd, PPIXELFORMATDESCRIPTOR ppfd ); BOOL GreSetMagicColors( HDC, PALETTEENTRY, ULONG ); COLORREF APIENTRY GreGetNearestColor( HDC, COLORREF); BOOL GreUpdateSharedDevCaps( HDEV hdev ); INT GreNamedEscape( LPWSTR, int, int, LPSTR, int, LPSTR ); typedef struct { UINT uiWidth; UINT uiHeight; BYTE ajBits[1]; } STRINGBITMAP, *LPSTRINGBITMAP; UINT GreGetStringBitmapW( HDC hdc, LPWSTR pwsz, UINT cwc, LPSTRINGBITMAP lpSB, UINT cj ); UINT GetStringBitmapW( HDC hdc, LPWSTR pwsz, ULONG cwc, UINT cj, LPSTRINGBITMAP lpSB ); UINT GetStringBitmapA( HDC hdc, LPCSTR psz, ULONG cbStr, UINT cj, LPSTRINGBITMAP lpSB ); INT GetSystemEUDCRange ( BYTE *pbEUDCLeadByteTable , INT cjSize ); // // Hydra support // BOOL GreMultiUserInitSession( HANDLE hRemoteConnectionChannel, PBYTE pPerformanceStatistics, PFILE_OBJECT pVideoFile, PFILE_OBJECT pRemoteConnectionFileObject, ULONG DisplayDriverNameLength, PWCHAR DisplayDriverName ); BOOL GreConsoleShadowStart( HANDLE hRemoteConnectionChannel, PBYTE pPerformanceStatistics, PFILE_OBJECT pVideoFile, PFILE_OBJECT pRemoteConnectionFileObject ); BOOL GreConsoleShadowStop( VOID ); BOOL MultiUserNtGreCleanup(); BOOL bDrvReconnect( HDEV hdev, HANDLE RemoteConnectionChannel, PFILE_OBJECT pRemoteConnectionFileObject, BOOL bSetPalette ); BOOL bDrvDisconnect( HDEV hdev, HANDLE RemoteConnectionChannel, PFILE_OBJECT pRemoteConnectionFileObject ); BOOL bDrvShadowConnect( HDEV hdev, PVOID pRemoteConnectionData, ULONG RemoteConnectionDataLength ); BOOL bDrvShadowDisconnect( HDEV hdev, PVOID pRemoteConnectionData, ULONG RemoteConnectionDataLength ); VOID vDrvInvalidateRect( HDEV hdev, PRECT prcl ); BOOL bDrvDisplayIOCtl( HDEV hdev, PVOID pbuffer, ULONG cbbuffer ); BOOL HDXDrvEscape( HDEV hdev, ULONG iEsc, PVOID pInbuffer, ULONG cbInbuffer ); // // DirectDraw support // VOID GreSuspendDirectDraw( HDEV hdev, BOOL bChildren ); VOID GreResumeDirectDraw( HDEV hdev, BOOL bChildren ); BOOL GreGetDirectDrawBounds( HDEV hdev, RECT* prcBounds ); // // Driver support // // MDEV.ulFlags #define MDEV_MISMATCH_COLORDEPTH 0x01 typedef struct _MDEV { HDEV hdevParent; HDEV Reserved; ULONG ulFlags; ULONG chdev; PVOID pDesktopId; struct { HDEV hdev; HDEV Reserved; RECT rect; } Dev[1]; } MDEV, *PMDEV; BOOL DrvDisableMDEV( PMDEV pmdev, BOOL bHardware ); BOOL DrvEnableMDEV( PMDEV pmdev, BOOL bHardware ); NTSTATUS DrvGetMonitorPowerState( PMDEV pmdev, DEVICE_POWER_STATE PowerState ); NTSTATUS DrvSetMonitorPowerState( PMDEV pmdev, DEVICE_POWER_STATE PowerState ); BOOL DrvQueryMDEVPowerState( PMDEV mdev ); VOID DrvSetMDEVPowerState( PMDEV mdev, BOOL On ); BOOL DrvDisplaySwitchHandler( PVOID PhysDisp, PUNICODE_STRING pstrDeviceName, LPDEVMODEW pNewMode, PULONG pPrune ); PVOID DrvWakeupHandler( HANDLE *ppdo ); BOOL DrvUpdateGraphicsDeviceList( BOOL bDefaultDisplayDisabled, BOOL bReenumerationNeeded, BOOL bLocal ); BOOL DrvGetHdevName( HDEV hdev, PWCHAR DeviceName ); NTSTATUS DrvEnumDisplayDevices( PUNICODE_STRING pstrDeviceName, HDEV hdevPrimary, DWORD iDevNum, LPDISPLAY_DEVICEW lpDisplayDevice, DWORD dwFlags, MODE ExecutionMode ); NTSTATUS DrvEnumDisplaySettings( PUNICODE_STRING pstrDeviceName, HDEV hdevPrimary, DWORD iModeNum, LPDEVMODEW lpDevMode, DWORD dwFlags ); #define GRE_DISP_CHANGE_SUCCESSFUL 0 #define GRE_DISP_CHANGE_RESTART 1 #define GRE_DISP_CHANGE_NO_CHANGE 2 #define GRE_DISP_CHANGE_FAILED -1 #define GRE_DISP_CHANGE_BADMODE -2 #define GRE_DISP_CHANGE_NOTUPDATED -3 #define GRE_DISP_CHANGE_BADFLAGS -4 #define GRE_DISP_CHANGE_BADPARAM -5 #define GRE_DISP_CHANGE_BADDUALVIEW -6 #define GRE_PRUNE TRUE #define GRE_RAWMODE FALSE #define GRE_DEFAULT 0xFFFFFFFF LONG DrvChangeDisplaySettings( PUNICODE_STRING pstrDeviceName, HDEV hdevPrimary, LPDEVMODEW lpDevMode, PVOID pDesktopId, MODE PreviousMode, BOOL bUpdateRegistry, BOOL bSetMode, PMDEV pOrgMdev, PMDEV *pNewMdev, DWORD PruneFlag, BOOL bTryClosest ); #define GRE_DISP_CREATE_NODISABLE 0x00000001 #define GRE_DISP_NOT_APARTOF_DESKTOP 0x00000002 PMDEV DrvCreateMDEV( PUNICODE_STRING pstrDevice, LPDEVMODEW lpdevmodeInformation, PVOID pGroupId, ULONG ulFlags, PMDEV pMdevOrg, MODE PreviousMode, DWORD PruneFlag, BOOL bClosest ); VOID DrvDestroyMDEV( PMDEV pmdev ); VOID DrvSetBaseVideo( BOOL bSet ); VOID DrvInitConsole( BOOL bEnumerationNeeded ); LONG DrvSetVideoParameters( PUNICODE_STRING pstrDeviceName, HDEV hdevPrimary, MODE PreviousMode, PVOID VideoParameters ); VOID GreStartTimers( VOID ); #define GCR_WNDOBJEXISTS 0x00000001 #define GCR_DELAYFINALUPDATE 0x00000002 #define GreAlphaBlend NtGdiAlphaBlend BOOL APIENTRY NtGdiAlphaBlend(HDC,LONG,LONG,LONG,LONG,HDC,LONG,LONG,LONG,LONG,BLENDFUNCTION,HANDLE); VOID APIENTRY GreClientRgnUpdated(FLONG); VOID APIENTRY GreClientRgnDone(FLONG); VOID APIENTRY GreFlush(VOID); BOOL APIENTRY GreDPtoLP(HDC, LPPOINT, int); BOOL APIENTRY GreLPtoDP(HDC, LPPOINT, int); BOOL APIENTRY GreGradientFill(HDC,PTRIVERTEX,ULONG,PVOID,ULONG,ULONG); COLORREF APIENTRY GreSetBkColor(HDC, COLORREF); int APIENTRY GreSetBkMode(HDC, int); HFONT APIENTRY GreSelectFont(HDC hdc, HFONT hlfntNew); int APIENTRY GreCombineRgn(HRGN, HRGN, HRGN, int); COLORREF APIENTRY GreSetTextColor(HDC, COLORREF); HBITMAP APIENTRY GreSelectBitmap(HDC,HBITMAP); int APIENTRY GreOffsetRgn(HRGN, int, int); BOOL APIENTRY GreGetTextExtentW(HDC,LPWSTR,int,LPSIZE,UINT); BOOL APIENTRY GreExtTextOutW(HDC, int, int, UINT, CONST RECT *,LPCWSTR, UINT, CONST INT *); HBRUSH APIENTRY GreSelectBrush(HDC,HBRUSH); BOOL APIENTRY GreRestoreDC(HDC, int); int APIENTRY GreSaveDC(HDC); int APIENTRY GreExtGetObjectW(HANDLE, int, LPVOID); BOOL APIENTRY GreDeleteObject(HANDLE); HBITMAP APIENTRY GreCreateBitmap(int, int, UINT, UINT, LPBYTE); HBITMAP APIENTRY GreCreateCompatibleBitmap(HDC, int, int); HDC APIENTRY GreCreateCompatibleDC(HDC); int APIENTRY GreGetDeviceCaps(HDC, int); UINT APIENTRY GreGetSystemPaletteEntries(HDC, UINT, UINT, LPPALETTEENTRY); UINT APIENTRY GreGetSystemPaletteUse(HDC); HPALETTE APIENTRY GreCreatePalette(LPLOGPALETTE); HPALETTE APIENTRY GreCreateHalftonePalette(HDC hdc); BOOL APIENTRY GreGetBounds(HDC hdc, LPRECT lprcBounds, DWORD fl); int APIENTRY GreSetDIBits(HDC, HBITMAP, UINT, UINT, LPBYTE, LPBITMAPINFO, UINT); ULONG APIENTRY GreGetBitmapSize(CONST BITMAPINFO *pbmi, ULONG iUsage); ULONG APIENTRY GreGetBitmapBitsSize(CONST BITMAPINFO *pbmi); VOID APIENTRY GreDeleteWnd(PVOID pwo); HBRUSH APIENTRY GreCreatePatternBrush(HBITMAP); BOOL APIENTRY GreGetWindowOrg(HDC, LPPOINT); BOOL APIENTRY GreSetWindowOrg(HDC hdc, int x, int y, LPPOINT pPoint); DWORD APIENTRY GreSetLayout(HDC hdc, LONG wox, DWORD dwLayout); DWORD APIENTRY GreGetLayout(HDC hdc); BOOL APIENTRY GreMirrorWindowOrg(HDC hdc); LONG APIENTRY GreGetDeviceWidth(HDC hdc); DWORD APIENTRY GreGetRegionData(HRGN, DWORD, LPRGNDATA); HRGN APIENTRY GreExtCreateRegion(XFORML *, DWORD, LPRGNDATA); BOOL APIENTRY GrePtInRegion(HRGN, int, int); BOOL APIENTRY GreRectInRegion(HRGN, LPRECT); int APIENTRY GreGetClipBox(HDC, LPRECT, BOOL); int APIENTRY GreGetRgnBox(HRGN, LPRECT); BOOL APIENTRY GreGetTextMetricsW(HDC, TMW_INTERNAL *); int APIENTRY GreGetRandomRgn(HDC, HRGN, int); BOOL APIENTRY GreStretchBlt(HDC,int,int,int,int,HDC,int,int,int,int,DWORD,DWORD); int APIENTRY GreExtSelectClipRgn(HDC, HRGN, int); int APIENTRY GreSetStretchBltMode(HDC, int); BOOL APIENTRY GreSetViewportOrg(HDC, int, int, LPPOINT); BOOL APIENTRY GreGetViewportOrg(HDC, LPPOINT); BOOL APIENTRY GreGetBrushOrg(HDC, LPPOINT); int APIENTRY GreCopyVisRgn(HDC, HRGN); int APIENTRY GreSubtractRgnRectList(HRGN, LPRECT, LPRECT, int); HRGN APIENTRY GreCreateRectRgnIndirect(LPRECT); BOOL APIENTRY GreSetBrushOrg(HDC, int, int, LPPOINT); VOID APIENTRY GreSetClientRgn(PVOID, HRGN, LPRECT); BOOL APIENTRY GreIntersectVisRect(HDC,int,int,int,int); int APIENTRY GreIntersectClipRect(HDC, int, int, int, int); HFONT APIENTRY GreGetHFONT(HDC); HANDLE APIENTRY GreGetStockObject(int); COLORREF APIENTRY GreGetBkColor(HDC); COLORREF APIENTRY GreGetTextColor(HDC); BOOL APIENTRY GreSetRectRgn(HRGN, int, int, int, int); BOOL APIENTRY GreSetSolidBrush(HBRUSH hbr, COLORREF clr); HFONT APIENTRY GreCreateFontIndirectW(LPLOGFONTW); BOOL APIENTRY GreValidateServerHandle(HANDLE hobj, ULONG ulType); COLORREF APIENTRY GreGetBrushColor(HBRUSH); BOOL APIENTRY GreGetColorAdjustment(HDC, PCOLORADJUSTMENT); UINT APIENTRY GreGetDIBColorTable(HDC hdc, UINT iStart, UINT cEntries, RGBQUAD *pRGB); int APIENTRY GreExcludeClipRect(HDC, int, int, int, int); BOOL APIENTRY GreRemoveAllButPermanentFonts(); BOOL APIENTRY GreSetColorAdjustment(HDC, PCOLORADJUSTMENT); VOID APIENTRY GreMarkDCUnreadable(HDC); BOOL APIENTRY GreGetViewportExt(HDC, LPSIZE); BOOL APIENTRY GreGetWindowExt(HDC, LPSIZE); DWORD APIENTRY GreGetCharSet(HDC hdc); int APIENTRY GreGetMapMode(HDC); HRGN APIENTRY GreCreateRectRgn(int, int, int, int); BOOL APIENTRY GrePtInSprite(HDEV, HWND, int, int); VOID APIENTRY GreUpdateSpriteVisRgn(HDEV); VOID APIENTRY GreZorderSprite(HDEV, HWND, HWND); HANDLE APIENTRY GreCreateSprite(HDEV, HWND, RECT*); BOOL APIENTRY GreDeleteSprite(HDEV, HWND, HANDLE); BOOL APIENTRY GreGetSpriteAttributes(HDEV, HWND, HANDLE, COLORREF*, BLENDFUNCTION*, DWORD*); BOOL APIENTRY GreUpdateSprite(HDEV, HWND, HANDLE, HDC, POINT*, SIZE*, HDC, POINT*, COLORREF, BLENDFUNCTION*, DWORD, RECT*); BOOL APIENTRY GreIsPaletteDisplay(HDEV); VOID APIENTRY GreFreePool(PVOID); VOID GreIncQuotaCount(PW32PROCESS); VOID GreDecQuotaCount(PW32PROCESS); DWORD APIENTRY GreGetBoundsRect(HDC, LPRECT, DWORD); DWORD APIENTRY GreSetBoundsRect(HDC, LPRECT, DWORD); BOOL APIENTRY GreSelectRedirectionBitmap(HDC hdc, HBITMAP hbitmap); int APIENTRY GreSetGraphicsMode(HDC hdc, int iMode); BOOL APIENTRY GreEnableDirectDrawRedirection(HDEV, BOOL); #define GreFillRgn NtGdiFillRgn BOOL NtGdiFillRgn(HDC hdc, HRGN hrgn, HBRUSH hbr); #ifdef MOUSE_IP W32KAPI HRGN APIENTRY NtGdiCreateEllipticRgn(IN int xLeft,IN int yTop,IN int xRight,IN int yBottom); W32KAPI BOOL APIENTRY NtGdiFillRgn(IN HDC hdc,IN HRGN hrgn,IN HBRUSH hbrush); HPEN APIENTRY GreCreatePen(int, int, COLORREF,HBRUSH); HPEN APIENTRY GreSelectPen(HDC,HPEN); W32KAPI BOOL APIENTRY NtGdiEllipse(IN HDC hdc,IN int xLeft,IN int yTop,IN int xRight,IN int yBottom); #endif HANDLE NtGdiGetDCObject (HDC hdc, int itype); // // Private draw stream driver related declarations and defines. // Note, no driver currently supports draw stream and is only used // as an internal mechanism to support the private DS_NINEGRID // command used to render nine grids. // typedef struct _DSSTATE { ULONG ulSize; COLORREF crColorKey; BLENDFUNCTION blendFunction; POINTL ptlSrcOrigin; } DSSTATE; BOOL APIENTRY EngDrawStream( SURFOBJ *psoDst, SURFOBJ *psoSrc, CLIPOBJ *pco, XLATEOBJ *pxlo, PRECTL prclDstClip, PPOINTL pptlDstOffset, ULONG ulIn, PVOID pvIn, DSSTATE *pdss ); BOOL APIENTRY DrvDrawStream( SURFOBJ *psoDst, SURFOBJ *psoSrc, CLIPOBJ *pco, XLATEOBJ *pxlo, PRECTL prclDstClip, PPOINTL pptlDstOffset, ULONG ulIn, PVOID pvIn, DSSTATE *pdss ); typedef BOOL (APIENTRY *PFN_DrvDrawStream)(SURFOBJ *,SURFOBJ *,CLIPOBJ *, XLATEOBJ *,PRECTL,PPOINTL,ULONG,PVOID,DSSTATE*); // // Private draw nine grid driver related declarations and defines. // // The flags specified in flFlags correspond to the DSDNG_xxx flags // found as part of the draw stream command interface. typedef struct NINEGRID { ULONG flFlags; LONG ulLeftWidth; LONG ulRightWidth; LONG ulTopHeight; LONG ulBottomHeight; COLORREF crTransparent; } NINEGRID, *PNINEGRID; #define INDEX_DrvDrawStream INDEX_DrvReserved9 // By specifying GCAPS2_REMOTEDRIVER, the remote driver indicates that it // supports DrvNineGrid and as such will be called to render nine grids. // The remote driver can safely punt the call to EngNineGrid. #define GCAPS2_REMOTEDRIVER GCAPS2_RESERVED1 // Drivers which support DrvNineGrid will need to specify the following // driver entry index. #define INDEX_DrvNineGrid INDEX_DrvReserved10 // remote drivers only BOOL APIENTRY DrvNineGrid( SURFOBJ *psoDst, SURFOBJ *psoSrc, CLIPOBJ *pco, XLATEOBJ *pxlo, PRECTL prclDst, PRECTL prclSrc, PNINEGRID png, BLENDOBJ* pBlendObj, PVOID pvReserved ); BOOL APIENTRY EngNineGrid( SURFOBJ *psoDst, SURFOBJ *psoSrc, CLIPOBJ *pco, XLATEOBJ *pxlo, PRECTL prclDst, PRECTL prclSrc, PNINEGRID png, BLENDOBJ* pBlendObj, PVOID pvReserved ); typedef BOOL (APIENTRY *PFN_DrvNineGrid)(SURFOBJ *,SURFOBJ *,CLIPOBJ *, XLATEOBJ *,PRECTL,PRECTL,PNINEGRID,BLENDOBJ*,PVOID);