- Some stuff I promised James. This is DC_ATTR from Win2K, IIRC (you called it GDI_USER_DATA). It changed a bit in XP, but now you have a working model. Also added some more flags/enums that I knew about and some font structures.

svn path=/trunk/; revision=24561
This commit is contained in:
Alex Ionescu 2006-10-18 06:00:31 +00:00
parent 31280506e9
commit 9b785911ed
2 changed files with 131 additions and 30 deletions

View file

@ -74,6 +74,25 @@
#define GDI_HANDLE_SET_STOCKOBJ(h) \
((h) = (HANDLE)(((ULONG_PTR)(h)) | GDI_HANDLE_STOCK_MASK))
/* DC_ATTR Dirty Flags */
#define DIRTY_FILL 0x00000001
#define DIRTY_LINE 0x00000002
#define DIRTY_TEXT 0x00000004
#define DIRTY_BACKGROUND 0x00000008
#define DIRTY_CHARSET 0x00000010
#define SLOW_WIDTHS 0x00000020
#define DC_CACHED_TM_VALID 0x00000040
#define DISPLAY_DC 0x00000080
#define DIRTY_PTLCURRENT 0x00000100
#define DIRTY_PTFXCURRENT 0x00000200
#define DIRTY_STYLESTATE 0x00000400
#define DC_PLAYMETAFILE 0x00000800
#define DC_BRUSH_DIRTY 0x00001000
#define DC_PEN_DIRTY 0x00002000
#define DC_DIBSECTION 0x00004000
#define DC_LAST_CLIPRGN_VALID 0x00008000
#define DC_PRIMARY_DISPLAY 0x00010000
/* TYPES *********************************************************************/
typedef struct _GDI_TABLE_ENTRY
@ -84,28 +103,62 @@ typedef struct _GDI_TABLE_ENTRY
PVOID UserData; /* Points to the user mode structure, usually NULL though */
} GDI_TABLE_ENTRY, *PGDI_TABLE_ENTRY;
typedef struct _RGNATTR
{
ULONG AttrFlags;
ULONG Flags;
RECTL Rect;
} RGNATTR,*PRGNATTR;
typedef struct _GDI_USER_DATA
typedef struct _DC_ATTR
{
COLORREF PenColor;
COLORREF BrushColor;
INT ROPmode;
INT PolyFillMode;
INT StretchBltMode;
INT BackgroundMode;
COLORREF BackgroundColor;
COLORREF TextColor;
DWORD CodePage;
HCOLORSPACE ColorSpace;
INT TextAlign; /* Text alignment from SetTextAlign() */
INT CharExtra; /* Spacing from SetTextCharacterExtra() */
INT BreakExtral; /* SetTextJustification */
INT BreakCount; /* " */
INT GraphicsMode; /* Graphics mode */
INT MapMode;
HFONT hFont;
DWORD Layout;
} GDI_USER_DATA, *PGDI_USER_DATA;
PVOID pvLDC;
ULONG ulDirty_;
HANDLE hbrush;
HANDLE hpen;
COLORREF crBackgroundClr;
ULONG ulBackgroundClr;
COLORREF crForegroundClr;
ULONG ulForegroundClr;
DWORD iCS_CP;
INT iGraphicsMode;
BYTE jROP2;
BYTE jBkMode;
BYTE jFillMode;
BYTE jStretchBltMode;
POINTL ptlCurrent;
POINTL ptfxCurrent;
LONG lBkMode;
LONG lFillMode;
LONG lStretchBltMode;
FLONG flFontMapper;
LONG lIcmMode;
HANDLE hcmXform;
HCOLORSPACE hColorSpace;
INT IcmBrushColor;
INT IcmPenColor;
FLONG flTextAlign;
LONG lTextAlign;
LONG lTextExtra;
LONG lRelAbs;
LONG lBreakExtra;
LONG cBreak;
HANDLE hlfntNew;
MATRIX_S mxWorldToDevice;
MATRIX_S mxDevicetoWorld;
MATRIX_S mxWorldToPage;
INT iMapMode;
DWORD dwLayout;
LONG lWindowOrgx;
POINTL ptlWindowOrg;
SIZEL szlWindowExt;
POINTL ptlViewportOrg;
SIZEL szlViewportExt;
FLONG flXform;
SIZEL szlVirtualDevicePixel;
SIZEL szlVirtualDeviceMm;
POINTL ptlBrushOrigin;
RGNATTR VisRectRegion;
} DC_ATTR, *PDC_ATTR;
#endif

