ReactOS 0.4.15-dev-7958-gcd0bb1a
engbrush.c File Reference
#include <win32k.h>
Include dependency graph for engbrush.c:

Go to the source code of this file.

Functions

 DBG_DEFAULT_CHANNEL (EngBrush)
 
NTSTATUS NTAPI InitBrushImpl (VOID)
 
VOID NTAPI EBRUSHOBJ_vInit (EBRUSHOBJ *pebo, PBRUSH pbrush, PSURFACE psurf, COLORREF crBackgroundClr, COLORREF crForegroundClr, PPALETTE ppalDC)
 
VOID NTAPI EBRUSHOBJ_vInitFromDC (EBRUSHOBJ *pebo, PBRUSH pbrush, PDC pdc)
 
VOID FASTCALL EBRUSHOBJ_vSetSolidRGBColor (EBRUSHOBJ *pebo, COLORREF crColor)
 
VOID NTAPI EBRUSHOBJ_vCleanup (EBRUSHOBJ *pebo)
 
VOID NTAPI EBRUSHOBJ_vUpdateFromDC (EBRUSHOBJ *pebo, PBRUSH pbrush, PDC pdc)
 
BOOL APIENTRY EngRealizeBrush (BRUSHOBJ *pbo, SURFOBJ *psoDst, SURFOBJ *psoPattern, SURFOBJ *psoMask, XLATEOBJ *pxlo, ULONG iHatch)
 
static PPALETTE FixupDIBBrushPalette (_In_ PPALETTE ppalDIB, _In_ PPALETTE ppalDC)
 
BOOL NTAPI EBRUSHOBJ_bRealizeBrush (EBRUSHOBJ *pebo, BOOL bCallDriver)
 
PVOID NTAPI EBRUSHOBJ_pvGetEngBrush (EBRUSHOBJ *pebo)
 
SURFOBJ *NTAPI EBRUSHOBJ_psoPattern (EBRUSHOBJ *pebo)
 
SURFOBJ *NTAPI EBRUSHOBJ_psoMask (EBRUSHOBJ *pebo)
 
PVOID APIENTRY BRUSHOBJ_pvAllocRbrush (IN BRUSHOBJ *pbo, IN ULONG cj)
 
PVOID APIENTRY BRUSHOBJ_pvGetRbrush (IN BRUSHOBJ *pbo)
 
ULONG APIENTRY BRUSHOBJ_ulGetBrushColor (IN BRUSHOBJ *pbo)
 

Variables

static const ULONG gaulHatchBrushes [HS_DDI_MAX][8]
 
HSURF gahsurfHatch [HS_DDI_MAX]
 

Function Documentation

◆ BRUSHOBJ_pvAllocRbrush()

PVOID APIENTRY BRUSHOBJ_pvAllocRbrush ( IN BRUSHOBJ pbo,
IN ULONG  cj 
)

Exported DDI functions

Definition at line 487 of file engbrush.c.

490{
491 pbo->pvRbrush = EngAllocMem(0, cj, GDITAG_RBRUSH);
492 return pbo->pvRbrush;
493}
void * EngAllocMem(int zero, unsigned long size, int tag=0)
Definition: polytest.cpp:70
#define GDITAG_RBRUSH
Definition: tags.h:70
_In_ ULONG cj
Definition: winddi.h:3540
_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

◆ BRUSHOBJ_pvGetRbrush()

PVOID APIENTRY BRUSHOBJ_pvGetRbrush ( IN BRUSHOBJ pbo)

Definition at line 499 of file engbrush.c.

501{
502 EBRUSHOBJ *pebo = CONTAINING_RECORD(pbo, EBRUSHOBJ, BrushObject);
503 BOOL bResult;
504
505 if (!pbo->pvRbrush)
506 {
507 bResult = EBRUSHOBJ_bRealizeBrush(pebo, TRUE);
508 if (!bResult)
509 {
510 if (pbo->pvRbrush)
511 {
512 EngFreeMem(pbo->pvRbrush);
513 pbo->pvRbrush = NULL;
514 }
515 }
516 }
517
518 return pbo->pvRbrush;
519}
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
BOOL NTAPI EBRUSHOBJ_bRealizeBrush(EBRUSHOBJ *pebo, BOOL bCallDriver)
Definition: engbrush.c:309
unsigned int BOOL
Definition: ntddk_ex.h:94
#define EngFreeMem
Definition: polytest.cpp:56
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260

