some cleanup

- move NtGdiFlushUserBatch prototype to ntgdi.h
- move pool tags from ntgdihdl.h to win32k/tags.h
- move DC struct from ntgdihdl.h to win32k/dc.h
- replace GDIEMPTYHDR with BASEOBJECT
- use BASEOBJECT in DC and GDIDEVICE structures
- rename some NtGdiXxx functions that don't deserve that name and remove some that were defined by a macro, but don't exist on windows (#if 0'ed atm)
- remove RetrieveDisplayHDC() prototype (doesn't exist)

svn path=/trunk/; revision=32419
This commit is contained in:
Timo Kreuzer 2008-02-18 23:05:41 +00:00
parent 974d39b35a
commit ebc9271c72
12 changed files with 226 additions and 212 deletions

View file

@ -1695,6 +1695,11 @@ NtGdiFlattenPath(
IN HDC hdc
);
W32KAPI
NTSTATUS
APIENTRY
NtGdiFlushUserBatch(VOID);
W32KAPI
HRGN
APIENTRY

View file

@ -41,21 +41,6 @@
#define GDI_ENTRY_REUSECNT_SHIFT 8
#define GDI_ENTRY_UPPER_SHIFT 16
#define GDI_OBJECT_TAG_DC TAG('G', 'l', 'a', '1')
#define GDI_OBJECT_TAG_REGION TAG('G', 'l', 'a', '4')
#define GDI_OBJECT_TAG_BITMAP TAG('G', 'l', 'a', '5')
#define GDI_OBJECT_TAG_CLIOBJ TAG('G', 'h', '0', '6')
#define GDI_OBJECT_TAG_PATH TAG('G', 'h', '0', '7')
#define GDI_OBJECT_TAG_PALETTE TAG('G', 'l', 'a', '8')
#define GDI_OBJECT_TAG_COLSPC TAG('G', 'h', '0', '9')
#define GDI_OBJECT_TAG_FONT TAG('G', 'l', 'a', ':')
#define GDI_OBJECT_TAG_PFE TAG('G', 'h', '0', '<')
#define GDI_OBJECT_TAG_BRUSH TAG('G', 'l', 'a', '@')
#define GDI_OBJECT_TAG_ENUMFONT TAG('G', 'h', '0', 'F')
#define GDI_OBJECT_TAG_DDRAW TAG('D', 'h', ' ', '1')
#define GDI_OBJECT_TAG_DDSURF TAG('D', 'h', ' ', '2')
/*! \defgroup GDI object types
*
* GDI object types
@ -369,41 +354,4 @@ typedef struct _WIN_DC_INFO
BOOL vport2WorldValid; /* Is xformVport2World valid? */
} WIN_DC_INFO;
typedef struct _DC
{
HGDIOBJ hHmgr; // Handle for this DC object.
ULONG Count;
ULONG lucExcLock;
PVOID Tid;
DHPDEV PDev; // <- GDIDEVICE.hPDev DHPDEV for device.
INT DC_Type;
INT DC_Flags;
PVOID pPDev; // PGDIDEVICE
PVOID hSem; // PERESOURCE
FLONG flGraphics;
FLONG flGraphics2;
PDC_ATTR pDc_Attr;
WIN_DC_INFO w;
DC_ATTR Dc_Attr;
HDC hNext;
HDC hPrev;
RECTL erclClip;
RECTL erclWindow;
RECTL erclBounds;
HRGN hprgnAPI;
HRGN hprgnVis;
CLIPOBJ *CombinedClip;
XLATEOBJ *XlateBrush;
XLATEOBJ *XlatePen;
INT saveLevel; // DCLEVEL lSaveDepth
HDC hSelf; // DCLEVEL hdcSave Used only for MemoryDC & SaveDC.
HPALETTE PalIndexed;
UNICODE_STRING DriverName;
} DC, *PDC;
#endif

View file

@ -1,9 +1,10 @@
#ifndef __WIN32K_DC_H
#define __WIN32K_DC_H
#include "driver.h"
/* Constants ******************************************************************/
// Get/SetBounds/Rect support.
#define DCB_WINDOWMGR 0x8000 // Queries the Windows bounding rectangle instead of the application's
@ -29,7 +30,43 @@
#define PDEV_DRIVER_PUNTED_CALL 0x00040000 // Driver calls back to GDI engine
#define PDEV_CLONE_DEVICE 0x00080000
// Graphics Device structure.
/* Type definitions ***********************************************************/
/* The DC object structure */
typedef struct _DC
{
BASEOBJECT BaseObject;
DHPDEV PDev; // <- GDIDEVICE.hPDev DHPDEV for device.
INT DC_Type;
INT DC_Flags;
PVOID pPDev; // PGDIDEVICE
PVOID hSem; // PERESOURCE
FLONG flGraphics;
FLONG flGraphics2;
PDC_ATTR pDc_Attr;
WIN_DC_INFO w;
DC_ATTR Dc_Attr;
HDC hNext;
HDC hPrev;
RECTL erclClip;
RECTL erclWindow;
RECTL erclBounds;
HRGN hprgnAPI;
HRGN hprgnVis;
CLIPOBJ *CombinedClip;
XLATEOBJ *XlateBrush;
XLATEOBJ *XlatePen;
INT saveLevel; // DCLEVEL lSaveDepth
HDC hSelf; // DCLEVEL hdcSave Used only for MemoryDC & SaveDC.
HPALETTE PalIndexed;
UNICODE_STRING DriverName;
} DC, *PDC;
typedef struct _GRAPHICS_DEVICE
{
CHAR szNtDeviceName[CCHDEVICENAME]; // Yes char AscII
@ -59,10 +96,7 @@ typedef struct _GDIPOINTER /* should stay private to ENG? No, part of GDIDEVICE
typedef struct _GDIDEVICE
{
HANDLE hHmgr;
ULONG csCount;
ULONG lucExcLock;
PVOID Tid;
BASEOBJECT BaseObject;
struct _GDIDEVICE *ppdevNext;
INT cPdevRefs;
@ -103,7 +137,15 @@ typedef struct _GDIDEVICE
struct _EDD_DIRECTDRAW_GLOBAL * pEDDgpl;
} GDIDEVICE, *PGDIDEVICE;
/* Internal functions */
/* For Metafile and MetaEnhFile not in windows this struct taken from wine cvs 15/9-2006*/
typedef struct
{
LPENHMETAHEADER emh;
BOOL on_disk; /* true if metafile is on disk */
} DD_ENHMETAFILEOBJ, *PDD_ENHMETAFILEOBJ;
/* Internal functions *********************************************************/
#define DC_LockDc(hDC) \
((PDC) GDIOBJ_LockObj (GdiHandleTable, (HGDIOBJ) hDC, GDI_OBJECT_TYPE_DC))
@ -111,7 +153,6 @@ typedef struct _GDIDEVICE
GDIOBJ_UnlockObjByPtr (GdiHandleTable, pDC)
NTSTATUS FASTCALL InitDcImpl(VOID);
HDC FASTCALL RetrieveDisplayHDC(VOID);
PGDIDEVICE FASTCALL IntEnumHDev(VOID);
HDC FASTCALL DC_AllocDC(PUNICODE_STRING Driver);
VOID FASTCALL DC_InitDC(HDC DCToInit);
@ -141,23 +182,14 @@ VOID FASTCALL IntGetViewportOrgEx(PDC dc, LPPOINT pt);
VOID FASTCALL IntGetWindowExtEx(PDC dc, LPSIZE pt);
VOID FASTCALL IntGetWindowOrgEx(PDC dc, LPPOINT pt);
NTSTATUS STDCALL NtGdiFlushUserBatch(VOID);
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);
COLORREF FASTCALL NtGdiSetBkColor (HDC hDC, COLORREF Color);
INT FASTCALL NtGdiSetBkMode(HDC hDC, INT backgroundMode);
COLORREF STDCALL NtGdiGetBkColor(HDC hDC);
INT STDCALL NtGdiGetBkMode(HDC hDC);
COLORREF FASTCALL NtGdiSetTextColor(HDC hDC, COLORREF color);
UINT FASTCALL NtGdiSetTextAlign(HDC hDC, UINT Mode);
UINT STDCALL NtGdiGetTextAlign(HDC hDC);
COLORREF STDCALL NtGdiGetTextColor(HDC hDC);
INT STDCALL NtGdiSetStretchBltMode(HDC hDC, INT stretchBltMode);
/* For Metafile and MetaEnhFile not in windows this struct taken from wine cvs 15/9-2006*/
typedef struct
{
LPENHMETAHEADER emh;
BOOL on_disk; /* true if metafile is on disk */
} DD_ENHMETAFILEOBJ, *PDD_ENHMETAFILEOBJ;
#endif /* __WIN32K_DC_H */
#endif /* not __WIN32K_DC_H */

View file

@ -36,7 +36,7 @@ typedef PVOID PGDIOBJ;
typedef BOOL (INTERNAL_CALL *GDICLEANUPPROC)(PVOID ObjectBody);
/*!
* GDI object header. This is a part of any GDI object
* GDI object header. This is a part of any GDI object. ROS specific header!
*/
typedef struct _GDIOBJHDR
{
@ -55,13 +55,14 @@ typedef struct _GDIOBJHDR
// It's for thread locking.
// This header is standalone, used only in gdiobj.c.
//
typedef struct _GDIOBJEMPTYHDR
typedef struct _BASEOBJECT
{
HGDIOBJ hHmgr;
ULONG Count;
ULONG lucExcLock;
ULONG ulShareCount;
USHORT cExclusiveLock;
USHORT BaseFlags;
PW32THREAD Tid;
} GDIOBJEMPTYHDR, *PGDIOBJEMPTYHDR;
} BASEOBJECT, *POBJ;
BOOL INTERNAL_CALL GDIOBJ_OwnedByCurrentProcess(PGDI_HANDLE_TABLE HandleTable, HGDIOBJ ObjectHandle);
void INTERNAL_CALL GDIOBJ_SetOwnership(PGDI_HANDLE_TABLE HandleTable, HGDIOBJ ObjectHandle, PEPROCESS Owner);

View file

@ -1,72 +1,97 @@
#ifndef _WIN32K_TAGS_H
#define _WIN32K_TAGS_H
#define TAG_STRING TAG('S', 'T', 'R', ' ') /* string */
#define TAG_STRING TAG('S', 'T', 'R', ' ') /* string */
/* ntuser */
#define TAG_MOUSE TAG('M', 'O', 'U', 'S') /* mouse */
#define TAG_KEYBOARD TAG('K', 'B', 'D', ' ') /* keyboard */
#define TAG_ACCEL TAG('A', 'C', 'C', 'L') /* accelerator */
#define TAG_HOOK TAG('W', 'N', 'H', 'K') /* hook */
#define TAG_HOTKEY TAG('H', 'O', 'T', 'K') /* hotkey */
#define TAG_MENUITEM TAG('M', 'E', 'N', 'I') /* menu item */
#define TAG_MSG TAG('M', 'E', 'S', 'G') /* message */
#define TAG_MSGQ TAG('M', 'S', 'G', 'Q') /* message queue */
#define TAG_USRMSG TAG('U', 'M', 'S', 'G') /* user message */
#define TAG_WNDPROP TAG('W', 'P', 'R', 'P') /* window property */
#define TAG_WNAM TAG('W', 'N', 'A', 'M') /* window name */
#define TAG_WINLIST TAG('W', 'N', 'L', 'S') /* window handle list */
#define TAG_WININTLIST TAG('W', 'N', 'I', 'P') /* window internal pos */
#define TAG_WINPROCLST TAG('W', 'N', 'P', 'L') /* window proc list */
#define TAG_SBARINFO TAG('S', 'B', 'I', 'N') /* scrollbar info */
#define TAG_TIMER TAG('T', 'I', 'M', 'R') /* timer entry */
#define TAG_TIMERTD TAG('T', 'I', 'M', 'T') /* timer thread dereference list */
#define TAG_TIMERBMP TAG('T', 'I', 'M', 'B') /* timers bitmap */
#define TAG_CALLBACK TAG('C', 'B', 'C', 'K') /* callback memory */
#define TAG_WINSTA TAG('W', 'S', 'T', 'A') /* window station */
#define TAG_PDCE TAG('U', 's', 'd', 'c') /* dce */
#define TAG_MOUSE TAG('M', 'O', 'U', 'S') /* mouse */
#define TAG_KEYBOARD TAG('K', 'B', 'D', ' ') /* keyboard */
#define TAG_ACCEL TAG('A', 'C', 'C', 'L') /* accelerator */
#define TAG_HOOK TAG('W', 'N', 'H', 'K') /* hook */
#define TAG_HOTKEY TAG('H', 'O', 'T', 'K') /* hotkey */
#define TAG_MENUITEM TAG('M', 'E', 'N', 'I') /* menu item */
#define TAG_MSG TAG('M', 'E', 'S', 'G') /* message */
#define TAG_MSGQ TAG('M', 'S', 'G', 'Q') /* message queue */
#define TAG_USRMSG TAG('U', 'M', 'S', 'G') /* user message */
#define TAG_WNDPROP TAG('W', 'P', 'R', 'P') /* window property */
#define TAG_WNAM TAG('W', 'N', 'A', 'M') /* window name */
#define TAG_WINLIST TAG('W', 'N', 'L', 'S') /* window handle list */
#define TAG_WININTLIST TAG('W', 'N', 'I', 'P') /* window internal pos */
#define TAG_WINPROCLST TAG('W', 'N', 'P', 'L') /* window proc list */
#define TAG_SBARINFO TAG('S', 'B', 'I', 'N') /* scrollbar info */
#define TAG_TIMER TAG('T', 'I', 'M', 'R') /* timer entry */
#define TAG_TIMERTD TAG('T', 'I', 'M', 'T') /* timer thread dereference list */
#define TAG_TIMERBMP TAG('T', 'I', 'M', 'B') /* timers bitmap */
#define TAG_CALLBACK TAG('C', 'B', 'C', 'K') /* callback memory */
#define TAG_WINSTA TAG('W', 'S', 'T', 'A') /* window station */
#define TAG_PDCE TAG('U', 's', 'd', 'c') /* dce */
/* objects */
#define TAG_BEZIER TAG('B', 'E', 'Z', 'R') /* bezier */
#define TAG_BITMAP TAG('B', 'T', 'M', 'P') /* bitmap */
#define TAG_PATBLT TAG('P', 'B', 'L', 'T') /* patblt */
#define TAG_CLIP TAG('C', 'L', 'I', 'P') /* clipping */
#define TAG_COORD TAG('C', 'O', 'R', 'D') /* coords */
#define TAG_DC TAG('D', 'C', 'D', 'C') /* dc */
#define TAG_GDIDEV TAG('G', 'd', 'e', 'v') /* gdi dev support*/
#define TAG_GDIPDEV TAG('G', 'D', 'e', 'v') /* gdi PDev */
#define TAG_GDIOBJ TAG('G', 'D', 'I', 'O') /* gdi obj */
#define TAG_GDIHNDTBLE TAG('G', 'D', 'I', 'H') /* gdi handle table */
#define TAG_GDIICM TAG('G', 'i', 'c', 'm') /* gdi Icm */
#define TAG_DIB TAG('D', 'I', 'B', ' ') /* dib */
#define TAG_COLORMAP TAG('C', 'O', 'L', 'M') /* color map */
#define TAG_SHAPE TAG('S', 'H', 'A', 'P') /* shape */
#define TAG_PALETTE TAG('P', 'A', 'L', 'E') /* palette */
#define TAG_PALETTEMAP TAG('P', 'A', 'L', 'M') /* palette mapping */
#define TAG_PATH TAG('P', 'A', 'T', 'H') /* path */
#define TAG_PRINT TAG('P', 'R', 'N', 'T') /* print */
#define TAG_REGION TAG('R', 'G', 'N', 'O') /* region */
#define TAG_GDITEXT TAG('T', 'X', 'T', 'O') /* text */
#define TAG_EXTPEN TAG('X', 'P', 'E', 'N') /* extpen */
/* gdi objects from the handle table */
#define TAG_DC TAG('G', 'l', 'a', '1') /* dc */
#define TAG_REGION TAG('G', 'l', 'a', '4') /* region */
#define TAG_SURFACE TAG('G', 'l', 'a', '5') /* bitmap */
#define TAG_CLIENTOBJ TAG('G', 'h', '0', '6')
#define TAG_PATH TAG('G', 'h', '0', '7')
#define TAG_PALETTE TAG('G', 'l', 'a', '8')
#define TAG_ICMLCS TAG('G', 'h', '0', '9')
#define TAG_LFONT TAG('G', 'l', 'a', ':')
#define TAG_RFONT TAG('G', 'h', '0', ';') /* correct? */
#define TAG_PFE TAG('G', 'h', '0', '<')
#define TAG_PFT TAG('G', 'h', '0', '=') /* correct? */
#define TAG_ICMCXF TAG('G', 'h', '0', '>') /* correct? */
#define TAG_SPRITE TAG('G', 'h', '0', '?') /* correct? */
#define TAG_BRUSH TAG('G', 'l', 'a', '@')
#define TAG_UMPD TAG('G', 'h', '0', 'A') /* correct? */
#define TAG_SPACE TAG('G', 'h', '0', 'C') /* correct? */
#define TAG_META TAG('G', 'h', '0', 'E') /* correct? */
#define TAG_EFSTATE TAG('G', 'h', '0', 'F') /* correct? */
#define TAG_BMFD TAG('G', 'h', '0', 'G') /* correct? */
#define TAG_VTFD TAG('G', 'h', '0', 'H') /* correct? */
#define TAG_TTFD TAG('G', 'h', '0', 'I') /* correct? */
#define TAG_RC TAG('G', 'h', '0', 'J') /* correct? */
#define TAG_TEMP TAG('G', 'h', '0', 'K') /* correct? */
#define TAG_DRVOBJ TAG('G', 'h', '0', 'L') /* correct? */
#define TAG_DCIOBJ TAG('G', 'h', '0', 'M') /* correct? */
#define TAG_SPOOL TAG('G', 'h', '0', 'N') /* correct? */
/* other gdi objects */
#define TAG_BEZIER TAG('B', 'E', 'Z', 'R') /* bezier */
#define TAG_BITMAP TAG('B', 'T', 'M', 'P') /* bitmap */
#define TAG_PATBLT TAG('P', 'B', 'L', 'T') /* patblt */
#define TAG_CLIP TAG('C', 'L', 'I', 'P') /* clipping */
#define TAG_COORD TAG('C', 'O', 'R', 'D') /* coords */
#define TAG_GDIDEV TAG('G', 'd', 'e', 'v') /* gdi dev support*/
#define TAG_GDIPDEV TAG('G', 'D', 'e', 'v') /* gdi PDev */
#define TAG_GDIOBJ TAG('G', 'D', 'I', 'O') /* gdi obj */
#define TAG_GDIHNDTBLE TAG('G', 'D', 'I', 'H') /* gdi handle table */
#define TAG_GDIICM TAG('G', 'i', 'c', 'm') /* gdi Icm */
#define TAG_DIB TAG('D', 'I', 'B', ' ') /* dib */
#define TAG_COLORMAP TAG('C', 'O', 'L', 'M') /* color map */
#define TAG_SHAPE TAG('S', 'H', 'A', 'P') /* shape */
#define TAG_PALETTEMAP TAG('P', 'A', 'L', 'M') /* palette mapping */
#define TAG_PRINT TAG('P', 'R', 'N', 'T') /* print */
#define TAG_GDITEXT TAG('T', 'X', 'T', 'O') /* text */
#define TAG_EXTPEN TAG('X', 'P', 'E', 'N') /* extpen */
/* Eng objects */
#define TAG_CLIPOBJ TAG('C', 'L', 'P', 'O') /* clip object */
#define TAG_DRIVEROBJ TAG('D', 'R', 'V', 'O') /* driver object */
#define TAG_FONT TAG('F', 'N', 'T', 'E') /* font entry */
#define TAG_FONTOBJ TAG('F', 'N', 'T', 'O') /* font object */
#define TAG_WNDOBJ TAG('W', 'N', 'D', 'O') /* window object */
#define TAG_XLATEOBJ TAG('X', 'L', 'A', 'O') /* xlate object */
#define TAG_BITMAPOBJ TAG('B', 'M', 'P', 'O') /* bitmap object */
#define TAG_CLIPOBJ TAG('C', 'L', 'P', 'O') /* clip object */
#define TAG_DRIVEROBJ TAG('D', 'R', 'V', 'O') /* driver object */
#define TAG_FONT TAG('F', 'N', 'T', 'E') /* font entry */
#define TAG_FONTOBJ TAG('F', 'N', 'T', 'O') /* font object */
#define TAG_WNDOBJ TAG('W', 'N', 'D', 'O') /* window object */
#define TAG_XLATEOBJ TAG('X', 'L', 'A', 'O') /* xlate object */
#define TAG_BITMAPOBJ TAG('B', 'M', 'P', 'O') /* bitmap object */
/* misc */
#define TAG_DRIVER TAG('G', 'D', 'R', 'V') /* video drivers */
#define TAG_FNTFILE TAG('F', 'N', 'T', 'F') /* font file */
#define TAG_DRIVER TAG('G', 'D', 'R', 'V') /* video drivers */
#define TAG_FNTFILE TAG('F', 'N', 'T', 'F') /* font file */
#define TAG_SSECTPOOL TAG('S', 'S', 'C', 'P') /* shared section pool */
/* Dx internal tags rember I do not known if it right namees */
#define TAG_DXPVMLIST TAG('D', 'X', 'P', 'L') /* pmvlist for the driver */
#define TAG_DXFOURCC TAG('D', 'X', 'F', 'O') /* pdwFourCC for the driver */
#define TAG_DXPVMLIST TAG('D', 'X', 'P', 'L') /* pmvlist for the driver */
#define TAG_DXFOURCC TAG('D', 'X', 'F', 'O') /* pdwFourCC for the driver */
#define TAG_DDRAW TAG('D', 'h', ' ', '1')
#define TAG_DDSURF TAG('D', 'h', ' ', '2')
#endif /* _WIN32K_TAGS_H */

View file

@ -1622,10 +1622,10 @@ UserDrawIconEx(
goto cleanup;
}
nStretchMode = NtGdiSetStretchBltMode(hdcOff, STRETCH_DELETESCANS);
nStretchMode = IntGdiSetStretchBltMode(hdcOff, STRETCH_DELETESCANS);
oldFg = NtGdiSetTextColor(hdcOff, RGB(0, 0, 0));
oldBg = NtGdiSetBkColor(hdcOff, RGB(255, 255, 255));
oldFg = IntGdiSetTextColor(hdcOff, RGB(0, 0, 0));
oldBg = IntGdiSetBkColor(hdcOff, RGB(255, 255, 255));
if (diFlags & DI_MASK)
{
@ -1737,9 +1737,9 @@ UserDrawIconEx(
cyHeight, hdcOff, 0, 0, SRCCOPY, 0, 0);
}
NtGdiSetTextColor(hdcOff, oldFg);
NtGdiSetBkColor(hdcOff, oldBg);
NtGdiSetStretchBltMode(hdcOff, nStretchMode);
IntGdiSetTextColor(hdcOff, oldFg);
IntGdiSetBkColor(hdcOff, oldBg);
IntGdiSetStretchBltMode(hdcOff, nStretchMode);
Ret = TRUE;

View file

@ -1505,15 +1505,15 @@ NtUserPaintDesktop(HDC hDC)
rect.bottom = UserGetSystemMetrics(SM_CYSCREEN);
}
color_old = NtGdiSetTextColor(hDC, RGB(255,255,255));
align_old = NtGdiSetTextAlign(hDC, TA_RIGHT);
mode_old = NtGdiSetBkMode(hDC, TRANSPARENT);
color_old = IntGdiSetTextColor(hDC, RGB(255,255,255));
align_old = IntGdiSetTextAlign(hDC, TA_RIGHT);
mode_old = IntGdiSetBkMode(hDC, TRANSPARENT);
NtGdiExtTextOutW(hDC, rect.right-16, rect.bottom-48, 0, NULL, s_wszVersion, len, NULL, 0);
NtGdiSetBkMode(hDC, mode_old);
NtGdiSetTextAlign(hDC, align_old);
NtGdiSetTextColor(hDC, color_old);
IntGdiSetBkMode(hDC, mode_old);
IntGdiSetTextAlign(hDC, align_old);
IntGdiSetTextColor(hDC, color_old);
}
}

