revert r30916.
[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 ULONG AttrFlags;
21 COLORREF lbColor;
22 } BRUSHATTR, *PBRUSHATTR;
23
24 typedef struct
25 {
26 HGDIOBJ hHmgr;
27 PVOID pvEntry;
28 ULONG lucExcLock;
29 ULONG Tid;
30
31 ULONG ulStyle;
32 HBITMAP hbmPattern;
33 HANDLE hbmClient;
34 ULONG flAttrs;
35
36 ULONG ulBrushUnique;
37 BRUSHATTR *pBrushAttr;
38 BRUSHATTR BrushAttr;
39 POINT ptOrigin;
40 ULONG bCacheGrabbed;
41 COLORREF crBack;
42 COLORREF crFore;
43 ULONG ulPalTime;
44 ULONG ulSurfTime;
45 PVOID ulRealization;
46 ULONG Unknown4C[3];
47 POINT ptPenWidth;
48 ULONG ulPenStyle;
49 DWORD *pStyle;
50 ULONG dwStyleCount;
51 ULONG Unknown6C;
52 } GDIBRUSHOBJ, *PGDIBRUSHOBJ;
53
54 typedef struct
55 {
56 BRUSHOBJ BrushObject;
57 PGDIBRUSHOBJ GdiBrushObject;
58 XLATEOBJ *XlateObject;
59 } GDIBRUSHINST, *PGDIBRUSHINST;
60
61 /* GDI Brush Attributes */
62
63 #define GDIBRUSH_NEED_BK_CLR 0x0002 /* Background color is needed */
64 #define GDIBRUSH_DITHER_OK 0x0004 /* Allow color dithering */
65 #define GDIBRUSH_IS_SOLID 0x0010 /* Solid brush */
66 #define GDIBRUSH_IS_HATCH 0x0020 /* Hatch brush */
67 #define GDIBRUSH_IS_BITMAP 0x0040 /* DDB pattern brush */
68 #define GDIBRUSH_IS_DIB 0x0080 /* DIB pattern brush */
69 #define GDIBRUSH_IS_NULL 0x0100 /* Null/hollow brush */
70 #define GDIBRUSH_IS_GLOBAL 0x0200 /* Stock objects */
71 #define GDIBRUSH_IS_PEN 0x0400 /* Pen */
72 #define GDIBRUSH_IS_OLDSTYLEPEN 0x0800 /* Geometric pen */
73 #define GDIBRUSH_IS_MASKING 0x8000 /* Pattern bitmap is used as transparent mask (?) */
74 #define GDIBRUSH_CACHED_IS_SOLID 0x80000000
75
76 #define BRUSHOBJ_AllocBrush() ((HBRUSH) GDIOBJ_AllocObj (GdiHandleTable, GDI_OBJECT_TYPE_BRUSH))
77 #define BRUSHOBJ_FreeBrush(hBrush) GDIOBJ_FreeObj(GdiHandleTable, (HGDIOBJ)hBrush, GDI_OBJECT_TYPE_BRUSH)
78 #define BRUSHOBJ_LockBrush(hBrush) ((PGDIBRUSHOBJ)GDIOBJ_LockObj(GdiHandleTable, (HGDIOBJ)hBrush, GDI_OBJECT_TYPE_BRUSH))
79 #define BRUSHOBJ_UnlockBrush(pBrush) GDIOBJ_UnlockObjByPtr(GdiHandleTable, pBrush)
80
81 INT FASTCALL BRUSH_GetObject (PGDIBRUSHOBJ GdiObject, INT Count, LPLOGBRUSH Buffer);
82 BOOL INTERNAL_CALL BRUSH_Cleanup(PVOID ObjectBody);
83
84 #endif