◆ BRUSHOBJ_ulGetBrushColor()

ULONG APIENTRY BRUSHOBJ_ulGetBrushColor ( IN BRUSHOBJ pbo)

Definition at line 525 of file engbrush.c.

527{
528 EBRUSHOBJ *pebo = CONTAINING_RECORD(pbo, EBRUSHOBJ, BrushObject);
529 return pebo->ulRGBColor;
530}
ULONG ulRGBColor
Definition: brush.h:74

◆ DBG_DEFAULT_CHANNEL()

DBG_DEFAULT_CHANNEL ( EngBrush  )

◆ EBRUSHOBJ_bRealizeBrush()

BOOL NTAPI EBRUSHOBJ_bRealizeBrush ( EBRUSHOBJ pebo,
BOOL  bCallDriver 
)

Definition at line 309 of file engbrush.c.

310{
311 BOOL bResult;
312 PFN_DrvRealizeBrush pfnRealizeBrush = NULL;
313 PSURFACE psurfPattern;
315 PPDEVOBJ ppdev;
316 EXLATEOBJ exlo;
317 PPALETTE ppalPattern;
318 PBRUSH pbr = pebo->pbrush;
319 HBITMAP hbmPattern;
321
322 /* All EBRUSHOBJs have a surface, see EBRUSHOBJ_vInit */
323 ASSERT(pebo->psurfTrg);
324
325 ppdev = (PPDEVOBJ)pebo->psurfTrg->SurfObj.hdev;
326 if (!ppdev)
327 ppdev = gpmdev->ppdevGlobal;
328
329 if (bCallDriver)
330 {
331 /* Get the Drv function */
332 pfnRealizeBrush = ppdev->DriverFunctions.RealizeBrush;
333 if (pfnRealizeBrush == NULL)
334 {
335 ERR("No DrvRealizeBrush. Cannot realize brush\n");
336 return FALSE;
337 }
338
339 /* Get the mask */
341 }
342 else
343 {
344 /* Use the Eng function */
345 pfnRealizeBrush = EngRealizeBrush;
346
347 /* We don't handle the mask bitmap here. We do this only on demand */
348 psoMask = NULL;
349 }
350
351 /* Check if this is a hatch brush */
352 if (pbr->flAttrs & BR_IS_HATCH)
353 {
354 /* Get the hatch brush pattern from the PDEV */
355 hbmPattern = (HBITMAP)ppdev->ahsurf[pbr->iHatch];
356 iHatch = pbr->iHatch;
357 }
358 else
359 {
360 /* Use the brushes pattern */
361 hbmPattern = pbr->hbmPattern;
362 iHatch = -1;
363 }
364
365 psurfPattern = SURFACE_ShareLockSurface(hbmPattern);
366 ASSERT(psurfPattern);
367 ASSERT(psurfPattern->ppal);
368
369 /* DIB brushes with DIB_PAL_COLORS usage need a new palette */
370 if (pbr->flAttrs & BR_IS_DIBPALCOLORS)
371 {
372 /* Create a palette with the colors from the DC */
373 ppalPattern = FixupDIBBrushPalette(psurfPattern->ppal, pebo->ppalDC);
374 if (ppalPattern == NULL)
375 {
376 ERR("FixupDIBBrushPalette() failed.\n");
377 return FALSE;
378 }
379
380 pebo->ppalDIB = ppalPattern;
381 }
382 else
383 {
384 /* The palette is already as it should be */
385 ppalPattern = psurfPattern->ppal;
386 }
387
388 /* Initialize XLATEOBJ for the brush */
390 ppalPattern,
391 pebo->psurfTrg->ppal,
392 0,
393 pebo->crCurrentBack,
394 pebo->crCurrentText);
395
396 /* Create the realization */
397 bResult = pfnRealizeBrush(&pebo->BrushObject,
398 &pebo->psurfTrg->SurfObj,
399 &psurfPattern->SurfObj,
400 psoMask,
401 &exlo.xlo,
402 iHatch);
403
404 /* Cleanup the XLATEOBJ */
405 EXLATEOBJ_vCleanup(&exlo);
406
407 /* Unlock surface */
408 SURFACE_ShareUnlockSurface(psurfPattern);
409
410 return bResult;
411}
#define ERR(fmt,...)
Definition: debug.h:110
#define FALSE
Definition: types.h:117
static PPALETTE FixupDIBBrushPalette(_In_ PPALETTE ppalDIB, _In_ PPALETTE ppalDC)
Definition: engbrush.c:269
BOOL APIENTRY EngRealizeBrush(BRUSHOBJ *pbo, SURFOBJ *psoDst, SURFOBJ *psoPattern, SURFOBJ *psoMask, XLATEOBJ *pxlo, ULONG iHatch)
Definition: engbrush.c:211
SURFOBJ *NTAPI EBRUSHOBJ_psoMask(EBRUSHOBJ *pebo)
Definition: engbrush.c:446
#define BR_IS_HATCH
Definition: brush.h:102
#define BR_IS_DIBPALCOLORS
Definition: brush.h:109
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
Definition: types.h:101
PFN_DrvRealizeBrush RealizeBrush
Definition: ntgdityp.h:581
PBRUSH pbrush
Definition: brush.h:88
COLORREF crCurrentText
Definition: brush.h:78
BRUSHOBJ BrushObject
Definition: brush.h:71
struct _PALETTE * ppalDC
Definition: brush.h:85
struct _PALETTE * ppalDIB
Definition: brush.h:86
SURFACE * psurfTrg
Definition: brush.h:83
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
HDEV hdev
Definition: winddi.h:1208
uint32_t ULONG
Definition: typedefs.h:59
#define SURFACE_ShareUnlockSurface(pBMObj)
Definition: surface.h:102
#define SURFACE_ShareLockSurface(hBMObj)
Definition: surface.h:91
_In_opt_ SURFOBJ _In_opt_ SURFOBJ * psoMask
Definition: winddi.h:3434
FN_DrvRealizeBrush * PFN_DrvRealizeBrush
Definition: winddi.h:3964
_Inout_ SURFOBJ _In_opt_ SURFOBJ _In_opt_ SURFOBJ _In_opt_ XLATEOBJ _In_ ULONG iHatch
Definition: winddi.h:3963
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:358
VOID NTAPI EXLATEOBJ_vCleanup(_Inout_ PEXLATEOBJ pexlo)
Definition: xlateobj.c:649

