2006-11-08 11:47:44 +00:00
|
|
|
#ifndef __WIN32K_DC_H
|
|
|
|
#define __WIN32K_DC_H
|
|
|
|
|
2008-04-16 21:55:47 +00:00
|
|
|
#include "brush.h"
|
|
|
|
#include "bitmaps.h"
|
2006-11-08 11:47:44 +00:00
|
|
|
|
2008-02-18 23:05:41 +00:00
|
|
|
/* Constants ******************************************************************/
|
|
|
|
|
2008-01-10 06:34:37 +00:00
|
|
|
// Get/SetBounds/Rect support.
|
|
|
|
#define DCB_WINDOWMGR 0x8000 // Queries the Windows bounding rectangle instead of the application's
|
|
|
|
|
2007-12-02 00:42:31 +00:00
|
|
|
// GDIDEVICE flags
|
|
|
|
#define PDEV_DISPLAY 0x00000001 // Display device
|
|
|
|
#define PDEV_HARDWARE_POINTER 0x00000002 // Supports hardware cursor
|
|
|
|
#define PDEV_SOFTWARE_POINTER 0x00000004
|
|
|
|
#define PDEV_GOTFONTS 0x00000040 // Has font driver
|
|
|
|
#define PDEV_PRINTER 0x00000080
|
|
|
|
#define PDEV_ALLOCATEDBRUSHES 0x00000100
|
|
|
|
#define PDEV_HTPAL_IS_DEVPAL 0x00000200
|
|
|
|
#define PDEV_DISABLED 0x00000400
|
|
|
|
#define PDEV_SYNCHRONIZE_ENABLED 0x00000800
|
|
|
|
#define PDEV_FONTDRIVER 0x00002000 // Font device
|
|
|
|
#define PDEV_GAMMARAMP_TABLE 0x00004000
|
|
|
|
#define PDEV_UMPD 0x00008000
|
|
|
|
#define PDEV_SHARED_DEVLOCK 0x00010000
|
|
|
|
#define PDEV_META_DEVICE 0x00020000
|
|
|
|
#define PDEV_DRIVER_PUNTED_CALL 0x00040000 // Driver calls back to GDI engine
|
|
|
|
#define PDEV_CLONE_DEVICE 0x00080000
|
2006-11-08 11:47:44 +00:00
|
|
|
|
2008-02-18 23:05:41 +00:00
|
|
|
/* Type definitions ***********************************************************/
|
|
|
|
|
2008-05-23 01:11:25 +00:00
|
|
|
typedef struct _WIN_DC_INFO
|
|
|
|
{
|
|
|
|
HRGN hClipRgn; /* Clip region (may be 0) */
|
|
|
|
HRGN hVisRgn; /* Should me to DC. Visible region (must never be 0) */
|
|
|
|
HRGN hGCClipRgn; /* GC clip region (ClipRgn AND VisRgn) */
|
|
|
|
HBITMAP hBitmap;
|
|
|
|
|
|
|
|
BYTE bitsPerPixel;
|
|
|
|
} WIN_DC_INFO;
|
|
|
|
|
2008-05-23 12:50:46 +00:00
|
|
|
// EXtended CLip and Window Region Object
|
2008-05-23 01:11:25 +00:00
|
|
|
typedef struct _XCLIPOBJ
|
|
|
|
{
|
2008-05-23 12:50:46 +00:00
|
|
|
WNDOBJ eClipWnd;
|
2008-05-23 01:11:25 +00:00
|
|
|
PVOID pClipRgn; // prgnRao_ or (prgnVis_ if (prgnRao_ == z))
|
|
|
|
DWORD Unknown1[16];
|
|
|
|
DWORD nComplexity; // count/mode based on # of rect in regions scan.
|
2008-05-23 12:50:46 +00:00
|
|
|
PVOID pUnknown; // UnK pointer to a large drawing structure.
|
|
|
|
// We will use it for CombinedClip ptr.
|
2008-05-23 01:11:25 +00:00
|
|
|
} XCLIPOBJ, *PXCLIPOBJ;
|
|
|
|
|
2008-04-16 21:34:12 +00:00
|
|
|
typedef struct _DCLEVEL
|
|
|
|
{
|
|
|
|
HPALETTE hpal;
|
|
|
|
struct _PALGDI * ppal;
|
|
|
|
PVOID pColorSpace; // COLORSPACE*
|
|
|
|
LONG lIcmMode;
|
|
|
|
LONG lSaveDepth;
|
|
|
|
DWORD unk1_00000000;
|
|
|
|
HGDIOBJ hdcSave;
|
|
|
|
POINTL ptlBrushOrigin;
|
|
|
|
PGDIBRUSHOBJ pbrFill;
|
|
|
|
PGDIBRUSHOBJ pbrLine;
|
|
|
|
PVOID plfnt; // LFONTOBJ* (TEXTOBJ*)
|
|
|
|
HGDIOBJ hPath; // HPATH
|
|
|
|
FLONG flPath;
|
|
|
|
LINEATTRS laPath; // 0x20 bytes
|
|
|
|
PVOID prgnClip; // PROSRGNDATA
|
|
|
|
PVOID prgnMeta;
|
|
|
|
COLORADJUSTMENT ca;
|
|
|
|
FLONG flFontState;
|
|
|
|
UNIVERSAL_FONT_ID ufi;
|
2008-06-02 21:10:31 +00:00
|
|
|
UNIVERSAL_FONT_ID ufiLoc[4]; // Local List.
|
|
|
|
UNIVERSAL_FONT_ID *pUFI;
|
|
|
|
ULONG uNumUFIs;
|
|
|
|
BOOL ufiSet;
|
2008-04-16 21:34:12 +00:00
|
|
|
FLONG fl;
|
|
|
|
FLONG flBrush;
|
2008-08-30 01:01:52 +00:00
|
|
|
MATRIX mxWorldToDevice;
|
|
|
|
MATRIX mxDeviceToWorld;
|
|
|
|
MATRIX mxWorldToPage;
|
|
|
|
FLOATOBJ efM11PtoD;
|
|
|
|
FLOATOBJ efM22PtoD;
|
|
|
|
FLOATOBJ efDxPtoD;
|
|
|
|
FLOATOBJ efDyPtoD;
|
|
|
|
FLOATOBJ efM11_TWIPS;
|
|
|
|
FLOATOBJ efM22_TWIPS;
|
|
|
|
FLOATOBJ efPr11;
|
|
|
|
FLOATOBJ efPr22;
|
2008-04-16 21:34:12 +00:00
|
|
|
PBITMAPOBJ pSurface; // SURFACE*
|
|
|
|
SIZE sizl;
|
2008-07-16 20:16:30 +00:00
|
|
|
} DCLEVEL, *PDCLEVEL;
|
2008-04-16 21:34:12 +00:00
|
|
|
|
2008-02-18 23:05:41 +00:00
|
|
|
/* The DC object structure */
|
|
|
|
typedef struct _DC
|
|
|
|
{
|
2008-02-26 01:00:34 +00:00
|
|
|
/* Header for all gdi objects in the handle table.
|
|
|
|
Do not (re)move this. */
|
2008-02-18 23:05:41 +00:00
|
|
|
BASEOBJECT BaseObject;
|
|
|
|
|
|
|
|
DHPDEV PDev; // <- GDIDEVICE.hPDev DHPDEV for device.
|
|
|
|
INT DC_Type;
|
|
|
|
INT DC_Flags;
|
2008-04-18 20:43:25 +00:00
|
|
|
PVOID pPDev; // PGDIDEVICE aka PDEVOBJ
|
2008-06-03 03:41:54 +00:00
|
|
|
PVOID hSem; // PERESOURCE aka HSEMAPHORE
|
2008-02-18 23:05:41 +00:00
|
|
|
FLONG flGraphics;
|
|
|
|
FLONG flGraphics2;
|
|
|
|
PDC_ATTR pDc_Attr;
|
2008-04-16 21:34:12 +00:00
|
|
|
DCLEVEL DcLevel;
|
2008-02-18 23:05:41 +00:00
|
|
|
DC_ATTR Dc_Attr;
|
|
|
|
HDC hNext;
|
|
|
|
HDC hPrev;
|
|
|
|
RECTL erclClip;
|
2008-04-18 02:23:38 +00:00
|
|
|
POINTL ptlDCOrig;
|
2008-02-18 23:05:41 +00:00
|
|
|
RECTL erclWindow;
|
|
|
|
RECTL erclBounds;
|
2008-04-16 21:34:12 +00:00
|
|
|
RECTL erclBoundsApp;
|
|
|
|
PVOID prgnAPI; // PROSRGNDATA
|
|
|
|
PVOID prgnVis;
|
|
|
|
PVOID prgnRao;
|
|
|
|
POINTL ptlFillOrigin;
|
|
|
|
unsigned eboFill_[23]; // EBRUSHOBJ
|
|
|
|
unsigned eboLine_[23];
|
|
|
|
unsigned eboText_[23];
|
|
|
|
unsigned eboBackground_[23];
|
|
|
|
HFONT hlfntCur;
|
|
|
|
FLONG flSimulationFlags;
|
|
|
|
LONG lEscapement;
|
2008-05-23 01:11:25 +00:00
|
|
|
PVOID prfnt; // RFONT*
|
|
|
|
XCLIPOBJ co; // CLIPOBJ
|
2008-04-16 21:34:12 +00:00
|
|
|
PVOID pPFFList; // PPFF*
|
2008-05-23 00:29:08 +00:00
|
|
|
PVOID ClrxFormLnk;
|
2008-04-16 21:34:12 +00:00
|
|
|
INT ipfdDevMax;
|
|
|
|
ULONG ulCopyCount;
|
|
|
|
PVOID pSurfInfo;
|
|
|
|
POINTL ptlDoBanding;
|
2008-02-18 23:05:41 +00:00
|
|
|
|
2008-04-16 21:34:12 +00:00
|
|
|
/* Reactos specific members */
|
|
|
|
WIN_DC_INFO w;
|
2008-02-18 23:05:41 +00:00
|
|
|
CLIPOBJ *CombinedClip;
|
|
|
|
XLATEOBJ *XlateBrush;
|
|
|
|
XLATEOBJ *XlatePen;
|
|
|
|
|
|
|
|
UNICODE_STRING DriverName;
|
|
|
|
} DC, *PDC;
|
|
|
|
|
2008-01-04 02:26:09 +00:00
|
|
|
typedef struct _GRAPHICS_DEVICE
|
|
|
|
{
|
|
|
|
CHAR szNtDeviceName[CCHDEVICENAME]; // Yes char AscII
|
|
|
|
CHAR szWinDeviceName[CCHDEVICENAME]; // <- chk GetMonitorInfoW MxIxEX.szDevice
|
|
|
|
struct _GRAPHICS_DEVICE * pNextGraphicsDevice;
|
|
|
|
DWORD StateFlags; // See DISPLAY_DEVICE_*
|
|
|
|
} GRAPHICS_DEVICE, *PGRAPHICS_DEVICE;
|
|
|
|
|
|
|
|
typedef struct _GDIPOINTER /* should stay private to ENG? No, part of GDIDEVICE aka HDEV aka PDEV. */
|
2006-11-08 11:47:44 +00:00
|
|
|
{
|
|
|
|
/* private GDI pointer handling information, required for software emulation */
|
2008-01-02 22:17:59 +00:00
|
|
|
BOOL Enabled;
|
|
|
|
POINTL Pos;
|
|
|
|
SIZEL Size;
|
|
|
|
POINTL HotSpot;
|
2006-11-08 11:47:44 +00:00
|
|
|
XLATEOBJ *XlateObject;
|
2008-01-02 22:17:59 +00:00
|
|
|
HSURF ColorSurface;
|
|
|
|
HSURF MaskSurface;
|
|
|
|
HSURF SaveSurface;
|
|
|
|
int ShowPointer; /* counter negtive do not show the mouse postive show the mouse */
|
2007-10-19 23:21:45 +00:00
|
|
|
|
2006-11-08 11:47:44 +00:00
|
|
|
/* public pointer information */
|
2008-01-02 22:17:59 +00:00
|
|
|
RECTL Exclude; /* required publicly for SPS_ACCEPT_EXCLUDE */
|
2006-11-08 11:47:44 +00:00
|
|
|
PGD_MOVEPOINTER MovePointer;
|
2008-01-02 22:17:59 +00:00
|
|
|
ULONG Status;
|
2006-11-08 11:47:44 +00:00
|
|
|
} GDIPOINTER, *PGDIPOINTER;
|
|
|
|
|
2007-12-27 17:56:31 +00:00
|
|
|
typedef struct _GDIDEVICE
|
2006-11-08 11:47:44 +00:00
|
|
|
{
|
2008-02-18 23:05:41 +00:00
|
|
|
BASEOBJECT BaseObject;
|
2007-11-12 06:43:44 +00:00
|
|
|
|
2007-12-27 17:56:31 +00:00
|
|
|
struct _GDIDEVICE *ppdevNext;
|
2008-01-02 22:17:59 +00:00
|
|
|
INT cPdevRefs;
|
|
|
|
INT cPdevOpenRefs;
|
|
|
|
struct _GDIDEVICE *ppdevParent;
|
|
|
|
FLONG flFlags;
|
|
|
|
PERESOURCE hsemDevLock; // Device lock.
|
2007-11-12 06:43:44 +00:00
|
|
|
|
2008-01-02 22:17:59 +00:00
|
|
|
PVOID pvGammaRamp; // Gamma ramp pointer.
|
2007-11-12 06:43:44 +00:00
|
|
|
|
2008-01-02 22:17:59 +00:00
|
|
|
HSURF FillPatterns[HS_DDI_MAX];
|
2006-11-08 11:47:44 +00:00
|
|
|
|
2008-01-02 23:57:05 +00:00
|
|
|
ULONG DxDd_nCount;
|
2006-11-08 11:47:44 +00:00
|
|
|
|
2008-11-21 18:34:31 +00:00
|
|
|
DHPDEV hPDev; // DHPDEV for device.
|
|
|
|
PVOID ppalSurf; // PEPALOBJ/PPALGDI for this device.
|
2008-01-02 22:17:59 +00:00
|
|
|
DEVINFO DevInfo;
|
|
|
|
GDIINFO GDIInfo;
|
|
|
|
HSURF pSurface; // SURFACE for this device.
|
|
|
|
HANDLE hSpooler; // Handle to spooler, if spooler dev driver.
|
|
|
|
ULONG DisplayNumber;
|
2008-01-04 02:26:09 +00:00
|
|
|
PVOID pGraphicsDev; // PGRAPHICS_DEVICE
|
2008-01-02 22:17:59 +00:00
|
|
|
|
|
|
|
DEVMODEW DMW;
|
|
|
|
PVOID pdmwDev; // Ptr->DEVMODEW.dmSize + dmDriverExtra == alloc size.
|
|
|
|
|
|
|
|
FLONG DxDd_Flags; // DxDD active status flags.
|
|
|
|
|
|
|
|
PFILE_OBJECT VideoFileObject;
|
|
|
|
BOOLEAN PreparedDriver;
|
|
|
|
GDIPOINTER Pointer;
|
2006-11-08 11:47:44 +00:00
|
|
|
/* Stuff to keep track of software cursors; win32k gdi part */
|
|
|
|
UINT SafetyRemoveLevel; /* at what level was the cursor removed?
|
|
|
|
0 for not removed */
|
|
|
|
UINT SafetyRemoveCount;
|
2007-11-12 01:26:32 +00:00
|
|
|
|
2007-11-12 04:58:41 +00:00
|
|
|
DRIVER_FUNCTIONS DriverFunctions;
|
2008-01-02 22:17:59 +00:00
|
|
|
struct _EDD_DIRECTDRAW_GLOBAL * pEDDgpl;
|
2007-11-12 01:26:32 +00:00
|
|
|
} GDIDEVICE, *PGDIDEVICE;
|
2006-11-08 11:47:44 +00:00
|
|
|
|
2008-02-18 23:05:41 +00:00
|
|
|
/* Internal functions *********************************************************/
|
2006-11-08 11:47:44 +00:00
|
|
|
|
|
|
|
#define DC_LockDc(hDC) \
|
2008-02-26 23:09:20 +00:00
|
|
|
((PDC) GDIOBJ_LockObj ((HGDIOBJ) hDC, GDI_OBJECT_TYPE_DC))
|
2006-11-08 11:47:44 +00:00
|
|
|
#define DC_UnlockDc(pDC) \
|
2008-02-26 23:09:20 +00:00
|
|
|
GDIOBJ_UnlockObjByPtr ((POBJ)pDC)
|
2006-11-08 11:47:44 +00:00
|
|
|
|
2008-06-06 02:59:12 +00:00
|
|
|
extern PDC defaultDCstate;
|
|
|
|
|
2006-11-08 11:47:44 +00:00
|
|
|
NTSTATUS FASTCALL InitDcImpl(VOID);
|
2007-12-04 07:51:03 +00:00
|
|
|
PGDIDEVICE FASTCALL IntEnumHDev(VOID);
|
2006-11-08 11:47:44 +00:00
|
|
|
HDC FASTCALL DC_AllocDC(PUNICODE_STRING Driver);
|
|
|
|
VOID FASTCALL DC_InitDC(HDC DCToInit);
|
|
|
|
HDC FASTCALL DC_FindOpenDC(PUNICODE_STRING Driver);
|
2007-09-04 15:59:21 +00:00
|
|
|
VOID FASTCALL DC_FreeDC(HDC);
|
2007-10-13 04:15:37 +00:00
|
|
|
VOID FASTCALL DC_AllocateDcAttr(HDC);
|
|
|
|
VOID FASTCALL DC_FreeDcAttr(HDC);
|
2006-11-08 11:47:44 +00:00
|
|
|
BOOL INTERNAL_CALL DC_Cleanup(PVOID ObjectBody);
|
|
|
|
HDC FASTCALL DC_GetNextDC (PDC pDC);
|
|
|
|
VOID FASTCALL DC_SetNextDC (PDC pDC, HDC hNextDC);
|
2008-05-30 04:56:10 +00:00
|
|
|
BOOL FASTCALL DC_SetOwnership(HDC DC, PEPROCESS Owner);
|
2007-11-14 22:53:19 +00:00
|
|
|
VOID FASTCALL DC_LockDisplay(HDC);
|
|
|
|
VOID FASTCALL DC_UnlockDisplay(HDC);
|
2007-09-27 15:54:51 +00:00
|
|
|
VOID FASTCALL IntGdiCopyFromSaveState(PDC, PDC, HDC);
|
2007-09-07 12:21:26 +00:00
|
|
|
VOID FASTCALL IntGdiCopyToSaveState(PDC, PDC);
|
2007-12-06 02:09:56 +00:00
|
|
|
BOOL FASTCALL IntGdiDeleteDC(HDC, BOOL);
|
2006-11-08 11:47:44 +00:00
|
|
|
|
|
|
|
VOID FASTCALL DC_UpdateXforms(PDC dc);
|
|
|
|
BOOL FASTCALL DC_InvertXform(const XFORM *xformSrc, XFORM *xformDest);
|
|
|
|
|
2007-11-20 02:22:30 +00:00
|
|
|
BOOL FASTCALL DCU_SyncDcAttrtoUser(PDC);
|
|
|
|
BOOL FASTCALL DCU_SynchDcAttrtoUser(HDC);
|
2007-12-06 02:09:56 +00:00
|
|
|
VOID FASTCALL DCU_SetDcUndeletable(HDC);
|
2007-08-21 05:01:00 +00:00
|
|
|
|
2006-11-08 11:47:44 +00:00
|
|
|
VOID FASTCALL IntGetViewportExtEx(PDC dc, LPSIZE pt);
|
|
|
|
VOID FASTCALL IntGetViewportOrgEx(PDC dc, LPPOINT pt);
|
|
|
|
VOID FASTCALL IntGetWindowExtEx(PDC dc, LPSIZE pt);
|
|
|
|
VOID FASTCALL IntGetWindowOrgEx(PDC dc, LPPOINT pt);
|
|
|
|
|
2008-02-18 23:05:41 +00:00
|
|
|
COLORREF FASTCALL IntGdiSetBkColor (HDC hDC, COLORREF Color);
|
|
|
|
INT FASTCALL IntGdiSetBkMode(HDC hDC, INT backgroundMode);
|
|
|
|
COLORREF STDCALL IntGdiGetBkColor(HDC hDC);
|
|
|
|
INT STDCALL IntGdiGetBkMode(HDC hDC);
|
|
|
|
COLORREF FASTCALL IntGdiSetTextColor(HDC hDC, COLORREF color);
|
|
|
|
UINT FASTCALL IntGdiSetTextAlign(HDC hDC, UINT Mode);
|
|
|
|
UINT STDCALL IntGdiGetTextAlign(HDC hDC);
|
|
|
|
COLORREF STDCALL IntGdiGetTextColor(HDC hDC);
|
|
|
|
INT STDCALL IntGdiSetStretchBltMode(HDC hDC, INT stretchBltMode);
|
2008-05-04 23:17:10 +00:00
|
|
|
VOID FASTCALL IntGdiReferencePdev(PGDIDEVICE pPDev);
|
|
|
|
VOID FASTCALL IntGdiUnreferencePdev(PGDIDEVICE pPDev, DWORD CleanUpType);
|
2008-05-06 04:22:49 +00:00
|
|
|
HDC FASTCALL IntGdiCreateDisplayDC(HDEV hDev, ULONG DcType, BOOL EmptyDC);
|
|
|
|
BOOL FASTCALL IntGdiCleanDC(HDC hDC);
|
2008-10-19 04:47:04 +00:00
|
|
|
VOID FASTCALL IntvGetDeviceCaps(PGDIDEVICE, PDEVCAPS);
|
2008-11-13 23:12:42 +00:00
|
|
|
HPEN FASTCALL IntGdiSelectPen(PDC,HPEN);
|
|
|
|
HBRUSH FASTCALL IntGdiSelectBrush(PDC,HBRUSH);
|
2008-11-18 05:36:19 +00:00
|
|
|
INT FASTCALL IntGdiGetDeviceCaps(PDC,INT);
|
2008-02-18 23:05:41 +00:00
|
|
|
|
2008-06-03 03:41:54 +00:00
|
|
|
extern PGDIDEVICE pPrimarySurface;
|
2008-05-23 00:29:08 +00:00
|
|
|
|
2008-02-18 23:05:41 +00:00
|
|
|
#endif /* not __WIN32K_DC_H */
|