-#ifndef __WIN32K_BRUSH_H
-#define __WIN32K_BRUSH_H
+#pragma once
#include "gdiobj.h"
* DON'T MODIFY THIS STRUCTURE UNLESS REALLY NEEDED AND EVEN THEN ASK ON
* A MAILING LIST FIRST.
*/
-
-typedef struct
+typedef struct _BRUSH
{
/* Header for all gdi objects in the handle table.
Do not (re)move this. */
DWORD *pStyle;
ULONG dwStyleCount;
ULONG Unknown6C;
-} GDIBRUSHOBJ, *PGDIBRUSHOBJ;
+} BRUSH, *PBRUSH;
-typedef struct
+typedef struct _EBRUSHOBJ
{
- BRUSHOBJ BrushObject;
- PGDIBRUSHOBJ GdiBrushObject;
- XLATEOBJ *XlateObject;
-} GDIBRUSHINST, *PGDIBRUSHINST;
+ BRUSHOBJ BrushObject;
+
+ COLORREF crRealize;
+ ULONG ulRGBColor;
+ PVOID pengbrush;
+ ULONG ulSurfPalTime;
+ ULONG ulDCPalTime;
+ COLORREF crCurrentText;
+ COLORREF crCurrentBack;
+ COLORADJUSTMENT *pca;
+// DWORD dwUnknown2c;
+// DWORD dwUnknown30;
+ SURFACE * psurfTrg;
+ struct _PALETTE * ppalSurf;
+// PALETTE * ppalDC;
+// PALETTE * ppal3;
+// DWORD dwUnknown44;
+ BRUSH * pbrush;
+ FLONG flattrs;
+ DWORD ulUnique;
+// DWORD dwUnknown54;
+// DWORD dwUnknown58;
+} EBRUSHOBJ, *PEBRUSHOBJ;
/* GDI Brush Attributes */
#define GDIBRUSH_NEED_FG_CLR 0x0001
#define GDIBRUSH_CACHED_ENGINE 0x00040000
#define GDIBRUSH_CACHED_IS_SOLID 0x80000000
-#define BRUSHOBJ_AllocBrush() ((PGDIBRUSHOBJ) GDIOBJ_AllocObj(GDIObjType_BRUSH_TYPE))
-#define BRUSHOBJ_AllocBrushWithHandle() ((PGDIBRUSHOBJ) GDIOBJ_AllocObjWithHandle (GDI_OBJECT_TYPE_BRUSH))
-#define BRUSHOBJ_FreeBrush(pBrush) GDIOBJ_FreeObj((POBJ)pBrush, GDIObjType_BRUSH_TYPE)
-#define BRUSHOBJ_FreeBrushByHandle(hBrush) GDIOBJ_FreeObjByHandle((HGDIOBJ)hBrush, GDI_OBJECT_TYPE_BRUSH)
-#define BRUSHOBJ_LockBrush(hBrush) ((PGDIBRUSHOBJ)GDIOBJ_LockObj((HGDIOBJ)hBrush, GDI_OBJECT_TYPE_BRUSH))
-#define BRUSHOBJ_UnlockBrush(pBrush) GDIOBJ_UnlockObjByPtr((POBJ)pBrush)
+#define BRUSH_AllocBrush() ((PBRUSH) GDIOBJ_AllocObj(GDIObjType_BRUSH_TYPE))
+#define BRUSH_AllocBrushWithHandle() ((PBRUSH) GDIOBJ_AllocObjWithHandle(GDI_OBJECT_TYPE_BRUSH, sizeof(BRUSH)))
+#define BRUSH_FreeBrush(pBrush) GDIOBJ_FreeObj((POBJ)pBrush, GDIObjType_BRUSH_TYPE)
+#define BRUSH_FreeBrushByHandle(hBrush) GDIOBJ_FreeObjByHandle((HGDIOBJ)hBrush, GDI_OBJECT_TYPE_BRUSH)
+#define BRUSH_ShareLockBrush(hBrush) ((PBRUSH)GDIOBJ_ShareLockObj((HGDIOBJ)hBrush, GDI_OBJECT_TYPE_BRUSH))
+#define BRUSH_ShareUnlockBrush(pBrush) GDIOBJ_vDereferenceObject((POBJ)pBrush)
-INT FASTCALL BRUSH_GetObject (PGDIBRUSHOBJ GdiObject, INT Count, LPLOGBRUSH Buffer);
+INT FASTCALL BRUSH_GetObject (PBRUSH GdiObject, INT Count, LPLOGBRUSH Buffer);
BOOL INTERNAL_CALL BRUSH_Cleanup(PVOID ObjectBody);
-#endif
+struct _DC;
+
+VOID
+NTAPI
+EBRUSHOBJ_vInit(EBRUSHOBJ *pebo, PBRUSH pbrush, struct _DC *);
+
+VOID
+FASTCALL
+EBRUSHOBJ_vSetSolidBrushColor(EBRUSHOBJ *pebo, COLORREF crColor);
+
+VOID
+NTAPI
+EBRUSHOBJ_vUpdate(EBRUSHOBJ *pebo, PBRUSH pbrush, struct _DC *pdc);
+
+BOOL
+NTAPI
+EBRUSHOBJ_bRealizeBrush(EBRUSHOBJ *pebo, BOOL bCallDriver);
+
+VOID
+NTAPI
+EBRUSHOBJ_vCleanup(EBRUSHOBJ *pebo);
+
+PVOID
+NTAPI
+EBRUSHOBJ_pvGetEngBrush(EBRUSHOBJ *pebo);
+
+PVOID FASTCALL AllocateObjectAttr(VOID);
+
+VOID FASTCALL FreeObjectAttr(PVOID);
+
+BOOL FASTCALL IntGdiSetBrushOwner(PBRUSH,DWORD);