Referenced by BRUSHOBJ_pvGetRbrush(), and EBRUSHOBJ_pvGetEngBrush().

◆ EBRUSHOBJ_psoMask()

SURFOBJ *NTAPI EBRUSHOBJ_psoMask ( EBRUSHOBJ pebo)

Definition at line 446 of file engbrush.c.

447{
448 HBITMAP hbmMask;
449 PSURFACE psurfMask;
450 PPDEVOBJ ppdev;
451
452 /* Check if we don't have a mask yet */
453 if (pebo->psoMask == NULL)
454 {
455 /* Check if this is a hatch brush */
456 if (pebo->flattrs & BR_IS_HATCH)
457 {
458 /* Get the PDEV */
459 ppdev = (PPDEVOBJ)pebo->psurfTrg->SurfObj.hdev;
460 if (!ppdev)
461 ppdev = gpmdev->ppdevGlobal;
462
463 /* Use the hatch bitmap as the mask */
464 hbmMask = (HBITMAP)ppdev->ahsurf[pebo->pbrush->iHatch];
465 psurfMask = SURFACE_ShareLockSurface(hbmMask);
466 if (psurfMask == NULL)
467 {
468 ERR("Failed to lock hatch brush for PDEV %p, iHatch %lu\n",
469 ppdev, pebo->pbrush->iHatch);
470 return NULL;
471 }
472
474 pebo->psoMask = &psurfMask->SurfObj;
475 }
476 }
477
478 return pebo->psoMask;
479}
FLONG flattrs
Definition: brush.h:89
SURFOBJ * psoMask
Definition: brush.h:94
ULONG iBitmapFormat
Definition: winddi.h:1215
#define BMF_1BPP
Definition: winddi.h:355
#define NT_ASSERT
Definition: rtlfuncs.h:3310

Referenced by EBRUSHOBJ_bRealizeBrush().

◆ EBRUSHOBJ_psoPattern()

SURFOBJ *NTAPI EBRUSHOBJ_psoPattern ( EBRUSHOBJ pebo)

Definition at line 435 of file engbrush.c.