View file

@ -43,27 +43,38 @@ typedef enum _POLYFUNCTYPE
typedef enum _GETDCDWORD
{
GdiGetRelAbs = 1,
GdiGetJournal,
GdiGetRelAbs,
GdiGetBreakExtra,
GdiGerCharBreak,
GdiGetArcDirection,
GdiGetEMFRestorDc,
GdiGetFontLanguageInfo,
GdiGetIsMemDc,
GdiGetMapMode,
GdiGetTextCharExtra,
} GETDCDWORD, *PGETDCDWORD;
typedef enum _GETSETDCDWORD
{
GdiGetSetRelAbs = 4,
GdiGetSetMapperFlagsInternal = 7,
GdiGetSetMapMode = 8,
GdiGetSetArcDirection = 9,
GdtGetSetCopyCount = 2,
GdiGetSetTextAlign,
GdiGetSetRelAbs,
GdiGetSetTextCharExtra,
GdiGetSetSelectFont,
GdiGetSetMapperFlagsInternal,
GdiGetSetMapMode,
GdiGetSetArcDirection,
} GETSETDCDWORD, *PGETSETDCDWORD;
typedef enum _GETDCPOINT
{
GdiGetViewPortExt = 1,
GdiGetDCOrg = 7,
GdiGetWindowExt,
GdiGetViewPortOrg,
GdiGetWindowOrg,
GdiGetAspectRatioFilter,
GdiGetDCOrg = 6,
} GETDCPOINT, *PGETDCPOINT;
typedef enum _TRANSFORMTYPE
@ -86,13 +97,50 @@ typedef UNIVERSAL_FONT_ID *PUNIVERSAL_FONT_ID;
typedef DWORD CHWIDTHINFO;
typedef CHWIDTHINFO *PCHWIDTHINFO;
typedef D3DNTHAL_CONTEXTCREATEDATA D3DNTHAL_CONTEXTCREATEI;
typedef LONG FIX;
/* FIXME: Unknown; easy to guess, usually based on public types and converted */
typedef struct _WIDTHDATA WIDTHDATA, *PWIDTHDATA;
typedef struct _TMDIFF TMDIFF, *PTMDIFF;
typedef struct _TMW_INTERNAL TMW_INTERNAL, *PTMW_INTERNAL;
typedef struct _ENUMFONTDATAW ENUMFONTDATAW, *PENUMFONTDATAW;
typedef struct _DEVCAPS DEVCAPS, *PDEVCAPS;
typedef struct _REALIZATION_INFO REALIZATION_INFO, *PREALIZATION_INFO;
/* Font Structures */
typedef struct _TMDIFF
{
ULONG cjotma;
CHAR chFirst;
CHAR chLast;
CHAR ChDefault;
CHAR ChBreak;
} TMDIFF, *PTMDIFF;
typedef struct _TMW_INTERNAL
{
TEXTMETRICW TextMetric;
TMDIFF Diff;
} TMW_INTERNAL, *PTMW_INTERNAL;
typedef struct _ENUMFONTDATAW ENUMFONTDATAW, *PENUMFONTDATAW;
/* Number Representation */
typedef struct _EFLOAT_S
{
LONG lMant;
LONG lExp;
} EFLOAT_S;
/* XFORM Structures */
typedef struct _MATRIX_S
{
EFLOAT_S efM11;
EFLOAT_S efM12;
EFLOAT_S efM21;
EFLOAT_S efM22;
EFLOAT_S efDx;
EFLOAT_S efDy;
FIX fxDx;
FIX fxDy;
FLONG flAccel;
} MATRIX_S;
#endif