1 /* $Id: brush.c,v 1.8 2000/02/20 22:52:50 ea Exp $
5 #undef WIN32_LEAN_AND_MEAN
8 #include <win32k/bitmaps.h>
9 #include <win32k/brush.h>
10 //#include <win32k/debug.h>
13 #include <internal/debug.h>
15 HBRUSH STDCALL
W32kCreateBrushIndirect(CONST LOGBRUSH
*lb
)
20 hBrush
= BRUSHOBJ_AllocBrush ();
26 brushPtr
= BRUSHOBJ_HandleToPtr (hBrush
);
27 brushPtr
->logbrush
.lbStyle
= lb
->lbStyle
;
28 brushPtr
->logbrush
.lbColor
= lb
->lbColor
;
29 brushPtr
->logbrush
.lbHatch
= lb
->lbHatch
;
30 BRUSHOBJ_UnlockBrush (hBrush
);
31 DPRINT("%08x\n", hBrush
);
36 HBRUSH STDCALL
W32kCreateDIBPatternBrush(HGLOBAL hDIBPacked
,
42 PBITMAPINFO info
, newInfo
;
45 DPRINT("%04x\n", hbitmap
);
47 logbrush
.lbStyle
= BS_DIBPATTERN
;
48 logbrush
.lbColor
= coloruse
;
51 /* Make a copy of the bitmap */
52 if (!(info
= (BITMAPINFO
*)GlobalLock( hbitmap
)))
58 if (info
->bmiHeader
.biCompression
)
59 size
= info
->bmiHeader
.biSizeImage
;
61 size
= DIB_GetDIBImageBytes(info
->bmiHeader
.biWidth
,
62 info
->bmiHeader
.biHeight
,
63 info
->bmiHeader
.biBitCount
);
64 size
+= DIB_BitmapInfoSize( info
, coloruse
);
66 if (!(logbrush
.lbHatch
= (INT
)GlobalAlloc16( GMEM_MOVEABLE
, size
)))
68 GlobalUnlock16( hbitmap
);
71 newInfo
= (BITMAPINFO
*) GlobalLock16( (HGLOBAL16
)logbrush
.lbHatch
);
72 memcpy( newInfo
, info
, size
);
73 GlobalUnlock16( (HGLOBAL16
)logbrush
.lbHatch
);
74 GlobalUnlock( hbitmap
);
75 return W32kCreateBrushIndirect( &logbrush
);
79 HBRUSH STDCALL
W32kCreateDIBPatternBrushPt(CONST VOID
*PackedDIB
,
87 info
= (BITMAPINFO
*) PackedDIB
;
92 DPRINT ("%p %ldx%ld %dbpp\n",
94 info
->bmiHeader
.biWidth
,
95 info
->bmiHeader
.biHeight
,
96 info
->bmiHeader
.biBitCount
);
98 logbrush
.lbStyle
= BS_DIBPATTERN
;
99 logbrush
.lbColor
= Usage
;
100 logbrush
.lbHatch
= 0;
102 /* Make a copy of the bitmap */
104 if (info
->bmiHeader
.biCompression
)
106 size
= info
->bmiHeader
.biSizeImage
;
110 size
= DIB_GetDIBImageBytes (info
->bmiHeader
.biWidth
,
111 info
->bmiHeader
.biHeight
,
112 info
->bmiHeader
.biBitCount
);
114 size
+= DIB_BitmapInfoSize (info
, Usage
);
116 logbrush
.lbHatch
= (INT
)
117 GDIOBJ_PtrToHandle (GDIOBJ_AllocObject (size
, GO_MAGIC_DONTCARE
),
119 if (logbrush
.lbHatch
== 0)
123 newInfo
= (PBITMAPINFO
) GDIOBJ_HandleToPtr ((HGDIOBJ
) logbrush
.lbHatch
,
125 memcpy (newInfo
, info
, size
);
126 GDIOBJ_UnlockObject ((HGDIOBJ
) logbrush
.lbHatch
);
128 return W32kCreateBrushIndirect (&logbrush
);
131 HBRUSH STDCALL
W32kCreateHatchBrush(INT Style
,
136 DPRINT("%d %06lx\n", Style
, Color
);
138 if (Style
< 0 || Style
>= NB_HATCH_STYLES
)
142 logbrush
.lbStyle
= BS_HATCHED
;
143 logbrush
.lbColor
= Color
;
144 logbrush
.lbHatch
= Style
;
146 return W32kCreateBrushIndirect (&logbrush
);
149 HBRUSH STDCALL
W32kCreatePatternBrush(HBITMAP hBitmap
)
151 LOGBRUSH logbrush
= { BS_PATTERN
, 0, 0 };
153 DPRINT ("%04x\n", hBitmap
);
154 logbrush
.lbHatch
= (INT
) BITMAPOBJ_CopyBitmap (hBitmap
);
155 if(!logbrush
.lbHatch
)
161 return W32kCreateBrushIndirect( &logbrush
);
165 HBRUSH STDCALL
W32kCreateSolidBrush(COLORREF Color
)
170 BOOL STDCALL
W32kFixBrushOrgEx(VOID
)
175 BOOL STDCALL
W32kPatBlt(HDC hDC
,
185 BOOL STDCALL
W32kSetBrushOrgEx(HDC hDC
,