436{
437 PSURFACE psurfPattern;
438
439 psurfPattern = EBRUSHOBJ_pvGetEngBrush(pebo);
440
441 return psurfPattern ? &psurfPattern->SurfObj : NULL;
442}
PVOID NTAPI EBRUSHOBJ_pvGetEngBrush(EBRUSHOBJ *pebo)
Definition: engbrush.c:415

◆ EBRUSHOBJ_pvGetEngBrush()

PVOID NTAPI EBRUSHOBJ_pvGetEngBrush ( EBRUSHOBJ pebo)

Definition at line 415 of file engbrush.c.

416{
417 BOOL bResult;
418
419 if (!pebo->pengbrush)
420 {
421 bResult = EBRUSHOBJ_bRealizeBrush(pebo, FALSE);
422 if (!bResult)
423 {
424 if (pebo->pengbrush)
426 pebo->pengbrush = NULL;
427 }
428 }
429
430 return pebo->pengbrush;
431}
PVOID pengbrush
Definition: brush.h:75
ENGAPI BOOL APIENTRY EngDeleteSurface(_In_ _Post_ptr_invalid_ HSURF hsurf)
Definition: surface.c:567

Referenced by EBRUSHOBJ_psoPattern().

◆ EBRUSHOBJ_vCleanup()

VOID NTAPI EBRUSHOBJ_vCleanup ( EBRUSHOBJ pebo)

Definition at line 153 of file engbrush.c.

154{
155 /* Check if there's a GDI realisation */
156 if (pebo->pengbrush)
157 {
158 /* Unlock the bitmap again */
160 pebo->pengbrush = NULL;
161 }
162
163 /* Check if there's a driver's realisation */
164 if (pebo->BrushObject.pvRbrush)
165 {
166 /* Free allocated driver memory */
168 pebo->BrushObject.pvRbrush = NULL;
169 }
170
171 if (pebo->psoMask != NULL)
172 {
174 pebo->psoMask = NULL;
175 }
176
177 /* Dereference the palettes */
178 if (pebo->ppalSurf)
179 {
181 }
182 if (pebo->ppalDC)
183 {
185 }
186 if (pebo->ppalDIB)
187 {
189 }
190}
PVOID pvRbrush
Definition: winddi.h:235
struct _PALETTE * ppalSurf
Definition: brush.h:84
#define PALETTE_ShareUnlockPalette(ppal)
Definition: palette.h:59

Referenced by DC_vCleanup(), EBRUSHOBJ_vUpdateFromDC(), GdiFlushUserBatch(), IntGdiPolyPatBlt(), and UserDrawIconEx().

◆ EBRUSHOBJ_vInit()

VOID NTAPI EBRUSHOBJ_vInit ( EBRUSHOBJ pebo,
PBRUSH  pbrush,
PSURFACE  psurf,
COLORREF  crBackgroundClr,
COLORREF  crForegroundClr,
PPALETTE  ppalDC 
)

Definition at line 52 of file engbrush.c.

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}
_Notnull_ PSURFACE psurfDefaultBitmap
Definition: dclife.c:17
VOID FASTCALL EBRUSHOBJ_vSetSolidRGBColor(EBRUSHOBJ *pebo, COLORREF crColor)
Definition: engbrush.c:122
#define BR_IS_SOLID
Definition: brush.h:101
#define BR_IS_NULL
Definition: brush.h:105
ULONG iSolidColor
Definition: winddi.h:234
FLONG flColorType
Definition: winddi.h:236
VOID NTAPI GDIOBJ_vReferenceObjectByPointer(POBJ pobj)
Definition: gdiobj.c:734
PALETTE * gppalDefault
Definition: palette.c:20

Referenced by EBRUSHOBJ_vInitFromDC(), IntGdiFillRgn(), and UserDrawIconEx().

◆ EBRUSHOBJ_vInitFromDC()

VOID NTAPI EBRUSHOBJ_vInitFromDC ( EBRUSHOBJ pebo,
PBRUSH  pbrush,
PDC  pdc 
)

Definition at line 112 of file engbrush.c.

114{
115 EBRUSHOBJ_vInit(pebo, pbrush, pdc->dclevel.pSurface,
116 pdc->pdcattr->crBackgroundClr, pdc->pdcattr->crForegroundClr,
117 pdc->dclevel.ppal);
118}
VOID NTAPI EBRUSHOBJ_vInit(EBRUSHOBJ *pebo, PBRUSH pbrush, PSURFACE psurf, COLORREF crBackgroundClr, COLORREF crForegroundClr, PPALETTE ppalDC)
Definition: engbrush.c:52

