[WIN32K]
[reactos.git] / reactos / subsystems / win32 / win32k / include / 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 HANDLE 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 // PALETTE * ppalDC;
60 // PALETTE * ppal3;
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 GDIBRUSH_NEED_FG_CLR 0x0001
71 #define GDIBRUSH_NEED_BK_CLR 0x0002 /* Background color is needed */
72 #define GDIBRUSH_DITHER_OK 0x0004 /* Allow color dithering */
73 #define GDIBRUSH_IS_SOLID 0x0010 /* Solid brush */
74 #define GDIBRUSH_IS_HATCH 0x0020 /* Hatch brush */
75 #define GDIBRUSH_IS_BITMAP 0x0040 /* DDB pattern brush */
76 #define GDIBRUSH_IS_DIB 0x0080 /* DIB pattern brush */
77 #define GDIBRUSH_IS_NULL 0x0100 /* Null/hollow brush */
78 #define GDIBRUSH_IS_GLOBAL 0x0200 /* Stock objects */
79 #define GDIBRUSH_IS_PEN 0x0400 /* Pen */
80 #define GDIBRUSH_IS_OLDSTYLEPEN 0x0800 /* Geometric pen */
81 #define GDIBRUSH_IS_DIBPALCOLORS 0x1000
82 #define GDIBRUSH_IS_DIBPALINDICE 0x2000
83 #define GDIBRUSH_IS_DEFAULTSTYLE 0x4000
84 #define GDIBRUSH_IS_MASKING 0x8000 /* Pattern bitmap is used as transparent mask (?) */
85 #define GDIBRUSH_IS_INSIDEFRAME 0x00010000
86 #define GDIBRUSH_CACHED_ENGINE 0x00040000
87 #define GDIBRUSH_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 struct _DC;
100
101 VOID
102 NTAPI
103 EBRUSHOBJ_vInit(EBRUSHOBJ *pebo, PBRUSH pbrush, struct _DC *);
104
105 VOID
106 FASTCALL
107 EBRUSHOBJ_vSetSolidBrushColor(EBRUSHOBJ *pebo, COLORREF crColor);
108
109 VOID
110 NTAPI
111 EBRUSHOBJ_vUpdate(EBRUSHOBJ *pebo, PBRUSH pbrush, struct _DC *pdc);
112
113 BOOL
114 NTAPI
115 EBRUSHOBJ_bRealizeBrush(EBRUSHOBJ *pebo, BOOL bCallDriver);
116
117 VOID
118 NTAPI
119 EBRUSHOBJ_vCleanup(EBRUSHOBJ *pebo);
120
121 PVOID
122 NTAPI
123 EBRUSHOBJ_pvGetEngBrush(EBRUSHOBJ *pebo);
124
125 BOOL FASTCALL IntGdiSetBrushOwner(PBRUSH,DWORD);
126 BOOL FASTCALL GreSetBrushOwner(HBRUSH,DWORD);
127