-#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
-{
- ULONG AttrFlags;
- COLORREF lbColor;
-} BRUSHATTR, *PBRUSHATTR;
-
-typedef struct
+typedef struct _BRUSH
{
- HGDIOBJ hHmgr;
- PVOID pvEntry;
- ULONG lucExcLock;
- ULONG Tid;
+ /* Header for all gdi objects in the handle table.
+ Do not (re)move this. */
+ BASEOBJECT BaseObject;
ULONG ulStyle;
HBITMAP hbmPattern;
ULONG flAttrs;
ULONG ulBrushUnique;
- BRUSHATTR *pBrushAttr;
- BRUSHATTR BrushAttr;
+ BRUSH_ATTR *pBrushAttr; // Just like DC_ATTR, pointer to user data
+ BRUSH_ATTR BrushAttr; // " " DCOBJ, internal if pBrushAttr == Zero
POINT ptOrigin;
ULONG bCacheGrabbed;
COLORREF crBack;
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;
-/* GDI Brush Attributes */
+ 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_NEED_BK_CLR 0x0002 /* Background color is needed */
#define GDIBRUSH_DITHER_OK 0x0004 /* Allow color dithering */
#define GDIBRUSH_IS_SOLID 0x0010 /* Solid brush */
#define GDIBRUSH_IS_GLOBAL 0x0200 /* Stock objects */
#define GDIBRUSH_IS_PEN 0x0400 /* Pen */
#define GDIBRUSH_IS_OLDSTYLEPEN 0x0800 /* Geometric pen */
+#define GDIBRUSH_IS_DIBPALCOLORS 0x1000
+#define GDIBRUSH_IS_DIBPALINDICE 0x2000
+#define GDIBRUSH_IS_DEFAULTSTYLE 0x4000
#define GDIBRUSH_IS_MASKING 0x8000 /* Pattern bitmap is used as transparent mask (?) */
+#define GDIBRUSH_IS_INSIDEFRAME 0x00010000
+#define GDIBRUSH_CACHED_ENGINE 0x00040000
#define GDIBRUSH_CACHED_IS_SOLID 0x80000000
-#define BRUSHOBJ_AllocBrush() ((HBRUSH) GDIOBJ_AllocObj (GdiHandleTable, GDI_OBJECT_TYPE_BRUSH))
-#define BRUSHOBJ_FreeBrush(hBrush) GDIOBJ_FreeObj(GdiHandleTable, (HGDIOBJ)hBrush, GDI_OBJECT_TYPE_BRUSH)
-#define BRUSHOBJ_LockBrush(hBrush) ((PGDIBRUSHOBJ)GDIOBJ_LockObj(GdiHandleTable, (HGDIOBJ)hBrush, GDI_OBJECT_TYPE_BRUSH))
-#define BRUSHOBJ_UnlockBrush(pBrush) GDIOBJ_UnlockObjByPtr(GdiHandleTable, pBrush)
+#define BRUSH_AllocBrush() ((PBRUSH) GDIOBJ_AllocObj(GDIObjType_BRUSH_TYPE))
+#define BRUSH_AllocBrushWithHandle() ((PBRUSH) GDIOBJ_AllocObjWithHandle (GDI_OBJECT_TYPE_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_LockBrush(hBrush) ((PBRUSH)GDIOBJ_LockObj((HGDIOBJ)hBrush, GDI_OBJECT_TYPE_BRUSH))
+#define BRUSH_UnlockBrush(pBrush) GDIOBJ_UnlockObjByPtr((POBJ)pBrush)
+
+#define BRUSH_ShareLockBrush(hBrush) ((PBRUSH)GDIOBJ_ShareLockObj((HGDIOBJ)hBrush, GDI_OBJECT_TYPE_BRUSH))
+#define BRUSH_ShareUnlockBrush(pBrush) GDIOBJ_ShareUnlockObjByPtr((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);