Referenced by DC_vInitDc(), EBRUSHOBJ_vUpdateFromDC(), GdiFlushUserBatch(), and IntGdiPolyPatBlt().

◆ EBRUSHOBJ_vSetSolidRGBColor()

VOID FASTCALL EBRUSHOBJ_vSetSolidRGBColor ( EBRUSHOBJ pebo,
COLORREF  crColor 
)

Definition at line 122 of file engbrush.c.

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 /* Initialize an XLATEOBJ RGB -> surface */
137 &gpalRGB,
138 pebo->ppalSurf,
139 pebo->crCurrentBack,
140 0,
141 0);
142
143 /* Translate the brush color to the target format */
144 iSolidColor = XLATEOBJ_iXlate(&exlo.xlo, crColor);
145 pebo->BrushObject.iSolidColor = iSolidColor;
146
147 /* Clean up the XLATEOBJ */
148 EXLATEOBJ_vCleanup(&exlo);
149}
COLORREF crRealize
Definition: brush.h:73
PALETTE gpalRGB
Definition: palette.c:20
ENGAPI ULONG APIENTRY XLATEOBJ_iXlate(_In_ XLATEOBJ *pxlo, _In_ ULONG iColor)
Definition: xlateobj.c:664

Referenced by DC_vUpdateBackgroundBrush(), DC_vUpdateFillBrush(), DC_vUpdateLineBrush(), DC_vUpdateTextBrush(), and EBRUSHOBJ_vInit().

◆ EBRUSHOBJ_vUpdateFromDC()

VOID NTAPI EBRUSHOBJ_vUpdateFromDC ( EBRUSHOBJ pebo,
PBRUSH  pbrush,
PDC  pdc 
)

Definition at line 194 of file engbrush.c.

198{
199 /* Cleanup the brush */
200 EBRUSHOBJ_vCleanup(pebo);
201
202 /* Reinitialize */
203 EBRUSHOBJ_vInitFromDC(pebo, pbrush, pdc);
204}
VOID NTAPI EBRUSHOBJ_vInitFromDC(EBRUSHOBJ *pebo, PBRUSH pbrush, PDC pdc)
Definition: engbrush.c:112
VOID NTAPI EBRUSHOBJ_vCleanup(EBRUSHOBJ *pebo)
Definition: engbrush.c:153

Referenced by DC_vUpdateBackgroundBrush(), DC_vUpdateFillBrush(), DC_vUpdateLineBrush(), and DC_vUpdateTextBrush().

◆ EngRealizeBrush()

BOOL APIENTRY EngRealizeBrush ( BRUSHOBJ pbo,
SURFOBJ psoDst,
SURFOBJ psoPattern,
SURFOBJ psoMask,
XLATEOBJ pxlo,
ULONG  iHatch 
)

This function is not exported, because it makes no sense for The driver to punt back to this function

Definition at line 211 of file engbrush.c.

218{
219 EBRUSHOBJ *pebo;
220 HBITMAP hbmpRealize;
221 SURFOBJ *psoRealize;
222 PSURFACE psurfRealize;
223 POINTL ptlSrc = {0, 0};
224 RECTL rclDest;
225 ULONG lWidth;
226
227 /* Calculate width in bytes of the realized brush */
228 lWidth = WIDTH_BYTES_ALIGN32(psoPattern->sizlBitmap.cx,
230
231 /* Allocate a bitmap */
232 hbmpRealize = EngCreateBitmap(psoPattern->sizlBitmap,
233 lWidth,
234 psoDst->iBitmapFormat,
236 NULL);
237 if (!hbmpRealize)
238 {
239 return FALSE;
240 }
241
242 /* Lock the bitmap */
243 psurfRealize = SURFACE_ShareLockSurface(hbmpRealize);
244
245 /* Already delete the pattern bitmap (will be kept until dereferenced) */
246 EngDeleteSurface((HSURF)hbmpRealize);
247
248 if (!psurfRealize)
249 {
250 return FALSE;
251 }
252
253 /* Copy the bits to the new format bitmap */
254 rclDest.left = rclDest.top = 0;
255 rclDest.right = psoPattern->sizlBitmap.cx;
256 rclDest.bottom = psoPattern->sizlBitmap.cy;
257 psoRealize = &psurfRealize->SurfObj;
258 EngCopyBits(psoRealize, psoPattern, NULL, pxlo, &rclDest, &ptlSrc);
259
260
261 pebo = CONTAINING_RECORD(pbo, EBRUSHOBJ, BrushObject);
262 pebo->pengbrush = (PVOID)psurfRealize;
263
264 return TRUE;
265}
long bottom
Definition: polytest.cpp:53
long right
Definition: polytest.cpp:53
long top
Definition: polytest.cpp:53
long left
Definition: polytest.cpp:53
#define WIDTH_BYTES_ALIGN32(cx, bpp)
Definition: swimpl.c:16
void * PVOID
Definition: typedefs.h:50
#define BitsPerFormat(Format)
Definition: surface.h:109
_Inout_ SURFOBJ _In_opt_ SURFOBJ * psoPattern
Definition: winddi.h:3960
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
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)
typedef HSURF(APIENTRY FN_DrvEnableSurface)(_In_ DHPDEV dhpdev)
#define BMF_NOZEROINIT
Definition: winddi.h:1181

