1 /* $Id: brush.c,v 1.11 2001/03/31 15:35:08 jfilby Exp $
5 #undef WIN32_LEAN_AND_MEAN
8 #include <win32k/bitmaps.h>
9 #include <win32k/brush.h>
10 //#include <win32k/debug.h>
13 #include <win32k/debug1.h>
15 HBRUSH STDCALL
W32kCreateBrushIndirect(CONST LOGBRUSH
*lb
)
20 brushPtr
= BRUSHOBJ_AllocBrush();
21 hBrush
= BRUSHOBJ_PtrToHandle (brushPtr
);
27 brushPtr
->logbrush
.lbStyle
= lb
->lbStyle
;
28 brushPtr
->logbrush
.lbColor
= lb
->lbColor
;
29 brushPtr
->logbrush
.lbHatch
= lb
->lbHatch
;
31 BRUSHOBJ_UnlockBrush (hBrush
);
32 DPRINT("%08x\n", hBrush
);
37 HBRUSH STDCALL
W32kCreateDIBPatternBrush(HGLOBAL hDIBPacked
,
43 PBITMAPINFO info
, newInfo
;
46 DPRINT("%04x\n", hbitmap
);
48 logbrush
.lbStyle
= BS_DIBPATTERN
;
49 logbrush
.lbColor
= coloruse
;
52 /* Make a copy of the bitmap */
53 if (!(info
= (BITMAPINFO
*)GlobalLock( hbitmap
)))
59 if (info
->bmiHeader
.biCompression
) size
= info
->bmiHeader
.biSizeImage
;
61 size
= DIB_GetDIBImageBytes(info
->bmiHeader
.biWidth
, info
->bmiHeader
.biHeight
, info
->bmiHeader
.biBitCount
);
62 size
+= DIB_BitmapInfoSize(info
, coloruse
);
64 if (!(logbrush
.lbHatch
= (INT
)GlobalAlloc16( GMEM_MOVEABLE
, size
)))
66 GlobalUnlock16( hbitmap
);
69 newInfo
= (BITMAPINFO
*) GlobalLock16((HGLOBAL16
)logbrush
.lbHatch
);
70 memcpy(newInfo
, info
, size
);
71 GlobalUnlock16((HGLOBAL16
)logbrush
.lbHatch
);
72 GlobalUnlock(hbitmap
);
73 return W32kCreateBrushIndirect(&logbrush
);
77 HBRUSH STDCALL
W32kCreateDIBPatternBrushPt(CONST VOID
*PackedDIB
,
85 info
= (BITMAPINFO
*) PackedDIB
;
90 DPRINT ("%p %ldx%ld %dbpp\n",
92 info
->bmiHeader
.biWidth
,
93 info
->bmiHeader
.biHeight
,
94 info
->bmiHeader
.biBitCount
);
96 logbrush
.lbStyle
= BS_DIBPATTERN
;
97 logbrush
.lbColor
= Usage
;
100 /* Make a copy of the bitmap */
102 if (info
->bmiHeader
.biCompression
)
104 size
= info
->bmiHeader
.biSizeImage
;
108 size
= DIB_GetDIBImageBytes (info
->bmiHeader
.biWidth
, info
->bmiHeader
.biHeight
, info
->bmiHeader
.biBitCount
);
110 size
+= DIB_BitmapInfoSize (info
, Usage
);
112 logbrush
.lbHatch
= (INT
)GDIOBJ_PtrToHandle (GDIOBJ_AllocObject (size
, GO_MAGIC_DONTCARE
), GO_MAGIC_DONTCARE
);
113 if (logbrush
.lbHatch
== 0)
117 newInfo
= (PBITMAPINFO
) GDIOBJ_HandleToPtr ((HGDIOBJ
) logbrush
.lbHatch
, GO_MAGIC_DONTCARE
);
118 memcpy(newInfo
, info
, size
);
119 GDIOBJ_UnlockObject((HGDIOBJ
)logbrush
.lbHatch
);
121 return W32kCreateBrushIndirect (&logbrush
);
124 HBRUSH STDCALL
W32kCreateHatchBrush(INT Style
,
129 DPRINT("%d %06lx\n", Style
, Color
);
131 if (Style
< 0 || Style
>= NB_HATCH_STYLES
)
135 logbrush
.lbStyle
= BS_HATCHED
;
136 logbrush
.lbColor
= Color
;
137 logbrush
.lbHatch
= Style
;
139 return W32kCreateBrushIndirect (&logbrush
);
142 HBRUSH STDCALL
W32kCreatePatternBrush(HBITMAP hBitmap
)
144 LOGBRUSH logbrush
= { BS_PATTERN
, 0, 0 };
146 DPRINT ("%04x\n", hBitmap
);
147 logbrush
.lbHatch
= (INT
) BITMAPOBJ_CopyBitmap (hBitmap
);
148 if(!logbrush
.lbHatch
)
154 return W32kCreateBrushIndirect( &logbrush
);
158 HBRUSH STDCALL
W32kCreateSolidBrush(COLORREF Color
)
162 logbrush
.lbStyle
= BS_SOLID
;
163 logbrush
.lbColor
= Color
;
164 logbrush
.lbHatch
= 0;
166 return W32kCreateBrushIndirect(&logbrush
);
169 BOOL STDCALL
W32kFixBrushOrgEx(VOID
)
174 BOOL STDCALL
W32kPatBlt(HDC hDC
,
184 BOOL STDCALL
W32kSetBrushOrgEx(HDC hDC
,