ReactOS 0.4.16-dev-2207-geb15453
engbrush.c
Go to the documentation of this file.
1/*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS kernel
4 * PURPOSE: GDI Driver Brush Functions
5 * FILE: win32ss/gdi/eng/engbrush.c
6 * PROGRAMER: Jason Filby
7 * Timo Kreuzer
8 */
9
10#include <win32k.h>
11
13
15{
16 {0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF}, /* HS_HORIZONTAL */
17 {0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7}, /* HS_VERTICAL */
18 {0xFE, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7F}, /* HS_FDIAGONAL */
19 {0x7F, 0xBF, 0xDF, 0xEF, 0xF7, 0xFB, 0xFD, 0xFE}, /* HS_BDIAGONAL */
20 {0xF7, 0xF7, 0xF7, 0xF7, 0x00, 0xF7, 0xF7, 0xF7}, /* HS_CROSS */
21 {0x7E, 0xBD, 0xDB, 0xE7, 0xE7, 0xDB, 0xBD, 0x7E} /* HS_DIAGCROSS */
22};
23
25
28CODE_SEG("INIT")
32{
33 ULONG i;
34 SIZEL sizl = {8, 8};
35
36 /* Loop all hatch styles */
37 for (i = 0; i < HS_DDI_MAX; i++)
38 {
39 /* Create a default hatch bitmap */
41 0,
43 0,
45 }
46
47 return STATUS_SUCCESS;
48}
49
50VOID
53 PBRUSH pbrush,
54 PSURFACE psurf,
55 COLORREF crBackgroundClr,
56 COLORREF crForegroundClr,
57 PPALETTE ppalDC)
58{
59 ASSERT(pebo);
60 ASSERT(pbrush);
61
62 pebo->BrushObject.flColorType = 0;
64 pebo->pbrush = pbrush;
65 pebo->pengbrush = NULL;
66 pebo->flattrs = pbrush->flAttrs;
67 pebo->psoMask = NULL;
68
69 /* Initialize 1 bpp fore and back colors */
70 pebo->crCurrentBack = crBackgroundClr;
71 pebo->crCurrentText = crForegroundClr;
72
73 pebo->psurfTrg = psurf;
74 /* We are initializing for a new memory DC */
75 if(!pebo->psurfTrg)
77 ASSERT(pebo->psurfTrg);
78 ASSERT(pebo->psurfTrg->ppal);
79
80 /* Initialize palettes */
81 pebo->ppalSurf = pebo->psurfTrg->ppal;
83 pebo->ppalDC = ppalDC;
84 if(!pebo->ppalDC)
85 pebo->ppalDC = gppalDefault;
86 GDIOBJ_vReferenceObjectByPointer(&pebo->ppalDC->BaseObject);
87 pebo->ppalDIB = NULL;
88
89 if (pbrush->flAttrs & BR_IS_NULL)
90 {
91 /* NULL brushes don't need a color */
92 pebo->BrushObject.iSolidColor = 0;
93 }
94 else if (pbrush->flAttrs & BR_IS_SOLID)
95 {
96 /* Set the RGB color */
97 EBRUSHOBJ_vSetSolidRGBColor(pebo, pbrush->BrushAttr.lbColor);
98 }
99 else
100 {
101 /* This is a pattern brush that needs realization */
102 pebo->BrushObject.iSolidColor = 0xFFFFFFFF;
103
104 /* Use foreground color of hatch brushes */
105 if (pbrush->flAttrs & BR_IS_HATCH)
106 pebo->crCurrentText = pbrush->BrushAttr.lbColor;
107 }
108}
109
110VOID
111NTAPI
113 PBRUSH pbrush, PDC pdc)
114{
115 EBRUSHOBJ_vInit(pebo, pbrush, pdc->dclevel.pSurface,
116 pdc->pdcattr->crBackgroundClr, pdc->pdcattr->crForegroundClr,
117 pdc->dclevel.ppal);
118}
119
120VOID
123{
124 ULONG iSolidColor;
125 EXLATEOBJ exlo;
126
127 /* Never use with non-solid brushes */
128 ASSERT(pebo->flattrs & BR_IS_SOLID);
129
130 /* Set the RGB color */
131 crColor &= 0xFFFFFF;
132 pebo->crRealize = crColor;
133 pebo->ulRGBColor = crColor;
134
135 /* Special handling for mono-surfaces */
136 if (pebo->ppalSurf->flFlags & PAL_MONOCHROME)
137 {
138 /* Determine the indices for back and fore color */
139 ULONG iBackIndex =
141 ULONG iForeIndex = iBackIndex ^ 1;
142
143 /* Get the translated back color */
144 ULONG rgbBack = PALETTE_ulGetRGBColorFromIndex(pebo->ppalSurf, iBackIndex);
145
146 /* Match the pen color against RGB and translated background color */
147 if ((crColor == rgbBack) || (crColor == pebo->crCurrentBack))
148 pebo->BrushObject.iSolidColor = iBackIndex;
149 else
150 pebo->BrushObject.iSolidColor = iForeIndex;
151
152 pebo->flattrs |= BR_NEED_BK_CLR;
153 }
154 else
155 {
156 /* Initialize an XLATEOBJ RGB -> surface */
158 &gpalRGB,
159 pebo->ppalSurf,
160 pebo->crCurrentBack,
161 0,
162 0);
163
164 /* Translate the brush color to the target format */
165 iSolidColor = XLATEOBJ_iXlate(&exlo.xlo, crColor);
166 pebo->BrushObject.iSolidColor = iSolidColor;
167
168 /* Clean up the XLATEOBJ */
169 EXLATEOBJ_vCleanup(&exlo);
170 }
171}
172
173VOID
174NTAPI
176{
177 /* Check if there's a GDI realisation */
178 if (pebo->pengbrush)
179 {
180 /* Unlock the bitmap again */
182 pebo->pengbrush = NULL;
183 }
184
185 /* Check if there's a driver's realisation */
186 if (pebo->BrushObject.pvRbrush)
187 {
188 /* Free allocated driver memory */
190 pebo->BrushObject.pvRbrush = NULL;
191 }
192
193 if (pebo->psoMask != NULL)
194 {
196 pebo->psoMask = NULL;
197 }
198
199 /* Dereference the palettes */
200 if (pebo->ppalSurf)
201 {
203 }
204 if (pebo->ppalDC)
205 {
207 }
208 if (pebo->ppalDIB)
209 {
211 }
212}
213
214VOID
215NTAPI
217 EBRUSHOBJ *pebo,
218 PBRUSH pbrush,
219 PDC pdc)
220{
221 /* Cleanup the brush */
222 EBRUSHOBJ_vCleanup(pebo);
223
224 /* Reinitialize */
225 EBRUSHOBJ_vInitFromDC(pebo, pbrush, pdc);
226}
227
231BOOL
234 BRUSHOBJ *pbo,
235 SURFOBJ *psoDst,
238 XLATEOBJ *pxlo,
240{
241 EBRUSHOBJ *pebo;
242 HBITMAP hbmpRealize;
243 SURFOBJ *psoRealize;
244 PSURFACE psurfRealize;
245 POINTL ptlSrc = {0, 0};
246 RECTL rclDest;
247 ULONG lWidth;
248
249 /* Calculate width in bytes of the realized brush */
250 lWidth = WIDTH_BYTES_ALIGN32(psoPattern->sizlBitmap.cx,
252
253 /* Allocate a bitmap */
254 hbmpRealize = EngCreateBitmap(psoPattern->sizlBitmap,
255 lWidth,
256 psoDst->iBitmapFormat,
258 NULL);
259 if (!hbmpRealize)
260 {
261 return FALSE;
262 }
263
264 /* Lock the bitmap */
265 psurfRealize = SURFACE_ShareLockSurface(hbmpRealize);
266
267 /* Already delete the pattern bitmap (will be kept until dereferenced) */
268 EngDeleteSurface((HSURF)hbmpRealize);
269
270 if (!psurfRealize)
271 {
272 return FALSE;
273 }
274
275 /* Copy the bits to the new format bitmap */
276 rclDest.left = rclDest.top = 0;
277 rclDest.right = psoPattern->sizlBitmap.cx;
278 rclDest.bottom = psoPattern->sizlBitmap.cy;
279 psoRealize = &psurfRealize->SurfObj;
280 EngCopyBits(psoRealize, psoPattern, NULL, pxlo, &rclDest, &ptlSrc);
281
282
283 pebo = CONTAINING_RECORD(pbo, EBRUSHOBJ, BrushObject);
284 pebo->pengbrush = (PVOID)psurfRealize;
285
286 return TRUE;
287}
288
289static
292 _In_ PPALETTE ppalDIB,
293 _In_ PPALETTE ppalDC)
294{
295 PPALETTE ppalNew;
296 ULONG i, iPalIndex, crColor;
297
298 /* Allocate a new palette */
300 ppalDIB->NumColors,
301 NULL,
302 0,
303 0,
304 0);
305 if (ppalNew == NULL)
306 {
307 ERR("Failed to allcate palette for brush\n");
308 return NULL;
309 }
310
311 /* Loop all colors */
312 for (i = 0; i < ppalDIB->NumColors; i++)
313 {
314 /* Get the RGB color, which is the index into the DC palette */
315 iPalIndex = PALETTE_ulGetRGBColorFromIndex(ppalDIB, i);
316
317 /* Roll over when index is too big */
318 iPalIndex %= ppalDC->NumColors;
319
320 /* Set the indexed DC color as the new color */
321 crColor = PALETTE_ulGetRGBColorFromIndex(ppalDC, iPalIndex);
322 PALETTE_vSetRGBColorForIndex(ppalNew, i, crColor);
323 }
324
325 /* Return the new palette */
326 return ppalNew;
327}
328
329BOOL
330NTAPI
332{
333 BOOL bResult;
334 PFN_DrvRealizeBrush pfnRealizeBrush = NULL;
335 PSURFACE psurfPattern;
337 PPDEVOBJ ppdev;
338 EXLATEOBJ exlo;
339 PPALETTE ppalPattern;
340 PBRUSH pbr = pebo->pbrush;
341 HBITMAP hbmPattern;
343
344 /* All EBRUSHOBJs have a surface, see EBRUSHOBJ_vInit */
345 ASSERT(pebo->psurfTrg);
346
347 ppdev = (PPDEVOBJ)pebo->psurfTrg->SurfObj.hdev;
348 if (!ppdev)
349 ppdev = gpmdev->ppdevGlobal;
350
351 if (bCallDriver)
352 {
353 /* Get the Drv function */
354 pfnRealizeBrush = ppdev->DriverFunctions.RealizeBrush;
355 if (pfnRealizeBrush == NULL)
356 {
357 ERR("No DrvRealizeBrush. Cannot realize brush\n");
358 return FALSE;
359 }
360
361 /* Get the mask */
363 }
364 else
365 {
366 /* Use the Eng function */
367 pfnRealizeBrush = EngRealizeBrush;
368
369 /* We don't handle the mask bitmap here. We do this only on demand */
370 psoMask = NULL;
371 }
372
373 /* Check if this is a hatch brush */
374 if (pbr->flAttrs & BR_IS_HATCH)
375 {
376 /* Get the hatch brush pattern from the PDEV */
377 hbmPattern = (HBITMAP)ppdev->ahsurf[pbr->iHatch];
378 iHatch = pbr->iHatch;
379 }
380 else
381 {
382 /* Use the brushes pattern */
383 hbmPattern = pbr->hbmPattern;
384 iHatch = -1;
385 }
386
387 psurfPattern = SURFACE_ShareLockSurface(hbmPattern);
388 ASSERT(psurfPattern);
389 ASSERT(psurfPattern->ppal);
390
391 /* DIB brushes with DIB_PAL_COLORS usage need a new palette */
392 if (pbr->flAttrs & BR_IS_DIBPALCOLORS)
393 {
394 /* Create a palette with the colors from the DC */
395 ppalPattern = FixupDIBBrushPalette(psurfPattern->ppal, pebo->ppalDC);
396 if (ppalPattern == NULL)
397 {
398 ERR("FixupDIBBrushPalette() failed.\n");
399 return FALSE;
400 }
401
402 pebo->ppalDIB = ppalPattern;
403 }
404 else
405 {
406 /* The palette is already as it should be */
407 ppalPattern = psurfPattern->ppal;
408 }
409
410 /* Initialize XLATEOBJ for the brush */
412 ppalPattern,
413 pebo->psurfTrg->ppal,
414 0,
415 pebo->crCurrentBack,
416 pebo->crCurrentText);
417
418 /* Create the realization */
419 bResult = pfnRealizeBrush(&pebo->BrushObject,
420 &pebo->psurfTrg->SurfObj,
421 &psurfPattern->SurfObj,
422 psoMask,
423 &exlo.xlo,
424 iHatch);
425
426 /* Cleanup the XLATEOBJ */
427 EXLATEOBJ_vCleanup(&exlo);
428
429 /* Unlock surface */
430 SURFACE_ShareUnlockSurface(psurfPattern);
431
432 return bResult;
433}
434
435PVOID
436NTAPI
438{
439 BOOL bResult;
440
441 if (!pebo->pengbrush)
442 {
443 bResult = EBRUSHOBJ_bRealizeBrush(pebo, FALSE);
444 if (!bResult)
445 {
446 if (pebo->pengbrush)
448 pebo->pengbrush = NULL;
449 }
450 }
451
452 return pebo->pengbrush;
453}
454
455SURFOBJ*
456NTAPI
458{
459 PSURFACE psurfPattern;
460
461 psurfPattern = EBRUSHOBJ_pvGetEngBrush(pebo);
462
463 return psurfPattern ? &psurfPattern->SurfObj : NULL;
464}
465
466SURFOBJ*
467NTAPI
469{
470 HBITMAP hbmMask;
471 PSURFACE psurfMask;
472 PPDEVOBJ ppdev;
473
474 /* Check if we don't have a mask yet */
475 if (pebo->psoMask == NULL)
476 {
477 /* Check if this is a hatch brush */
478 if (pebo->flattrs & BR_IS_HATCH)
479 {
480 /* Get the PDEV */
481 ppdev = (PPDEVOBJ)pebo->psurfTrg->SurfObj.hdev;
482 if (!ppdev)
483 ppdev = gpmdev->ppdevGlobal;
484
485 /* Use the hatch bitmap as the mask */
486 hbmMask = (HBITMAP)ppdev->ahsurf[pebo->pbrush->iHatch];
487 psurfMask = SURFACE_ShareLockSurface(hbmMask);
488 if (psurfMask == NULL)
489 {
490 ERR("Failed to lock hatch brush for PDEV %p, iHatch %lu\n",
491 ppdev, pebo->pbrush->iHatch);
492 return NULL;
493 }
494
496 pebo->psoMask = &psurfMask->SurfObj;
497 }
498 }
499
500 return pebo->psoMask;
501}
502
505/*
506 * @implemented
507 */
510 IN BRUSHOBJ *pbo,
511 IN ULONG cj)
512{
513 pbo->pvRbrush = EngAllocMem(0, cj, GDITAG_RBRUSH);
514 return pbo->pvRbrush;
515}
516
517/*
518 * @implemented
519 */
522 IN BRUSHOBJ *pbo)
523{
524 EBRUSHOBJ *pebo = CONTAINING_RECORD(pbo, EBRUSHOBJ, BrushObject);
525 BOOL bResult;
526
527 if (!pbo->pvRbrush)
528 {
529 bResult = EBRUSHOBJ_bRealizeBrush(pebo, TRUE);
530 if (!bResult)
531 {
532 if (pbo->pvRbrush)
533 {
534 EngFreeMem(pbo->pvRbrush);
535 pbo->pvRbrush = NULL;
536 }
537 }
538 }
539
540 return pbo->pvRbrush;
541}
542
543/*
544 * @implemented
545 */
548 IN BRUSHOBJ *pbo)
549{
550 EBRUSHOBJ *pebo = CONTAINING_RECORD(pbo, EBRUSHOBJ, BrushObject);
551 return pebo->ulRGBColor;
552}
553
554/* EOF */
#define CODE_SEG(...)
LONG NTSTATUS
Definition: precomp.h:26
#define ERR(fmt,...)
Definition: precomp.h:57
#define DBG_DEFAULT_CHANNEL(ch)
Definition: debug.h:106
_Notnull_ PSURFACE psurfDefaultBitmap
Definition: dclife.c:17
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define APIENTRY
Definition: api.h:79
PVOID NTAPI EBRUSHOBJ_pvGetEngBrush(EBRUSHOBJ *pebo)
Definition: engbrush.c:437
ULONG APIENTRY BRUSHOBJ_ulGetBrushColor(IN BRUSHOBJ *pbo)
Definition: engbrush.c:547
VOID NTAPI EBRUSHOBJ_vUpdateFromDC(EBRUSHOBJ *pebo, PBRUSH pbrush, PDC pdc)
Definition: engbrush.c:216
PVOID APIENTRY BRUSHOBJ_pvGetRbrush(IN BRUSHOBJ *pbo)
Definition: engbrush.c:521
BOOL NTAPI EBRUSHOBJ_bRealizeBrush(EBRUSHOBJ *pebo, BOOL bCallDriver)
Definition: engbrush.c:331
SURFOBJ *NTAPI EBRUSHOBJ_psoPattern(EBRUSHOBJ *pebo)
Definition: engbrush.c:457
VOID NTAPI EBRUSHOBJ_vInitFromDC(EBRUSHOBJ *pebo, PBRUSH pbrush, PDC pdc)
Definition: engbrush.c:112
VOID NTAPI EBRUSHOBJ_vCleanup(EBRUSHOBJ *pebo)
Definition: engbrush.c:175
NTSTATUS NTAPI InitBrushImpl(VOID)
Definition: engbrush.c:31
static PPALETTE FixupDIBBrushPalette(_In_ PPALETTE ppalDIB, _In_ PPALETTE ppalDC)
Definition: engbrush.c:291
VOID NTAPI EBRUSHOBJ_vInit(EBRUSHOBJ *pebo, PBRUSH pbrush, PSURFACE psurf, COLORREF crBackgroundClr, COLORREF crForegroundClr, PPALETTE ppalDC)
Definition: engbrush.c:52
static const ULONG gaulHatchBrushes[HS_DDI_MAX][8]
Definition: engbrush.c:14
VOID FASTCALL EBRUSHOBJ_vSetSolidRGBColor(EBRUSHOBJ *pebo, COLORREF crColor)
Definition: engbrush.c:122
HSURF gahsurfHatch[HS_DDI_MAX]
Definition: engbrush.c:24
PVOID APIENTRY BRUSHOBJ_pvAllocRbrush(IN BRUSHOBJ *pbo, IN ULONG cj)
Definition: engbrush.c:509
BOOL APIENTRY EngRealizeBrush(BRUSHOBJ *pbo, SURFOBJ *psoDst, SURFOBJ *psoPattern, SURFOBJ *psoMask, XLATEOBJ *pxlo, ULONG iHatch)
Definition: engbrush.c:233
SURFOBJ *NTAPI EBRUSHOBJ_psoMask(EBRUSHOBJ *pebo)
Definition: engbrush.c:468
unsigned int BOOL
Definition: ntddk_ex.h:94
#define BR_IS_SOLID
Definition: brush.h:101
#define BR_IS_NULL
Definition: brush.h:105
#define BR_IS_HATCH
Definition: brush.h:102
#define BR_IS_DIBPALCOLORS
Definition: brush.h:109
#define BR_NEED_BK_CLR
Definition: brush.h:99
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
if(dx< 0)
Definition: linetemp.h:194
PMDEVOBJ gpmdev
Definition: mdevobj.c:14
struct _PDEVOBJ * PPDEVOBJ
Definition: mdevobj.h:6
#define ASSERT(a)
Definition: mode.c:44
static HBITMAP
Definition: button.c:44
#define _In_
Definition: no_sal2.h:158
#define FASTCALL
Definition: nt_native.h:50
#define EngFreeMem
Definition: polytest.cpp:56
void * EngAllocMem(int zero, unsigned long size, int tag=0)
Definition: polytest.cpp:70
#define STATUS_SUCCESS
Definition: shellext.h:65
Definition: polytest.cpp:41
long bottom
Definition: polytest.cpp:53
long right
Definition: polytest.cpp:53
long top
Definition: polytest.cpp:53
long left
Definition: polytest.cpp:53
ULONG iSolidColor
Definition: winddi.h:234
PVOID pvRbrush
Definition: winddi.h:235
FLONG flColorType
Definition: winddi.h:236
Definition: types.h:101
PFN_DrvRealizeBrush RealizeBrush
Definition: ntgdityp.h:581
PBRUSH pbrush
Definition: brush.h:88
COLORREF crCurrentText
Definition: brush.h:78
ULONG ulRGBColor
Definition: brush.h:74
PVOID pengbrush
Definition: brush.h:75
BRUSHOBJ BrushObject
Definition: brush.h:71
COLORREF crRealize
Definition: brush.h:73
struct _PALETTE * ppalDC
Definition: brush.h:85
struct _PALETTE * ppalDIB
Definition: brush.h:86
FLONG flattrs
Definition: brush.h:89
_Notnull_ SURFACE * psurfTrg
Definition: brush.h:83
SURFOBJ * psoMask
Definition: brush.h:94
_Notnull_ struct _PALETTE * ppalSurf
Definition: brush.h:84
COLORREF crCurrentBack
Definition: brush.h:79
XLATEOBJ xlo
Definition: xlateobj.h:21
PPDEVOBJ ppdevGlobal
Definition: mdevobj.h:16
HSURF ahsurf[HS_DDI_MAX]
Definition: pdevobj.h:97
DRIVER_FUNCTIONS DriverFunctions
Definition: pdevobj.h:137
SURFOBJ SurfObj
Definition: surface.h:8
struct _PALETTE *const ppal
Definition: surface.h:11
ULONG iBitmapFormat
Definition: winddi.h:1215
HDEV hdev
Definition: winddi.h:1208
#define WIDTH_BYTES_ALIGN32(cx, bpp)
Definition: swimpl.c:16
#define NTAPI
Definition: typedefs.h:36
void * PVOID
Definition: typedefs.h:50
#define IN
Definition: typedefs.h:39
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260
uint32_t ULONG
Definition: typedefs.h:59
#define SURFACE_ShareUnlockSurface(pBMObj)
Definition: surface.h:102
#define SURFACE_ShareLockSurface(hBMObj)
Definition: surface.h:91
#define BitsPerFormat(Format)
Definition: surface.h:109
VOID NTAPI GDIOBJ_vReferenceObjectByPointer(POBJ pobj)
Definition: gdiobj.c:741
PPALETTE NTAPI PALETTE_AllocPalette(_In_ ULONG iMode, _In_ ULONG cColors, _In_opt_ const PALETTEENTRY *pEntries, _In_ FLONG flRed, _In_ FLONG flGreen, _In_ FLONG flBlue)
Definition: palette.c:135
PALETTE gpalRGB
Definition: palette.c:20
PALETTE * gppalDefault
Definition: palette.c:20
ULONG NTAPI PALETTE_ulGetNearestPaletteIndex(PALETTE *ppal, ULONG iColor)
Definition: palette.c:264
FORCEINLINE VOID PALETTE_vSetRGBColorForIndex(PPALETTE ppal, ULONG ulIndex, COLORREF crColor)
Definition: palette.h:152
@ PAL_MONOCHROME
Definition: palette.h:22
#define PALETTE_ShareUnlockPalette(ppal)
Definition: palette.h:59
FORCEINLINE ULONG PALETTE_ulGetRGBColorFromIndex(PPALETTE ppal, ULONG ulIndex)
Definition: palette.h:142
#define GDITAG_RBRUSH
Definition: tags.h:70
_Inout_ SURFOBJ _In_opt_ SURFOBJ * psoPattern
Definition: winddi.h:3960
ENGAPI BOOL APIENTRY EngDeleteSurface(_In_ _Post_ptr_invalid_ HSURF hsurf)
Definition: surface.c:567
#define BMF_1BPP
Definition: winddi.h:355
ENGAPI ULONG APIENTRY XLATEOBJ_iXlate(_In_ XLATEOBJ *pxlo, _In_ ULONG iColor)
Definition: xlateobj.c:909
ENGAPI HBITMAP APIENTRY EngCreateBitmap(_In_ SIZEL sizl, _In_ LONG lWidth, _In_ ULONG iFormat, _In_ FLONG fl, _In_opt_ PVOID pvBits)
_In_ SURFOBJ _In_ CLIPOBJ _In_opt_ XLATEOBJ * pxlo
Definition: winddi.h:3416
_In_opt_ SURFOBJ _In_opt_ SURFOBJ * psoMask
Definition: winddi.h:3434
_In_ ULONG cj
Definition: winddi.h:3540
FN_DrvRealizeBrush * PFN_DrvRealizeBrush
Definition: winddi.h:3964
ENGAPI BOOL APIENTRY EngCopyBits(_In_ SURFOBJ *psoDest, _In_ SURFOBJ *psoSrc, _In_opt_ CLIPOBJ *pco, _In_opt_ XLATEOBJ *pxlo, _In_ __in_data_source(USER_MODE) RECTL *prclDest, _In_ __in_data_source(USER_MODE) POINTL *pptlSrc)
#define HS_DDI_MAX
Definition: winddi.h:3954
typedef HSURF(APIENTRY FN_DrvEnableSurface)(_In_ DHPDEV dhpdev)
_In_opt_ SURFOBJ _In_opt_ SURFOBJ _In_ CLIPOBJ _In_opt_ XLATEOBJ _In_ RECTL _In_opt_ POINTL _In_opt_ POINTL _In_opt_ BRUSHOBJ * pbo
Definition: winddi.h:3440
#define PAL_INDEXED
Definition: winddi.h:1561
_Inout_ SURFOBJ _In_opt_ SURFOBJ _In_opt_ SURFOBJ _In_opt_ XLATEOBJ _In_ ULONG iHatch
Definition: winddi.h:3963
#define BMF_NOZEROINIT
Definition: winddi.h:1181
_In_ SIZEL sizl
Definition: winddi.h:3467
DWORD COLORREF
Definition: windef.h:100
#define NT_ASSERT
Definition: rtlfuncs.h:3327
VOID NTAPI EXLATEOBJ_vInitialize(_Out_ PEXLATEOBJ pexlo, _In_opt_ PALETTE *ppalSrc, _In_opt_ PALETTE *ppalDst, _In_ COLORREF crSrcBackColor, _In_ COLORREF crDstBackColor, _In_ COLORREF crDstForeColor)
Definition: xlateobj.c:491
VOID NTAPI EXLATEOBJ_vCleanup(_Inout_ PEXLATEOBJ pexlo)
Definition: xlateobj.c:894