Synchronize with trunk's revision r57599.
[reactos.git] / win32ss / gdi / ntgdi / brush.h
1 #pragma once
2
3 /* Internal interface */
4
5 #define NB_HATCH_STYLES 6
6
7 /*
8 * The layout of this structure is taken from "Windows Graphics Programming"
9 * book written by Feng Yuan.
10 *
11 * DON'T MODIFY THIS STRUCTURE UNLESS REALLY NEEDED AND EVEN THEN ASK ON
12 * A MAILING LIST FIRST.
13 */
14 typedef struct _BRUSH
15 {
16 /* Header for all gdi objects in the handle table.
17 Do not (re)move this. */
18 BASEOBJECT BaseObject;
19
20 ULONG ulStyle;
21 HBITMAP hbmPattern;
22 HBITMAP hbmClient;
23 ULONG flAttrs;
24
25 ULONG ulBrushUnique;
26 BRUSH_ATTR *pBrushAttr; // Just like DC_ATTR, pointer to user data
27 BRUSH_ATTR BrushAttr; // " " DCOBJ, internal if pBrushAttr == Zero
28 POINT ptOrigin;
29 ULONG bCacheGrabbed;
30 COLORREF crBack;
31 COLORREF crFore;
32 ULONG ulPalTime;
33 ULONG ulSurfTime;
34 PVOID ulRealization;
35 ULONG Unknown4C[3];
36 POINT ptPenWidth;
37 ULONG ulPenStyle;
38 DWORD *pStyle;
39 ULONG dwStyleCount;
40 ULONG Unknown6C;
41 } BRUSH, *PBRUSH;
42
43 typedef struct _EBRUSHOBJ
44 {
45 BRUSHOBJ BrushObject;
46
47 COLORREF crRealize;
48 ULONG ulRGBColor;
49 PVOID pengbrush;
50 ULONG ulSurfPalTime;
51 ULONG ulDCPalTime;
52 COLORREF crCurrentText;
53 COLORREF crCurrentBack;
54 COLORADJUSTMENT *pca;
55 // DWORD dwUnknown2c;
56 // DWORD dwUnknown30;
57 SURFACE * psurfTrg;
58 struct _PALETTE * ppalSurf;
59 struct _PALETTE * ppalDC;
60 struct _PALETTE * ppalDIB;
61 // DWORD dwUnknown44;
62 BRUSH * pbrush;
63 FLONG flattrs;
64 DWORD ulUnique;
65 // DWORD dwUnknown54;
66 // DWORD dwUnknown58;
67 } EBRUSHOBJ, *PEBRUSHOBJ;
68
69 /* GDI Brush Attributes */
70 #define BR_NEED_FG_CLR 0x00000001
71 #define BR_NEED_BK_CLR 0x00000002 /* Background color is needed */
72 #define BR_DITHER_OK 0x00000004 /* Allow color dithering */
73 #define BR_IS_SOLID 0x00000010 /* Solid brush */
74 #define BR_IS_HATCH 0x00000020 /* Hatch brush */
75 #define BR_IS_BITMAP 0x00000040 /* DDB pattern brush */
76 #define BR_IS_DIB 0x00000080 /* DIB pattern brush */
77 #define BR_IS_NULL 0x00000100 /* Null/hollow brush */
78 #define BR_IS_GLOBAL 0x00000200 /* Stock objects */
79 #define BR_IS_PEN 0x00000400 /* Pen */
80 #define BR_IS_OLDSTYLEPEN 0x00000800 /* Geometric pen */
81 #define BR_IS_DIBPALCOLORS 0x00001000
82 #define BR_IS_DIBPALINDICE 0x00002000
83 #define BR_IS_DEFAULTSTYLE 0x00004000
84 #define BR_IS_MASKING 0x00008000 /* Pattern bitmap is used as transparent mask (?) */
85 #define BR_IS_INSIDEFRAME 0x00010000
86 #define BR_CACHED_ENGINE 0x00040000
87 #define BR_CACHED_IS_SOLID 0x80000000
88
89 #define BRUSH_AllocBrush() ((PBRUSH) GDIOBJ_AllocObj(GDIObjType_BRUSH_TYPE))
90 #define BRUSH_AllocBrushWithHandle() ((PBRUSH) GDIOBJ_AllocObjWithHandle(GDI_OBJECT_TYPE_BRUSH, sizeof(BRUSH)))
91 #define BRUSH_FreeBrush(pBrush) GDIOBJ_FreeObj((POBJ)pBrush, GDIObjType_BRUSH_TYPE)
92 #define BRUSH_FreeBrushByHandle(hBrush) GDIOBJ_FreeObjByHandle((HGDIOBJ)hBrush, GDI_OBJECT_TYPE_BRUSH)
93 #define BRUSH_ShareLockBrush(hBrush) ((PBRUSH)GDIOBJ_ShareLockObj((HGDIOBJ)hBrush, GDI_OBJECT_TYPE_BRUSH))
94 #define BRUSH_ShareUnlockBrush(pBrush) GDIOBJ_vDereferenceObject((POBJ)pBrush)
95
96 INT FASTCALL BRUSH_GetObject (PBRUSH GdiObject, INT Count, LPLOGBRUSH Buffer);
97 BOOL NTAPI BRUSH_Cleanup(PVOID ObjectBody);
98
99 extern HSURF gahsurfHatch[HS_DDI_MAX];
100
101 struct _SURFACE;
102 struct _PALETTE;
103 struct _DC;
104
105 INIT_FUNCTION
106 NTSTATUS
107 NTAPI
108 InitBrushImpl(VOID);
109
110 VOID
111 NTAPI
112 EBRUSHOBJ_vInit(EBRUSHOBJ *pebo, PBRUSH pbrush, struct _SURFACE *, COLORREF, COLORREF, struct _PALETTE *);
113
114 VOID
115 NTAPI
116 EBRUSHOBJ_vInitFromDC(EBRUSHOBJ *pebo, PBRUSH pbrush, struct _DC *);
117
118 VOID
119 FASTCALL
120 EBRUSHOBJ_vSetSolidRGBColor(EBRUSHOBJ *pebo, COLORREF crColor);
121
122 VOID
123 NTAPI
124 EBRUSHOBJ_vUpdateFromDC(EBRUSHOBJ *pebo, PBRUSH pbrush, struct _DC *);
125
126 BOOL
127 NTAPI
128 EBRUSHOBJ_bRealizeBrush(EBRUSHOBJ *pebo, BOOL bCallDriver);
129
130 VOID
131 NTAPI
132 EBRUSHOBJ_vCleanup(EBRUSHOBJ *pebo);
133
134 PVOID
135 NTAPI
136 EBRUSHOBJ_pvGetEngBrush(EBRUSHOBJ *pebo);
137
138 SURFOBJ*
139 NTAPI
140 EBRUSHOBJ_psoPattern(EBRUSHOBJ *pebo);
141
142 #define BRUSHOBJ_psoPattern(pbo) \
143 EBRUSHOBJ_psoPattern(CONTAINING_RECORD(pbo, EBRUSHOBJ, BrushObject))
144
145 ULONG
146 FORCEINLINE
147 EBRUSHOBJ_iSetSolidColor(EBRUSHOBJ *pebo, ULONG iSolidColor)
148 {
149 ULONG iOldColor = pebo->BrushObject.iSolidColor;
150 pebo->BrushObject.iSolidColor = iSolidColor;
151 return iOldColor;
152 }
153
154 BOOL FASTCALL IntGdiSetBrushOwner(PBRUSH,DWORD);
155 BOOL FASTCALL GreSetBrushOwner(HBRUSH,DWORD);
156
157 HBRUSH APIENTRY
158 IntGdiCreatePatternBrush(
159 HBITMAP hBitmap);
160
161 HBRUSH APIENTRY
162 IntGdiCreateSolidBrush(
163 COLORREF Color);
164
165 HBRUSH APIENTRY
166 IntGdiCreateNullBrush(VOID);
167
168 VOID FASTCALL
169 IntGdiSetSolidBrushColor(HBRUSH hBrush, COLORREF Color);