[YAROTOWS] Reintegrate the branch. For a brighter future.
[reactos.git] / reactos / subsystems / win32 / win32k / include / brush.h
index 015c614..8c9a7a8 100644 (file)
@@ -1,5 +1,4 @@
-#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;
@@ -34,8 +25,8 @@ typedef struct
    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;
@@ -49,17 +40,36 @@ typedef struct
    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 */
@@ -70,15 +80,55 @@ typedef struct
 #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);