ReactOS 0.4.15-dev-7961-gdcf9eb0
gdibatch.c
Go to the documentation of this file.
1
2#include <win32k.h>
3
4#define NDEBUG
5#include <debug.h>
6
9
10
11//
12// Gdi Batch Flush support functions.
13//
14
15//
16// DoDeviceSync
17//
18// based on IntEngEnter from eng/engmisc.c
19//
20VOID
23{
24 PPDEVOBJ Device = (PDEVOBJ*)Surface->hdev;
25// No punting and "Handle to a surface, provided that the surface is device-managed.
26// Otherwise, dhsurf is zero".
27 if (!(Device->flFlags & PDEV_DRIVER_PUNTED_CALL) && (Surface->dhsurf))
28 {
29 if (Device->DriverFunctions.SynchronizeSurface)
30 {
31 Device->DriverFunctions.SynchronizeSurface(Surface, Rect, fl);
32 }
33 else
34 {
35 if (Device->DriverFunctions.Synchronize)
36 {
37 Device->DriverFunctions.Synchronize(Surface->dhpdev, Rect);
38 }
39 }
40 }
41}
42
43VOID
46{
47 SURFOBJ *SurfObj;
48 //PPDEVOBJ Device;
49
54
55 //Device = IntEnumHDev();
56// UNIMPLEMENTED;
57//ASSERT(FALSE);
58 SurfObj = 0;// EngLockSurface( Device->pSurface );
59 if(!SurfObj) return;
60 DoDeviceSync( SurfObj, NULL, Flags);
61 EngUnlockSurface(SurfObj);
62 return;
63}
64
65//
66// Process the batch.
67//
71{
72 ULONG Cmd = 0, Size = 0;
73 PDC_ATTR pdcattr = NULL;
74
75 if (dc)
76 {
77 pdcattr = dc->pdcattr;
78 }
79
81 {
82 Cmd = pHdr->Cmd;
83 Size = pHdr->Size; // Return the full size of the structure.
84 }
86 {
87 DPRINT1("WARNING! GdiBatch Fault!\n");
88 _SEH2_YIELD(return 0;)
89 }
91
92 switch(Cmd)
93 {
94 case GdiBCPatBlt:
95 {
96 PGDIBSPATBLT pgDPB;
97 DWORD dwRop, flags;
98 HBRUSH hOrgBrush;
99 COLORREF crColor, crBkColor, crBrushClr;
100 ULONG ulForegroundClr, ulBackgroundClr, ulBrushClr;
101 if (!dc) break;
102 pgDPB = (PGDIBSPATBLT) pHdr;
103 /* Convert the ROP3 to a ROP4 */
104 dwRop = pgDPB->dwRop;
105 dwRop = MAKEROP4(dwRop & 0xFF0000, dwRop);
106 /* Check if the rop uses a source */
107 if (WIN32_ROP4_USES_SOURCE(dwRop))
108 {
109 /* This is not possible */
110 break;
111 }
112 /* Check if the DC has no surface (empty mem or info DC) */
113 if (dc->dclevel.pSurface == NULL)
114 {
115 /* Nothing to do */
116 break;
117 }
118 // Save current attributes and flags
119 crColor = dc->pdcattr->crForegroundClr;
120 crBkColor = dc->pdcattr->ulBackgroundClr;
121 crBrushClr = dc->pdcattr->crBrushClr;
122 ulForegroundClr = dc->pdcattr->ulForegroundClr;
123 ulBackgroundClr = dc->pdcattr->ulBackgroundClr;
124 ulBrushClr = dc->pdcattr->ulBrushClr;
125 hOrgBrush = dc->pdcattr->hbrush;
126 flags = dc->pdcattr->ulDirty_ & (DIRTY_BACKGROUND | DIRTY_TEXT | DIRTY_FILL | DC_BRUSH_DIRTY);
127 // Set the attribute snapshot
128 dc->pdcattr->hbrush = pgDPB->hbrush;
129 dc->pdcattr->crForegroundClr = pgDPB->crForegroundClr;
130 dc->pdcattr->crBackgroundClr = pgDPB->crBackgroundClr;
131 dc->pdcattr->crBrushClr = pgDPB->crBrushClr;
132 dc->pdcattr->ulForegroundClr = pgDPB->ulForegroundClr;
133 dc->pdcattr->ulBackgroundClr = pgDPB->ulBackgroundClr;
134 dc->pdcattr->ulBrushClr = pgDPB->ulBrushClr;
135 // Process dirty attributes if any.
136 if (dc->pdcattr->ulDirty_ & (DIRTY_FILL | DC_BRUSH_DIRTY))
138 if (dc->pdcattr->ulDirty_ & DIRTY_TEXT)
140 if (pdcattr->ulDirty_ & DIRTY_BACKGROUND)
142 /* Call the internal function */
143 IntPatBlt(dc, pgDPB->nXLeft, pgDPB->nYLeft, pgDPB->nWidth, pgDPB->nHeight, dwRop, &dc->eboFill);
144 // Restore attributes and flags
145 dc->pdcattr->hbrush = hOrgBrush;
146 dc->pdcattr->crForegroundClr = crColor;
147 dc->pdcattr->crBackgroundClr = crBkColor;
148 dc->pdcattr->crBrushClr = crBrushClr;
149 dc->pdcattr->ulForegroundClr = ulForegroundClr;
150 dc->pdcattr->ulBackgroundClr = ulBackgroundClr;
151 dc->pdcattr->ulBrushClr = ulBrushClr;
152 dc->pdcattr->ulDirty_ |= flags;
153 break;
154 }
155
156 case GdiBCPolyPatBlt:
157 {
158 PGDIBSPPATBLT pgDPB;
159 EBRUSHOBJ eboFill;
160 PBRUSH pbrush;
161 PPATRECT pRects;
162 INT i;
163 DWORD dwRop, flags;
164 COLORREF crColor, crBkColor, crBrushClr;
165 ULONG ulForegroundClr, ulBackgroundClr, ulBrushClr;
166 if (!dc) break;
167 pgDPB = (PGDIBSPPATBLT) pHdr;
168 /* Convert the ROP3 to a ROP4 */
169 dwRop = pgDPB->rop4;
170 dwRop = MAKEROP4(dwRop & 0xFF0000, dwRop);
171 /* Check if the rop uses a source */
172 if (WIN32_ROP4_USES_SOURCE(dwRop))
173 {
174 /* This is not possible */
175 break;
176 }
177 /* Check if the DC has no surface (empty mem or info DC) */
178 if (dc->dclevel.pSurface == NULL)
179 {
180 /* Nothing to do */
181 break;
182 }
183 // Save current attributes and flags
184 crColor = dc->pdcattr->crForegroundClr;
185 crBkColor = dc->pdcattr->ulBackgroundClr;
186 crBrushClr = dc->pdcattr->crBrushClr;
187 ulForegroundClr = dc->pdcattr->ulForegroundClr;
188 ulBackgroundClr = dc->pdcattr->ulBackgroundClr;
189 ulBrushClr = dc->pdcattr->ulBrushClr;
190 flags = dc->pdcattr->ulDirty_ & (DIRTY_BACKGROUND | DIRTY_TEXT | DIRTY_FILL | DC_BRUSH_DIRTY);
191 // Set the attribute snapshot
192 dc->pdcattr->crForegroundClr = pgDPB->crForegroundClr;
193 dc->pdcattr->crBackgroundClr = pgDPB->crBackgroundClr;
194 dc->pdcattr->crBrushClr = pgDPB->crBrushClr;
195 dc->pdcattr->ulForegroundClr = pgDPB->ulForegroundClr;
196 dc->pdcattr->ulBackgroundClr = pgDPB->ulBackgroundClr;
197 dc->pdcattr->ulBrushClr = pgDPB->ulBrushClr;
198 // Process dirty attributes if any
199 if (dc->pdcattr->ulDirty_ & DIRTY_TEXT)
201 if (pdcattr->ulDirty_ & DIRTY_BACKGROUND)
203
204 DPRINT1("GdiBCPolyPatBlt Testing\n");
205 pRects = &pgDPB->pRect[0];
206
207 for (i = 0; i < pgDPB->Count; i++)
208 {
209 pbrush = BRUSH_ShareLockBrush(pRects->hBrush);
210
211 /* Check if we could lock the brush */
212 if (pbrush != NULL)
213 {
214 /* Initialize a brush object */
215 EBRUSHOBJ_vInitFromDC(&eboFill, pbrush, dc);
216
217 IntPatBlt(
218 dc,
219 pRects->r.left,
220 pRects->r.top,
221 pRects->r.right,
222 pRects->r.bottom,
223 dwRop,
224 &eboFill);
225
226 /* Cleanup the brush object and unlock the brush */
227 EBRUSHOBJ_vCleanup(&eboFill);
229 }
230 pRects++;
231 }
232
233 // Restore attributes and flags
234 dc->pdcattr->crForegroundClr = crColor;
235 dc->pdcattr->crBackgroundClr = crBkColor;
236 dc->pdcattr->crBrushClr = crBrushClr;
237 dc->pdcattr->ulForegroundClr = ulForegroundClr;
238 dc->pdcattr->ulBackgroundClr = ulBackgroundClr;
239 dc->pdcattr->ulBrushClr = ulBrushClr;
240 dc->pdcattr->ulDirty_ |= flags;
241 break;
242 }
243
244 case GdiBCTextOut:
245 {
246 PGDIBSTEXTOUT pgO;
247 COLORREF crColor = -1, crBkColor;
248 ULONG ulForegroundClr, ulBackgroundClr;
249 DWORD flags = 0, flXform = 0, saveflags, saveflXform = 0;
250 FLONG flTextAlign = -1;
251 HANDLE hlfntNew;
252 PRECTL lprc;
253 USHORT jBkMode;
254 LONG lBkMode;
255 POINTL ptlViewportOrg;
256 if (!dc) break;
257 pgO = (PGDIBSTEXTOUT) pHdr;
258
259 // Save current attributes, flags and Set the attribute snapshots
261
262 // In this instance check for differences and set the appropriate dirty flags.
263 if ( dc->pdcattr->crForegroundClr != pgO->crForegroundClr)
264 {
265 crColor = dc->pdcattr->crForegroundClr;
266 dc->pdcattr->crForegroundClr = pgO->crForegroundClr;
267 ulForegroundClr = dc->pdcattr->ulForegroundClr;
268 dc->pdcattr->ulForegroundClr = pgO->ulForegroundClr;
270 }
271 if (dc->pdcattr->crBackgroundClr != pgO->crBackgroundClr)
272 {
273 crBkColor = dc->pdcattr->ulBackgroundClr;
274 dc->pdcattr->crBackgroundClr = pgO->crBackgroundClr;
275 ulBackgroundClr = dc->pdcattr->ulBackgroundClr;
276 dc->pdcattr->ulBackgroundClr = pgO->ulBackgroundClr;
278 }
279 if (dc->pdcattr->flTextAlign != pgO->flTextAlign)
280 {
281 flTextAlign = dc->pdcattr->flTextAlign;
282 dc->pdcattr->flTextAlign = pgO->flTextAlign;
283 }
284 if (dc->pdcattr->hlfntNew != pgO->hlfntNew)
285 {
286 hlfntNew = dc->pdcattr->hlfntNew;
287 dc->pdcattr->hlfntNew = pgO->hlfntNew;
288 dc->pdcattr->ulDirty_ &= ~SLOW_WIDTHS;
290 }
291
292 if ( dc->pdcattr->ptlViewportOrg.x != pgO->ptlViewportOrg.x ||
293 dc->pdcattr->ptlViewportOrg.y != pgO->ptlViewportOrg.y )
294 {
295 saveflXform = dc->pdcattr->flXform & (PAGE_XLATE_CHANGED|WORLD_XFORM_CHANGED|DEVICE_TO_WORLD_INVALID);
296 ptlViewportOrg = dc->pdcattr->ptlViewportOrg;
297 dc->pdcattr->ptlViewportOrg = pgO->ptlViewportOrg;
299 }
300
301 dc->pdcattr->flXform |= flXform;
302 dc->pdcattr->ulDirty_ |= flags;
303
304 jBkMode = dc->pdcattr->jBkMode;
305 dc->pdcattr->jBkMode = pgO->lBkMode;
306 lBkMode = dc->pdcattr->lBkMode;
307 dc->pdcattr->lBkMode = pgO->lBkMode;
308
309 lprc = (pgO->Options & GDIBS_NORECT) ? NULL : &pgO->Rect;
310 pgO->Options &= ~GDIBS_NORECT;
311
313 pgO->x,
314 pgO->y,
315 pgO->Options,
316 lprc,
317 (LPCWSTR)&pgO->String[pgO->Size/sizeof(WCHAR)],
318 pgO->cbCount,
319 pgO->Size ? (LPINT)&pgO->Buffer : NULL,
320 pgO->iCS_CP );
321
322 // Restore attributes and flags
323 dc->pdcattr->jBkMode = jBkMode;
324 dc->pdcattr->lBkMode = lBkMode;
325
326 if (saveflXform)
327 {
328 dc->pdcattr->ptlViewportOrg = ptlViewportOrg;
329 dc->pdcattr->flXform |= saveflXform|flXform;
330 }
331
332 if (flags & DIRTY_TEXT && crColor != -1)
333 {
334 dc->pdcattr->crForegroundClr = crColor;
335 dc->pdcattr->ulForegroundClr = ulForegroundClr;
336 }
338 {
339 dc->pdcattr->crBackgroundClr = crBkColor;
340 dc->pdcattr->ulBackgroundClr = ulBackgroundClr;
341 }
342 if (flTextAlign != -1)
343 {
344 dc->pdcattr->flTextAlign = flTextAlign;
345 }
346
347 if (flags & DIRTY_CHARSET)
348 {
349 dc->pdcattr->hlfntNew = hlfntNew;
350 dc->pdcattr->ulDirty_ &= ~SLOW_WIDTHS;
351 }
352 dc->pdcattr->ulDirty_ |= saveflags | flags;
353 dc->pdcattr->flXform |= saveflXform | flXform;
354 break;
355 }
356
357 case GdiBCExtTextOut:
358 {
360 COLORREF crBkColor;
361 ULONG ulBackgroundClr;
362 POINTL ptlViewportOrg;
363 DWORD flags = 0, flXform = 0, saveflags, saveflXform = 0;
364 if (!dc) break;
365 pgO = (PGDIBSEXTTEXTOUT) pHdr;
366
367 saveflags = dc->pdcattr->ulDirty_ & (DIRTY_BACKGROUND|DIRTY_TEXT|DIRTY_FILL|DC_BRUSH_DIRTY|DIRTY_CHARSET);
368
369 if (dc->pdcattr->crBackgroundClr != pgO->ulBackgroundClr)
370 {
371 crBkColor = dc->pdcattr->crBackgroundClr;
372 ulBackgroundClr = dc->pdcattr->ulBackgroundClr;
373 dc->pdcattr->crBackgroundClr = pgO->ulBackgroundClr;
374 dc->pdcattr->ulBackgroundClr = pgO->ulBackgroundClr;
376 }
377
378 if ( dc->pdcattr->ptlViewportOrg.x != pgO->ptlViewportOrg.x ||
379 dc->pdcattr->ptlViewportOrg.y != pgO->ptlViewportOrg.y )
380 {
381 saveflXform = dc->pdcattr->flXform & (PAGE_XLATE_CHANGED|WORLD_XFORM_CHANGED|DEVICE_TO_WORLD_INVALID);
382 ptlViewportOrg = dc->pdcattr->ptlViewportOrg;
383 dc->pdcattr->ptlViewportOrg = pgO->ptlViewportOrg;
385 }
386
387 dc->pdcattr->flXform |= flXform;
388 dc->pdcattr->ulDirty_ |= flags;
389
391 0,
392 0,
393 pgO->Options,
394 &pgO->Rect,
395 NULL,
396 pgO->Count,
397 NULL,
398 0 );
399
400 if (saveflXform)
401 {
402 dc->pdcattr->ptlViewportOrg = ptlViewportOrg;
403 dc->pdcattr->flXform |= saveflXform|flXform;
404 }
405
407 {
408 dc->pdcattr->crBackgroundClr = crBkColor;
409 dc->pdcattr->ulBackgroundClr = ulBackgroundClr;
410 }
411 dc->pdcattr->ulDirty_ |= saveflags | flags;
412 dc->pdcattr->flXform |= saveflXform | flXform;
413 break;
414 }
415
416 case GdiBCSetBrushOrg:
417 {
418 PGDIBSSETBRHORG pgSBO;
419 if (!dc) break;
420 pgSBO = (PGDIBSSETBRHORG) pHdr;
421 pdcattr->ptlBrushOrigin = pgSBO->ptlBrushOrigin;
423 break;
424 }
425
427 {
429 if (!dc) break;
430 pgO = (PGDIBSEXTSELCLPRGN) pHdr;
431 IntGdiExtSelectClipRect( dc, &pgO->rcl, pgO->fnMode);
432 break;
433 }
434
435 case GdiBCSelObj:
436 {
437 PGDIBSOBJECT pgO;
438
439 if (!dc) break;
440 pgO = (PGDIBSOBJECT) pHdr;
441
443 break;
444 }
445
446 case GdiBCDelRgn:
447 DPRINT("Delete Region Object!\n");
448 /* Fall through */
449 case GdiBCDelObj:
450 {
451 PGDIBSOBJECT pgO = (PGDIBSOBJECT) pHdr;
452 GreDeleteObject( pgO->hgdiobj );
453 break;
454 }
455
456 default:
457 break;
458 }
459
460 return Size;
461}
462
463/*
464 * NtGdiFlush
465 *
466 * Flushes the calling thread's current batch.
467 */
472 VOID)
473{
475 return STATUS_SUCCESS;
476}
477
478/*
479 * NtGdiFlushUserBatch
480 *
481 * Callback for thread batch flush routine.
482 *
483 * Think small & fast!
484 */
488{
489 PTEB pTeb = NtCurrentTeb();
490 ULONG GdiBatchCount = pTeb->GdiBatchCount;
491
492 if( (GdiBatchCount > 0) && (GdiBatchCount <= (GDIBATCHBUFSIZE/4)))
493 {
494 HDC hDC = (HDC) pTeb->GdiTebBatch.HDC;
495
496 /* If hDC is zero and the buffer fills up with delete objects we need
497 to run anyway.
498 */
499 if (hDC || GdiBatchCount)
500 {
501 PCHAR pHdr = (PCHAR)&pTeb->GdiTebBatch.Buffer[0];
502 PDC pDC = NULL;
503
505 {
506 pDC = DC_LockDc(hDC);
507 }
508
509 // No need to init anything, just go!
510 for (; GdiBatchCount > 0; GdiBatchCount--)
511 {
512 ULONG Size;
513 // Process Gdi Batch!
514 Size = GdiFlushUserBatch(pDC, (PGDIBATCHHDR) pHdr);
515 if (!Size) break;
516 pHdr += Size;
517 }
518
519 if (pDC)
520 {
521 DC_UnlockDc(pDC);
522 }
523
524 // Exit and clear out for the next round.
525 pTeb->GdiTebBatch.Offset = 0;
526 pTeb->GdiBatchCount = 0;
527 pTeb->GdiTebBatch.HDC = 0;
528 }
529 }
530
531 // FIXME: On Windows XP the function returns &pTeb->RealClientId, maybe VOID?
532 return STATUS_SUCCESS;
533}
static HDC hDC
Definition: 3dtext.c:33
LONG NTSTATUS
Definition: precomp.h:26
#define DPRINT1
Definition: precomp.h:8
int FASTCALL IntGdiExtSelectClipRect(PDC, PRECTL, int)
HFONT NTAPI DC_hSelectFont(_In_ PDC pdc, _In_ HFONT hlfntNew)
Definition: dcobjs.c:550
FORCEINLINE VOID DC_UnlockDc(PDC pdc)
Definition: dc.h:238
VOID FASTCALL DC_vUpdateTextBrush(PDC pdc)
Definition: dcobjs.c:108
VOID FASTCALL DC_vUpdateBackgroundBrush(PDC pdc)
Definition: dcobjs.c:126
VOID NTAPI DC_vSetBrushOrigin(PDC pdc, LONG x, LONG y)
Definition: dcobjs.c:142
VOID FASTCALL DC_vUpdateFillBrush(PDC pdc)
Definition: dcobjs.c:16
FORCEINLINE PDC DC_LockDc(HDC hdc)
Definition: dc.h:220
#define NULL
Definition: types.h:112
#define APIENTRY
Definition: api.h:79
VOID NTAPI EBRUSHOBJ_vInitFromDC(EBRUSHOBJ *pebo, PBRUSH pbrush, PDC pdc)
Definition: engbrush.c:112
VOID NTAPI EBRUSHOBJ_vCleanup(EBRUSHOBJ *pebo)
Definition: engbrush.c:153
#define _SEH2_END
Definition: filesup.c:22
#define _SEH2_TRY
Definition: filesup.c:19
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
#define BRUSH_ShareLockBrush(hBrush)
Definition: brush.h:117
#define BRUSH_ShareUnlockBrush(pBrush)
Definition: brush.h:118
#define GDI_HANDLE_GET_TYPE(h)
Definition: gdi.h:31
@ GDILoObjType_LO_DC_TYPE
Definition: gdi_private.h:34
VOID FASTCALL DoDeviceSync(SURFOBJ *Surface, PRECTL Rect, FLONG fl)
Definition: gdibatch.c:22
__kernel_entry NTSTATUS APIENTRY NtGdiFlush(VOID)
Definition: gdibatch.c:471
NTSTATUS APIENTRY NtGdiFlushUserBatch(VOID)
Definition: gdibatch.c:487
BOOL APIENTRY IntExtTextOutW(IN PDC, IN INT, IN INT, IN UINT, IN OPTIONAL PRECTL, IN LPCWSTR, IN INT, IN OPTIONAL LPINT, IN DWORD)
Definition: freetype.c:6025
BOOL FASTCALL IntPatBlt(PDC, INT, INT, INT, INT, DWORD, PEBRUSHOBJ)
Definition: bitblt.c:837
ULONG FASTCALL GdiFlushUserBatch(PDC dc, PGDIBATCHHDR pHdr)
Definition: gdibatch.c:70
VOID FASTCALL SynchronizeDriver(FLONG Flags)
Definition: gdibatch.c:45
GLbitfield flags
Definition: glext.h:7161
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
#define EXCEPTION_EXECUTE_HANDLER
Definition: excpt.h:85
#define WIN32_ROP4_USES_SOURCE(Rop)
Definition: intgdi.h:7
#define NtCurrentTeb
if(dx< 0)
Definition: linetemp.h:194
static const WCHAR dc[]
#define PCHAR
Definition: match.c:90
static HDC
Definition: imagelist.c:92
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
unsigned int UINT
Definition: ndis.h:50
#define FASTCALL
Definition: nt_native.h:50
unsigned long FLONG
Definition: ntbasedef.h:366
#define DIRTY_FILL
Definition: ntgdihdl.h:123
#define WORLD_XFORM_CHANGED
Definition: ntgdihdl.h:188
#define DEVICE_TO_WORLD_INVALID
Definition: ntgdihdl.h:177
#define DIRTY_TEXT
Definition: ntgdihdl.h:125
#define PAGE_XLATE_CHANGED
Definition: ntgdihdl.h:186
#define DIRTY_LINE
Definition: ntgdihdl.h:124
#define DIRTY_BACKGROUND
Definition: ntgdihdl.h:126
#define DIRTY_CHARSET
Definition: ntgdihdl.h:127
#define DC_BRUSH_DIRTY
Definition: ntgdihdl.h:135
#define GDIBATCHBUFSIZE
Definition: ntgdityp.h:200
struct _GDIBSEXTTEXTOUT * PGDIBSEXTTEXTOUT
struct _GDIBSPPATBLT * PGDIBSPPATBLT
struct _GDIBSSETBRHORG * PGDIBSSETBRHORG
struct _GDIBSTEXTOUT * PGDIBSTEXTOUT
struct _GDIBSOBJECT * PGDIBSOBJECT
struct _GDIBSEXTSELCLPRGN * PGDIBSEXTSELCLPRGN
@ GdiBCSelObj
Definition: ntgdityp.h:92
@ GdiBCPatBlt
Definition: ntgdityp.h:86
@ GdiBCDelRgn
Definition: ntgdityp.h:94
@ GdiBCDelObj
Definition: ntgdityp.h:93
@ GdiBCSetBrushOrg
Definition: ntgdityp.h:90
@ GdiBCPolyPatBlt
Definition: ntgdityp.h:87
@ GdiBCExtSelClipRgn
Definition: ntgdityp.h:91
@ GdiBCTextOut
Definition: ntgdityp.h:88
@ GdiBCExtTextOut
Definition: ntgdityp.h:89
#define GDIBS_NORECT
Definition: ntgdityp.h:507
struct _GDIBSPATBLT * PGDIBSPATBLT
@ PDEV_DRIVER_PUNTED_CALL
Definition: pdevobj.h:21
long LONG
Definition: pedump.c:60
unsigned short USHORT
Definition: pedump.c:61
#define _SEH2_EXCEPT(...)
Definition: pseh2_64.h:34
#define _SEH2_YIELD(__stmt)
Definition: pseh2_64.h:162
@ Cmd
Definition: sacdrv.h:278
#define STATUS_SUCCESS
Definition: shellext.h:65
#define DPRINT
Definition: sndvol32.h:71
#define __kernel_entry
Definition: specstrings.h:355
PULONG MinorVersion OPTIONAL
Definition: CrossNt.h:68
Definition: polytest.cpp:41
Definition: types.h:101
ULONG ulDirty_
Definition: ntgdihdl.h:294
POINTL ptlBrushOrigin
Definition: ntgdihdl.h:349
SHORT Size
Definition: ntgdityp.h:458
SHORT Cmd
Definition: ntgdityp.h:459
POINTL ptlViewportOrg
Definition: ntgdityp.h:539
ULONG ulBackgroundClr
Definition: ntgdityp.h:540
HGDIOBJ hgdiobj
Definition: ntgdityp.h:560
ULONG ulBrushClr
Definition: ntgdityp.h:478
COLORREF crBackgroundClr
Definition: ntgdityp.h:472
ULONG ulForegroundClr
Definition: ntgdityp.h:476
COLORREF crBrushClr
Definition: ntgdityp.h:473
COLORREF crForegroundClr
Definition: ntgdityp.h:471
DWORD dwRop
Definition: ntgdityp.h:470
ULONG ulBackgroundClr
Definition: ntgdityp.h:477
HANDLE hbrush
Definition: ntgdityp.h:469
DWORD rop4
Definition: ntgdityp.h:491
ULONG ulForegroundClr
Definition: ntgdityp.h:497
ULONG ulBackgroundClr
Definition: ntgdityp.h:498
ULONG ulBrushClr
Definition: ntgdityp.h:499
COLORREF crForegroundClr
Definition: ntgdityp.h:494
PATRECT pRect[1]
Definition: ntgdityp.h:501
DWORD Count
Definition: ntgdityp.h:493
COLORREF crBackgroundClr
Definition: ntgdityp.h:495
COLORREF crBrushClr
Definition: ntgdityp.h:496
POINTL ptlBrushOrigin
Definition: ntgdityp.h:546
ULONG Buffer[1]
Definition: ntgdityp.h:529
POINTL ptlViewportOrg
Definition: ntgdityp.h:526
UINT cbCount
Definition: ntgdityp.h:522
UINT Options
Definition: ntgdityp.h:519
HANDLE hlfntNew
Definition: ntgdityp.h:524
WCHAR String[2]
Definition: ntgdityp.h:528
LONG lBkMode
Definition: ntgdityp.h:514
COLORREF crForegroundClr
Definition: ntgdityp.h:512
ULONG ulForegroundClr
Definition: ntgdityp.h:515
FLONG flTextAlign
Definition: ntgdityp.h:525
COLORREF crBackgroundClr
Definition: ntgdityp.h:513
ULONG ulBackgroundClr
Definition: ntgdityp.h:516
DWORD iCS_CP
Definition: ntgdityp.h:521
ULONG Buffer[GDI_BATCH_BUFFER_SIZE]
Definition: compat.h:833
HANDLE HDC
Definition: compat.h:832
ULONG Offset
Definition: compat.h:831
RECT r
Definition: ntgdityp.h:484
HBRUSH hBrush
Definition: ntgdityp.h:485
LONG y
Definition: windef.h:330
LONG x
Definition: windef.h:329
DHPDEV dhpdev
Definition: winddi.h:1207
DHSURF dhsurf
Definition: winddi.h:1205
HDEV hdev
Definition: winddi.h:1208
Definition: compat.h:836
GDI_TEB_BATCH GdiTebBatch
Definition: compat.h:857
ULONG GdiBatchCount
Definition: compat.h:887
LONG right
Definition: windef.h:308
LONG bottom
Definition: windef.h:309
LONG top
Definition: windef.h:307
LONG left
Definition: windef.h:306
int32_t INT
Definition: typedefs.h:58
#define IN
Definition: typedefs.h:39
uint32_t ULONG
Definition: typedefs.h:59
char * PCHAR
Definition: typedefs.h:51
_Must_inspect_result_ _In_ WDFDEVICE Device
Definition: wdfchildlist.h:474
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
Definition: wdfdevice.h:4533
BOOL NTAPI GreDeleteObject(HGDIOBJ hobj)
Definition: gdiobj.c:1158
BOOL NTAPI GreIsHandleValid(HGDIOBJ hobj)
Definition: gdiobj.c:1146
_In_ FLONG fl
Definition: winddi.h:1279
#define GCAPS2_SYNCTIMER
Definition: winddi.h:373
#define GCAPS2_SYNCFLUSH
Definition: winddi.h:372
#define DSS_FLUSH_EVENT
Definition: winddi.h:4160
#define DSS_TIMER_EVENT
Definition: winddi.h:4159
ENGAPI VOID APIENTRY EngUnlockSurface(_In_ _Post_ptr_invalid_ SURFOBJ *pso)
Definition: surface.c:628
int * LPINT
Definition: windef.h:178
DWORD COLORREF
Definition: windef.h:300
#define MAKEROP4(f, b)
Definition: wingdi.h:2946
_In_ int _Inout_ LPRECT lprc
Definition: winuser.h:4466
_Must_inspect_result_ _In_ ULONG Flags
Definition: wsk.h:170
__wchar_t WCHAR
Definition: xmlstorage.h:180
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185