Referenced by EBRUSHOBJ_bRealizeBrush().

◆ FixupDIBBrushPalette()

static PPALETTE FixupDIBBrushPalette ( _In_ PPALETTE  ppalDIB,
_In_ PPALETTE  ppalDC 
)
static

Definition at line 269 of file engbrush.c.

272{
273 PPALETTE ppalNew;
274 ULONG i, iPalIndex, crColor;
275
276 /* Allocate a new palette */
278 ppalDIB->NumColors,
279 NULL,
280 0,
281 0,
282 0);
283 if (ppalNew == NULL)
284 {
285 ERR("Failed to allcate palette for brush\n");
286 return NULL;
287 }
288
289 /* Loop all colors */
290 for (i = 0; i < ppalDIB->NumColors; i++)
291 {
292 /* Get the RGB color, which is the index into the DC palette */
293 iPalIndex = PALETTE_ulGetRGBColorFromIndex(ppalDIB, i);
294
295 /* Roll over when index is too big */
296 iPalIndex %= ppalDC->NumColors;
297
298 /* Set the indexed DC color as the new color */
299 crColor = PALETTE_ulGetRGBColorFromIndex(ppalDC, iPalIndex);
300 PALETTE_vSetRGBColorForIndex(ppalNew, i, crColor);
301 }
302
303 /* Return the new palette */
304 return ppalNew;
305}
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
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
FORCEINLINE VOID PALETTE_vSetRGBColorForIndex(PPALETTE ppal, ULONG ulIndex, COLORREF crColor)
Definition: palette.h:152
FORCEINLINE ULONG PALETTE_ulGetRGBColorFromIndex(PPALETTE ppal, ULONG ulIndex)
Definition: palette.h:142
#define PAL_INDEXED
Definition: winddi.h:1561

Referenced by EBRUSHOBJ_bRealizeBrush().

◆ InitBrushImpl()

NTSTATUS NTAPI InitBrushImpl ( VOID  )

Internal functions

Definition at line 31 of file engbrush.c.

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}
static const ULONG gaulHatchBrushes[HS_DDI_MAX][8]
Definition: engbrush.c:14
HSURF gahsurfHatch[HS_DDI_MAX]
Definition: engbrush.c:24
#define STATUS_SUCCESS
Definition: shellext.h:65
#define HS_DDI_MAX
Definition: winddi.h:3954
_In_ SIZEL sizl
Definition: winddi.h:3467

Referenced by DriverEntry().

Variable Documentation

◆ gahsurfHatch

HSURF gahsurfHatch[HS_DDI_MAX]

Definition at line 24 of file engbrush.c.

Referenced by InitBrushImpl(), and PDEVOBJ_bEnablePDEV().

◆ gaulHatchBrushes

const ULONG gaulHatchBrushes[HS_DDI_MAX][8]
static
Initial value:
=
{
{0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF},
{0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7},
{0xFE, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7F},
{0x7F, 0xBF, 0xDF, 0xEF, 0xF7, 0xFB, 0xFD, 0xFE},
{0xF7, 0xF7, 0xF7, 0xF7, 0x00, 0xF7, 0xF7, 0xF7},
{0x7E, 0xBD, 0xDB, 0xE7, 0xE7, 0xDB, 0xBD, 0x7E}
}

Definition at line 14 of file engbrush.c.

Referenced by InitBrushImpl().