Fix build.
[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
18 typedef struct
19 {
20 /* Header for all gdi objects in the handle table.
21 Do not (re)move this. */
22 BASEOBJECT BaseObject;
23
24 ULONG ulStyle;
25 HBITMAP hbmPattern;
26 HANDLE hbmClient;
27 ULONG flAttrs;
28
29 ULONG ulBrushUnique;
30 BRUSH_ATTR *pBrushAttr; // Just like DC_ATTR, pointer to user data
31 BRUSH_ATTR BrushAttr; // " " DCOBJ, internal if pBrushAttr == Zero
32 POINT ptOrigin;
33 ULONG bCacheGrabbed;
34 COLORREF crBack;
35 COLORREF crFore;
36 ULONG ulPalTime;
37 ULONG ulSurfTime;
38 PVOID ulRealization;
39 ULONG Unknown4C[3];
40 POINT ptPenWidth;
41 ULONG ulPenStyle;
42 DWORD *pStyle;
43 ULONG dwStyleCount;
44 ULONG Unknown6C;
45 } BRUSH, *PBRUSH;
46
47 typedef struct
48 {
49 BRUSHOBJ BrushObject;
50 PBRUSH GdiBrushObject;
51 XLATEOBJ *XlateObject;
52 } EBRUSHOBJ, *PEBRUSHOBJ;
53
54 /* GDI Brush Attributes */
55 #define GDIBRUSH_NEED_FG_CLR 0x0001
56 #define GDIBRUSH_NEED_BK_CLR 0x0002 /* Background color is needed */
57 #define GDIBRUSH_DITHER_OK 0x0004 /* Allow color dithering */
58 #define GDIBRUSH_IS_SOLID 0x0010 /* Solid brush */
59 #define GDIBRUSH_IS_HATCH 0x0020 /* Hatch brush */
60 #define GDIBRUSH_IS_BITMAP 0x0040 /* DDB pattern brush */
61 #define GDIBRUSH_IS_DIB 0x0080 /* DIB pattern brush */
62 #define GDIBRUSH_IS_NULL 0x0100 /* Null/hollow brush */
63 #define GDIBRUSH_IS_GLOBAL 0x0200 /* Stock objects */
64 #define GDIBRUSH_IS_PEN 0x0400 /* Pen */
65 #define GDIBRUSH_IS_OLDSTYLEPEN 0x0800 /* Geometric pen */
66 #define GDIBRUSH_IS_DIBPALCOLORS 0x1000
67 #define GDIBRUSH_IS_DIBPALINDICE 0x2000
68 #define GDIBRUSH_IS_DEFAULTSTYLE 0x4000
69 #define GDIBRUSH_IS_MASKING 0x8000 /* Pattern bitmap is used as transparent mask (?) */
70 #define GDIBRUSH_IS_INSIDEFRAME 0x00010000
71 #define GDIBRUSH_CACHED_ENGINE 0x00040000
72 #define GDIBRUSH_CACHED_IS_SOLID 0x80000000
73
74 #define BRUSH_AllocBrush() ((PBRUSH) GDIOBJ_AllocObj(GDIObjType_BRUSH_TYPE))
75 #define BRUSH_AllocBrushWithHandle() ((PBRUSH) GDIOBJ_AllocObjWithHandle (GDI_OBJECT_TYPE_BRUSH))
76 #define BRUSH_FreeBrush(pBrush) GDIOBJ_FreeObj((POBJ)pBrush, GDIObjType_BRUSH_TYPE)
77 #define BRUSH_FreeBrushByHandle(hBrush) GDIOBJ_FreeObjByHandle((HGDIOBJ)hBrush, GDI_OBJECT_TYPE_BRUSH)
78 #define BRUSH_LockBrush(hBrush) ((PBRUSH)GDIOBJ_LockObj((HGDIOBJ)hBrush, GDI_OBJECT_TYPE_BRUSH))
79 #define BRUSH_UnlockBrush(pBrush) GDIOBJ_UnlockObjByPtr((POBJ)pBrush)
80
81 INT FASTCALL BRUSH_GetObject (PBRUSH GdiObject, INT Count, LPLOGBRUSH Buffer);
82 BOOL INTERNAL_CALL BRUSH_Cleanup(PVOID ObjectBody);
83
84 VOID FASTCALL
85 EBRUSHOBJ_vInit(EBRUSHOBJ *BrushInst, PBRUSH BrushObj, XLATEOBJ *XlateObj);
86
87 #endif