[Win32k]
[reactos.git] / reactos / subsystems / win32 / win32k / include / brush.h
1 #ifndef __WIN32K_BRUSH_H
2 #define __WIN32K_BRUSH_H
3
4 #include "gdiobj.h"
5
6 /* Internal interface */
7
8 #define NB_HATCH_STYLES 6
9
10 /*
11 * The layout of this structure is taken from "Windows Graphics Programming"
12 * book written by Feng Yuan.
13 *
14 * DON'T MODIFY THIS STRUCTURE UNLESS REALLY NEEDED AND EVEN THEN ASK ON
15 * A MAILING LIST FIRST.
16 */
17 typedef struct _BRUSH
18 {
19 /* Header for all gdi objects in the handle table.
20 Do not (re)move this. */
21 BASEOBJECT BaseObject;
22
23 ULONG ulStyle;
24 HBITMAP hbmPattern;
25 HANDLE hbmClient;
26 ULONG flAttrs;
27
28 ULONG ulBrushUnique;
29 BRUSH_ATTR *pBrushAttr; // Just like DC_ATTR, pointer to user data
30 BRUSH_ATTR BrushAttr; // " " DCOBJ, internal if pBrushAttr == Zero
31 POINT ptOrigin;
32 ULONG bCacheGrabbed;
33 COLORREF crBack;
34 COLORREF crFore;
35 ULONG ulPalTime;
36 ULONG ulSurfTime;
37 PVOID ulRealization;
38 ULONG Unknown4C[3];
39 POINT ptPenWidth;
40 ULONG ulPenStyle;
41 DWORD *pStyle;
42 ULONG dwStyleCount;
43 ULONG Unknown6C;
44 } BRUSH, *PBRUSH;
45
46 typedef struct _EBRUSHOBJ
47 {
48 BRUSHOBJ BrushObject;
49
50 COLORREF crRealize;
51 ULONG ulRGBColor;
52 PVOID pengbrush;
53 ULONG ulSurfPalTime;
54 ULONG ulDCPalTime;
55 COLORREF crCurrentText;
56 COLORREF crCurrentBack;
57 COLORADJUSTMENT *pca;
58 // DWORD dwUnknown2c;
59 // DWORD dwUnknown30;
60 SURFACE * psurfTrg;
61 struct _PALETTE * ppalSurf;
62 // PALETTE * ppalDC;
63 // PALETTE * ppal3;
64 // DWORD dwUnknown44;
65 BRUSH * pbrush;
66 FLONG flattrs;
67 DWORD ulUnique;
68 // DWORD dwUnknown54;
69 // DWORD dwUnknown58;
70 } EBRUSHOBJ, *PEBRUSHOBJ;
71
72 /* GDI Brush Attributes */
73 #define GDIBRUSH_NEED_FG_CLR 0x0001
74 #define GDIBRUSH_NEED_BK_CLR 0x0002 /* Background color is needed */
75 #define GDIBRUSH_DITHER_OK 0x0004 /* Allow color dithering */
76 #define GDIBRUSH_IS_SOLID 0x0010 /* Solid brush */
77 #define GDIBRUSH_IS_HATCH 0x0020 /* Hatch brush */
78 #define GDIBRUSH_IS_BITMAP 0x0040 /* DDB pattern brush */
79 #define GDIBRUSH_IS_DIB 0x0080 /* DIB pattern brush */
80 #define GDIBRUSH_IS_NULL 0x0100 /* Null/hollow brush */
81 #define GDIBRUSH_IS_GLOBAL 0x0200 /* Stock objects */
82 #define GDIBRUSH_IS_PEN 0x0400 /* Pen */
83 #define GDIBRUSH_IS_OLDSTYLEPEN 0x0800 /* Geometric pen */
84 #define GDIBRUSH_IS_DIBPALCOLORS 0x1000
85 #define GDIBRUSH_IS_DIBPALINDICE 0x2000
86 #define GDIBRUSH_IS_DEFAULTSTYLE 0x4000
87 #define GDIBRUSH_IS_MASKING 0x8000 /* Pattern bitmap is used as transparent mask (?) */
88 #define GDIBRUSH_IS_INSIDEFRAME 0x00010000
89 #define GDIBRUSH_CACHED_ENGINE 0x00040000
90 #define GDIBRUSH_CACHED_IS_SOLID 0x80000000
91
92 #define BRUSH_AllocBrush() ((PBRUSH) GDIOBJ_AllocObj(GDIObjType_BRUSH_TYPE))
93 #define BRUSH_AllocBrushWithHandle() ((PBRUSH) GDIOBJ_AllocObjWithHandle (GDI_OBJECT_TYPE_BRUSH))
94 #define BRUSH_FreeBrush(pBrush) GDIOBJ_FreeObj((POBJ)pBrush, GDIObjType_BRUSH_TYPE)
95 #define BRUSH_FreeBrushByHandle(hBrush) GDIOBJ_FreeObjByHandle((HGDIOBJ)hBrush, GDI_OBJECT_TYPE_BRUSH)
96 #define BRUSH_LockBrush(hBrush) ((PBRUSH)GDIOBJ_LockObj((HGDIOBJ)hBrush, GDI_OBJECT_TYPE_BRUSH))
97 #define BRUSH_UnlockBrush(pBrush) GDIOBJ_UnlockObjByPtr((POBJ)pBrush)
98
99 #define BRUSH_ShareLockBrush(hBrush) ((PBRUSH)GDIOBJ_ShareLockObj((HGDIOBJ)hBrush, GDI_OBJECT_TYPE_BRUSH))
100 #define BRUSH_ShareUnlockBrush(pBrush) GDIOBJ_ShareUnlockObjByPtr((POBJ)pBrush)
101
102 INT FASTCALL BRUSH_GetObject (PBRUSH GdiObject, INT Count, LPLOGBRUSH Buffer);
103 BOOL INTERNAL_CALL BRUSH_Cleanup(PVOID ObjectBody);
104
105 struct _DC;
106
107 VOID
108 NTAPI
109 EBRUSHOBJ_vInit(EBRUSHOBJ *pebo, PBRUSH pbrush, struct _DC *);
110
111 VOID
112 FASTCALL
113 EBRUSHOBJ_vSetSolidBrushColor(EBRUSHOBJ *pebo, COLORREF crColor);
114
115 VOID
116 NTAPI
117 EBRUSHOBJ_vUpdate(EBRUSHOBJ *pebo, PBRUSH pbrush, struct _DC *pdc);
118
119 BOOL
120 NTAPI
121 EBRUSHOBJ_bRealizeBrush(EBRUSHOBJ *pebo, BOOL bCallDriver);
122
123 VOID
124 NTAPI
125 EBRUSHOBJ_vCleanup(EBRUSHOBJ *pebo);
126
127 PVOID
128 NTAPI
129 EBRUSHOBJ_pvGetEngBrush(EBRUSHOBJ *pebo);
130
131 PVOID FASTCALL AllocateObjectAttr(VOID);
132
133 VOID FASTCALL FreeObjectAttr(PVOID);
134
135 #endif