View file

@ -1581,7 +1581,7 @@ UserDrawCaptionText(HDC hDc,
return FALSE;
}
NtGdiSetBkMode(hDc, TRANSPARENT);
IntGdiSetBkMode(hDc, TRANSPARENT);
if(uFlags & DC_SMALLCAP)
Status = TextIntCreateFontIndirect(&nclm.lfSmCaptionFont, &hFont);
@ -1603,8 +1603,8 @@ UserDrawCaptionText(HDC hDc,
}
if(uFlags & DC_INBUTTON)
OldTextColor = NtGdiSetTextColor(hDc, IntGetSysColor(COLOR_BTNTEXT));
else OldTextColor = NtGdiSetTextColor(hDc, IntGetSysColor(uFlags & DC_ACTIVE
OldTextColor = IntGdiSetTextColor(hDc, IntGetSysColor(COLOR_BTNTEXT));
else OldTextColor = IntGdiSetTextColor(hDc, IntGetSysColor(uFlags & DC_ACTIVE
? COLOR_CAPTIONTEXT : COLOR_INACTIVECAPTIONTEXT));
//FIXME: If string doesn't fit to rc, truncate it and add ellipsis.
@ -1613,7 +1613,7 @@ UserDrawCaptionText(HDC hDc,
lpRc->top, 0, NULL, Text->Buffer,
Text->Length/sizeof(WCHAR), NULL, 0);
NtGdiSetTextColor(hDc, OldTextColor);
IntGdiSetTextColor(hDc, OldTextColor);
NtGdiSelectFont(hDc, hOldFont);
NtGdiDeleteObject(hFont);

View file

@ -43,7 +43,7 @@ IntGdiArcInternal(
HWND hWnd;
PWINDOW_OBJECT Window;
hWnd = IntWindowFromDC((HDC) dc->hHmgr);
hWnd = IntWindowFromDC((HDC) dc->BaseObject.hHmgr);
Window = UserGetWindowObject(hWnd);
if(!Window) return FALSE;

View file

@ -838,10 +838,10 @@ IntGdiCreateDC(PUNICODE_STRING Driver,
/* Initialize the DC state */
DC_InitDC(hNewDC);
NtGdiSetTextColor(hNewDC, RGB(0, 0, 0));
NtGdiSetTextAlign(hNewDC, TA_TOP);
NtGdiSetBkColor(hNewDC, RGB(255, 255, 255));
NtGdiSetBkMode(hNewDC, OPAQUE);
IntGdiSetTextColor(hNewDC, RGB(0, 0, 0));
IntGdiSetTextAlign(hNewDC, TA_TOP);
IntGdiSetBkColor(hNewDC, RGB(255, 255, 255));
IntGdiSetBkMode(hNewDC, OPAQUE);
}
else
{
@ -1356,8 +1356,8 @@ IntGdiCopyFromSaveState(PDC dc, PDC dcs, HDC hDC)
NtGdiSelectFont( hDC, sDc_Attr->hlfntNew );
NtGdiSelectPen( hDC, sDc_Attr->hpen );
NtGdiSetBkColor( hDC, sDc_Attr->crBackgroundClr);
NtGdiSetTextColor( hDC, sDc_Attr->crForegroundClr);
IntGdiSetBkColor( hDC, sDc_Attr->crBackgroundClr);
IntGdiSetTextColor( hDC, sDc_Attr->crForegroundClr);
NtUserSelectPalette( hDC, dcs->w.hPalette, FALSE );
@ -2385,7 +2385,7 @@ DC_AllocDC(PUNICODE_STRING Driver)
Dc_Attr = NewDC->pDc_Attr;
if(!Dc_Attr) Dc_Attr = &NewDC->Dc_Attr;
NewDC->hHmgr = (HGDIOBJ) hDC; // Save the handle for this DC object.
NewDC->BaseObject.hHmgr = (HGDIOBJ) hDC; // Save the handle for this DC object.
NewDC->w.xformWorld2Wnd.eM11 = 1.0f;
NewDC->w.xformWorld2Wnd.eM12 = 0.0f;
NewDC->w.xformWorld2Wnd.eM21 = 0.0f;

View file

@ -41,7 +41,9 @@ VOID FASTCALL Int##FuncName ( PDC dc, LP##type pt) \
if (!Dc_Attr) Dc_Attr = &dc->Dc_Attr; \
pt->ax = Dc_Attr->ret_x; \
pt->ay = Dc_Attr->ret_y; \
} \
}
#if 0
BOOL STDCALL NtGdi##FuncName ( HDC hdc, LP##type pt ) \
{ \
NTSTATUS Status = STATUS_SUCCESS; \
@ -78,6 +80,7 @@ BOOL STDCALL NtGdi##FuncName ( HDC hdc, LP##type pt ) \
} \
return TRUE; \
}
#endif
#define DC_SET_MODE( func_name, dc_field, min_val, max_val ) \
INT STDCALL func_name( HDC hdc, INT mode ) \
@ -123,7 +126,7 @@ DCU_SyncDcAttrtoUser(PDC dc)
PDC_ATTR Dc_Attr = dc->pDc_Attr;
if (Dc_Attr == ((PDC_ATTR)&dc->Dc_Attr)) return TRUE; // No need to copy self.
if (!Dc_Attr) return FALSE;
else
CopytoUserDcAttr( dc, Dc_Attr);
@ -143,28 +146,28 @@ DCU_SynchDcAttrtoUser(HDC hDC)
}
DC_GET_VAL( INT, NtGdiGetMapMode, iMapMode )
DC_GET_VAL( INT, NtGdiGetPolyFillMode, jFillMode )
DC_GET_VAL( COLORREF, NtGdiGetBkColor, crBackgroundClr )
DC_GET_VAL( INT, NtGdiGetBkMode, jBkMode )
DC_GET_VAL( INT, NtGdiGetROP2, jROP2 )
DC_GET_VAL( INT, NtGdiGetStretchBltMode, jStretchBltMode )
DC_GET_VAL( UINT, NtGdiGetTextAlign, lTextAlign )
DC_GET_VAL( COLORREF, NtGdiGetTextColor, crForegroundClr )
DC_GET_VAL( INT, IntGdiGetMapMode, iMapMode )
DC_GET_VAL( INT, IntGdiGetPolyFillMode, jFillMode )
DC_GET_VAL( COLORREF, IntGdiGetBkColor, crBackgroundClr )
DC_GET_VAL( INT, IntGdiGetBkMode, jBkMode )
DC_GET_VAL( INT, IntGdiGetROP2, jROP2 )
DC_GET_VAL( INT, IntGdiGetStretchBltMode, jStretchBltMode )
DC_GET_VAL( UINT, IntGdiGetTextAlign, lTextAlign )
DC_GET_VAL( COLORREF, IntGdiGetTextColor, crForegroundClr )
DC_GET_VAL_EX( GetViewportExtEx, szlViewportExt.cx, szlViewportExt.cy, SIZE, cx, cy )
DC_GET_VAL_EX( GetViewportOrgEx, ptlViewportOrg.x, ptlViewportOrg.y, POINT, x, y )
DC_GET_VAL_EX( GetWindowExtEx, szlWindowExt.cx, szlWindowExt.cy, SIZE, cx, cy )
DC_GET_VAL_EX( GetWindowOrgEx, ptlWindowOrg.x, ptlWindowOrg.y, POINT, x, y )
DC_SET_MODE( NtGdiSetPolyFillMode, jFillMode, ALTERNATE, WINDING )
DC_SET_MODE( NtGdiSetROP2, jROP2, R2_BLACK, R2_WHITE )
DC_SET_MODE( NtGdiSetStretchBltMode, jStretchBltMode, BLACKONWHITE, HALFTONE )
DC_SET_MODE( IntGdiSetPolyFillMode, jFillMode, ALTERNATE, WINDING )
DC_SET_MODE( IntGdiSetROP2, jROP2, R2_BLACK, R2_WHITE )
DC_SET_MODE( IntGdiSetStretchBltMode, jStretchBltMode, BLACKONWHITE, HALFTONE )
COLORREF FASTCALL
NtGdiSetBkColor(HDC hDC, COLORREF color)
IntGdiSetBkColor(HDC hDC, COLORREF color)
{
COLORREF oldColor;
PDC dc;
@ -189,7 +192,7 @@ NtGdiSetBkColor(HDC hDC, COLORREF color)
}
INT FASTCALL
NtGdiSetBkMode(HDC hDC, INT Mode)
IntGdiSetBkMode(HDC hDC, INT Mode)
{
COLORREF oldMode;
PDC dc;
@ -211,7 +214,7 @@ NtGdiSetBkMode(HDC hDC, INT Mode)
UINT
FASTCALL
NtGdiSetTextAlign(HDC hDC,
IntGdiSetTextAlign(HDC hDC,
UINT Mode)
{
UINT prevAlign;
@ -234,7 +237,7 @@ NtGdiSetTextAlign(HDC hDC,
COLORREF
FASTCALL
NtGdiSetTextColor(HDC hDC,
IntGdiSetTextColor(HDC hDC,
COLORREF color)
{
COLORREF oldColor;

View file

@ -68,37 +68,37 @@ typedef struct
static const
OBJ_TYPE_INFO ObjTypeInfo[] =
{
{0, 0, 0, NULL}, /* 00 reserved entry */
{1, sizeof(DC), GDI_OBJECT_TAG_DC, DC_Cleanup}, /* 01 DC */
{1, 0, 0, 0}, /* 02 DD_DDRAW, should be moved away from gdi objects */
{1, 0, 0, 0}, /* 03 DD_SURFACE, should be moved away from gdi objects */
{1, sizeof(ROSRGNDATA), GDI_OBJECT_TAG_REGION, RGNDATA_Cleanup}, /* 04 REGION */
{1, sizeof(BITMAPOBJ), GDI_OBJECT_TAG_BITMAP, BITMAP_Cleanup}, /* 05 BITMAP */
{0, sizeof(DC), GDI_OBJECT_TAG_CLIOBJ, GDI_CleanupDummy}, /* 06 CLIOBJ: METADC,... FIXME: don't use DC struct */
{0, 0, GDI_OBJECT_TAG_PATH, NULL}, /* 07 PATH, unused */
{1, sizeof(PALGDI), GDI_OBJECT_TAG_PALETTE, PALETTE_Cleanup}, /* 08 PALETTE */
{0, 0, GDI_OBJECT_TAG_COLSPC, NULL}, /* 09 COLORSPACE, unused */
{1, sizeof(TEXTOBJ), GDI_OBJECT_TAG_FONT, GDI_CleanupDummy}, /* 0a FONT */
{0, 0, 0, NULL}, /* 0b RFONT, unused */
{0, 0, 0, NULL}, /* 0c PFE, unused */
{0, 0, 0, NULL}, /* 0d PFT, unused */
{0, 0, 0, NULL}, /* 0e ICMCXF, unused */
{0, 0, 0, NULL}, /* 0f ICMDLL, unused */
{1, sizeof(GDIBRUSHOBJ), GDI_OBJECT_TAG_BRUSH, BRUSH_Cleanup}, /* 10 BRUSH, PEN, EXTPEN */
{0, 0, 0, NULL}, /* 11 D3D_HANDLE, unused */
{0, 0, 0, NULL}, /* 12 DD_VPORT, unused */
{0, 0, 0, NULL}, /* 13 SPACE, unused */
{0, 0, 0, NULL}, /* 14 DD_MOTION, unused */
{0, 0, 0, NULL}, /* 15 META, unused */
{0, 0, 0, NULL}, /* 16 ENUMFONT, unused */
{0, 0, 0, NULL}, /* 17 BMFD, unused */
{0, 0, 0, NULL}, /* 18 VTFD, unused */
{0, 0, 0, NULL}, /* 19 TTFD, unused */
{0, 0, 0, NULL}, /* 1a RC, unused */
{0, 0, 0, NULL}, /* 1b TEMP, unused */
{0, 0, 0, NULL}, /* 1c DRVOBJ, unused */
{0, 0, 0, NULL}, /* 1d DCIOBJ, unused */
{0, 0, 0, NULL}, /* 1e SPOOL, unused */
{0, 0, 0, NULL}, /* 00 reserved entry */
{1, sizeof(DC), TAG_DC, DC_Cleanup}, /* 01 DC */
{1, 0, 0, NULL}, /* 02 UNUSED1 */
{1, 0, 0, NULL}, /* 03 UNUSED2 */
{1, sizeof(ROSRGNDATA), TAG_REGION, RGNDATA_Cleanup}, /* 04 RGN */
{1, sizeof(BITMAPOBJ), TAG_SURFACE, BITMAP_Cleanup}, /* 05 SURFACE */
{0, sizeof(DC), TAG_CLIENTOBJ, GDI_CleanupDummy}, /* 06 CLIENTOBJ: METADC,... FIXME: don't use DC struct */
{0, 0, TAG_PATH, NULL}, /* 07 PATH, unused */
{1, sizeof(PALGDI), TAG_PALETTE, PALETTE_Cleanup}, /* 08 PAL */
{0, 0, TAG_ICMLCS, NULL}, /* 09 ICMLCS, unused */
{1, sizeof(TEXTOBJ), TAG_LFONT, GDI_CleanupDummy}, /* 0a LFONT */
{0, 0, TAG_RFONT, NULL}, /* 0b RFONT, unused */
{0, 0, TAG_PFE, NULL}, /* 0c PFE, unused */
{0, 0, TAG_PFT, NULL}, /* 0d PFT, unused */
{0, 0, TAG_ICMCXF, NULL}, /* 0e ICMCXF, unused */
{0, 0, TAG_SPRITE, NULL}, /* 0f SPRITE, unused */
{1, sizeof(GDIBRUSHOBJ), TAG_BRUSH, BRUSH_Cleanup}, /* 10 BRUSH, PEN, EXTPEN */
{0, 0, TAG_UMPD, NULL}, /* 11 UMPD, unused */
{0, 0, 0, NULL}, /* 12 UNUSED4 */
{0, 0, TAG_SPACE, NULL}, /* 13 SPACE, unused */
{0, 0, 0, NULL}, /* 14 UNUSED5 */
{0, 0, TAG_META, NULL}, /* 15 META, unused */
{0, 0, TAG_EFSTATE, NULL}, /* 16 EFSTATE, unused */
{0, 0, TAG_BMFD, NULL}, /* 17 BMFD, unused */
{0, 0, TAG_TTFD, NULL}, /* 18 VTFD, unused */
{0, 0, TAG_TTFD, NULL}, /* 19 TTFD, unused */
{0, 0, TAG_RC, NULL}, /* 1a RC, unused */
{0, 0, TAG_TEMP, NULL}, /* 1b TEMP, unused */
{0, 0, TAG_DRVOBJ, NULL}, /* 1c DRVOBJ, unused */
{0, 0, TAG_DCIOBJ, NULL}, /* 1d DCIOBJ, unused */
{0, 0, TAG_SPOOL, NULL}, /* 1e SPOOL, unused */
};
#define BASE_OBJTYPE_COUNT (sizeof(ObjTypeInfo) / sizeof(ObjTypeInfo[0]))