ReactOS 0.4.17-dev-116-ga4b6fe9
painting.c
Go to the documentation of this file.
1#include <precomp.h>
2
3
4/*
5 * @implemented
6 */
10 _In_ HDC hdc,
11 _In_ INT x,
12 _In_ INT y )
13{
15
16 if ( GdiConvertAndCheckDC(hdc) == NULL ) return FALSE;
17
18 return NtGdiLineTo(hdc, x, y);
19}
20
21
22BOOL
25 _In_ HDC hdc,
26 _In_ INT x,
27 _In_ INT y,
29{
30 PDC_ATTR pdcattr;
31
32 HANDLE_METADC(BOOL, MoveTo, FALSE, hdc, x, y);
33
34 /* Get the DC attribute */
35 pdcattr = GdiGetDcAttr(hdc);
36 if (pdcattr == NULL)
37 {
39 return FALSE;
40 }
41
42 if (ppt)
43 {
44 if ( pdcattr->ulDirty_ & DIRTY_PTLCURRENT ) // Double hit!
45 {
46 ppt->x = pdcattr->ptfxCurrent.x; // ret prev before change.
47 ppt->y = pdcattr->ptfxCurrent.y;
48 DPtoLP (hdc, ppt, 1); // reconvert back.
49 }
50 else
51 {
52 ppt->x = pdcattr->ptlCurrent.x;
53 ppt->y = pdcattr->ptlCurrent.y;
54 }
55 }
56
57 pdcattr->ptlCurrent.x = x;
58 pdcattr->ptlCurrent.y = y;
59
60 pdcattr->ulDirty_ &= ~DIRTY_PTLCURRENT;
61 pdcattr->ulDirty_ |= ( DIRTY_PTFXCURRENT|DIRTY_STYLESTATE); // Set dirty
62 return TRUE;
63}
64
65
66/*
67 * @implemented
68 */
69BOOL
72 _In_ HDC hdc,
74 _In_ INT top,
77{
79
80 if ( GdiConvertAndCheckDC(hdc) == NULL ) return FALSE;
81
82 return NtGdiEllipse(hdc, left, top, right, bottom);
83}
84
85
86/*
87 * @implemented
88 */
89BOOL
92 _In_ HDC hdc,
94 _In_ INT top,
97{
99
100 if ( GdiConvertAndCheckDC(hdc) == NULL ) return FALSE;
101
103}
104
105
106/*
107 * @implemented
108 */
109BOOL
110WINAPI
112 _In_ HDC hdc,
113 _In_ INT left,
114 _In_ INT top,
115 _In_ INT right,
117 _In_ INT width,
119{
121
122 if ( GdiConvertAndCheckDC(hdc) == NULL ) return FALSE;
123
125}
126
127
128/*
129 * @implemented
130 */
132WINAPI
134 _In_ HDC hdc,
135 _In_ INT x,
136 _In_ INT y)
137{
140 return NtGdiGetPixel(hdc, x, y);
141}
142
143
144/*
145 * @implemented
146 */
148WINAPI
150 _In_ HDC hdc,
151 _In_ INT x,
152 _In_ INT y,
153 _In_ COLORREF crColor)
154{
156
157 if ( GdiConvertAndCheckDC(hdc) == NULL ) return FALSE;
158
159 return NtGdiSetPixel(hdc, x, y, crColor);
160}
161
162
163/*
164 * @implemented
165 */
166BOOL
167WINAPI
169 _In_ HDC hdc,
170 _In_ INT x,
171 _In_ INT y,
172 _In_ COLORREF crColor)
173{
174 return SetPixel(hdc, x, y, crColor) != CLR_INVALID;
175}
176
177
178/*
179 * @implemented
180 */
181BOOL
182WINAPI
184 _In_ HDC hdc,
185 _In_ HRGN hrgn,
186 _In_ HBRUSH hbr)
187{
188
189 if ((hrgn == NULL) || (hbr == NULL))
190 return FALSE;
191
193
194 if ( GdiConvertAndCheckDC(hdc) == NULL ) return FALSE;
195
196 return NtGdiFillRgn(hdc, hrgn, hbr);
197}
198
199
200/*
201 * @implemented
202 */
203BOOL
204WINAPI
206 _In_ HDC hdc,
207 _In_ HRGN hrgn,
208 _In_ HBRUSH hbr,
209 _In_ INT nWidth,
210 _In_ INT nHeight)
211{
212
213 if ((hrgn == NULL) || (hbr == NULL))
214 return FALSE;
215
216 HANDLE_METADC(BOOL, FrameRgn, FALSE, hdc, hrgn, hbr, nWidth, nHeight);
217
218 if ( GdiConvertAndCheckDC(hdc) == NULL ) return FALSE;
219
220 return NtGdiFrameRgn(hdc, hrgn, hbr, nWidth, nHeight);
221}
222
223
224/*
225 * @implemented
226 */
227BOOL
228WINAPI
230 _In_ HDC hdc,
231 _In_ HRGN hrgn)
232{
233
234 if (hrgn == NULL)
235 return FALSE;
236
238
239 if ( GdiConvertAndCheckDC(hdc) == NULL ) return FALSE;
240
241 return NtGdiInvertRgn(hdc, hrgn);
242}
243
244
245/*
246 * @implemented
247 */
248BOOL
249WINAPI
251 _In_ HDC hdc,
252 _In_ HRGN hrgn)
253{
255}
256
257
258/*
259 * @implemented
260 */
261BOOL
262WINAPI
264 _In_ HDC hdc,
265 _In_reads_(cpt) const POINT *apt,
266 _In_ DWORD cpt)
267{
269
270 if ( GdiConvertAndCheckDC(hdc) == NULL ) return FALSE;
271
272 return NtGdiPolyPolyDraw(hdc ,(PPOINT)apt, &cpt, 1, GdiPolyBezier);
273}
274
275
276/*
277 * @implemented
278 */
279BOOL
280WINAPI
282 _In_ HDC hdc,
283 _In_reads_(cpt) const POINT *apt,
284 _In_ DWORD cpt)
285{
286 POINT pt1 = { 0, 0 };
287 BOOL ret = FALSE;
288
290
291 if ( GdiConvertAndCheckDC(hdc) == NULL ) return FALSE;
292
293 /* This section of code is just an optimization so we can do an early return.
294 * Everything would work the same even if this code were removed. */
295 if (cpt == 3)
296 {
297 /* If there are exactly 3 points, see if all three points of
298 * the PolyBezierTo are equal. */
299 if (apt[0].x == apt[1].x && apt[1].x == apt[2].x &&
300 apt[0].y == apt[1].y && apt[1].y == apt[2].y)
301 {
302 /* If all points are equal and they equal the start point,
303 * then we can just return TRUE as an optimization. */
304 if (GetCurrentPositionEx(hdc, &pt1) &&
305 pt1.x == apt[0].x && pt1.y == apt[0].y)
306 {
307 return TRUE;
308 }
309 /* If they are all equal, but not equal to the start point,
310 * then we can just do a LineTo and return as an optimization. */
311 return LineTo(hdc, apt[0].x, apt[0].y);
312 }
313 }
314
315 /* Following based on Wine 10.0 nulldrv_PolyBezierTo function */
316 POINT *pts = HeapAlloc(GetProcessHeap(), 0, (cpt + 1) * sizeof(*apt));
317 if (!pts)
318 {
320 return FALSE;
321 }
322
323 if (GetCurrentPositionEx(hdc, &pt1))
324 {
325 pts[0] = pt1;
326 memcpy(&pts[1], apt, sizeof(*apt) * cpt);
327 cpt++;
329 }
330
331 HeapFree(GetProcessHeap(), 0, pts);
332
333 return ret;
334}
335
336
337/*
338 * @implemented
339 */
340BOOL
341WINAPI
343 _In_ HDC hdc,
344 _In_reads_(cpt) const POINT *apt,
345 _In_reads_(cpt) const BYTE *aj,
346 _In_ INT cpt)
347{
348 HANDLE_EMETAFDC(BOOL, PolyDraw, FALSE, hdc, apt, aj, cpt);
349
350 if ( GdiConvertAndCheckDC(hdc) == NULL ) return FALSE;
351
352 return NtGdiPolyDraw(hdc, (PPOINT)apt, (PBYTE)aj, cpt);
353}
354
355
356/*
357 * @implemented
358 */
359BOOL
360WINAPI
362 _In_ HDC hdc,
363 _In_reads_(cpt) const POINT *apt,
364 _In_ INT cpt)
365{
366 HANDLE_METADC(BOOL, Polygon, FALSE, hdc, apt, cpt);
367
368 if ( GdiConvertAndCheckDC(hdc) == NULL ) return FALSE;
369
370 return NtGdiPolyPolyDraw(hdc , (PPOINT)apt, (PULONG)&cpt, 1, GdiPolyPolygon);
371}
372
373
374/*
375 * @implemented
376 */
377BOOL
378WINAPI
380 _In_ HDC hdc,
381 _In_reads_(cpt) const POINT *apt,
382 _In_ INT cpt)
383{
384 HANDLE_METADC(BOOL, Polyline, FALSE, hdc, apt, cpt);
385
386 if ( GdiConvertAndCheckDC(hdc) == NULL ) return FALSE;
387
388 return NtGdiPolyPolyDraw(hdc, (PPOINT)apt, (PULONG)&cpt, 1, GdiPolyPolyLine);
389}
390
391
392/*
393 * @implemented
394 */
395BOOL
396WINAPI
398 _In_ HDC hdc,
399 _In_reads_(cpt) const POINT *apt,
400 _In_ DWORD cpt)
401{
402 POINT pt1 = { 0, 0 };
403 BOOL ret = FALSE;
404
406
407 if ( GdiConvertAndCheckDC(hdc) == NULL ) return FALSE;
408
409 /* Following based on Wine 10.0 nulldrv_PolylineTo function */
410 POINT *pts = HeapAlloc(GetProcessHeap(), 0, (cpt + 1) * sizeof(*apt));
411 if (!pts)
412 {
414 return FALSE;
415 }
416
417 if (GetCurrentPositionEx(hdc, &pt1))
418 {
419 pts[0] = pt1;
420 memcpy(&pts[1], apt, sizeof(*apt) * cpt);
421 cpt++;
422 ret = NtGdiPolyPolyDraw(hdc, (PPOINT)pts, &cpt, 1, GdiPolyLineTo);
423 }
424
425 HeapFree(GetProcessHeap(), 0, pts);
426
427 return ret;
428}
429
430
431/*
432 * @implemented
433 */
434BOOL
435WINAPI
437 _In_ HDC hdc,
438 _In_ const POINT *apt,
439 _In_reads_(csz) const INT *asz,
440 _In_ INT csz)
441{
442 HANDLE_METADC(BOOL, PolyPolygon, FALSE, hdc, apt, asz, csz);
443
444 if ( GdiConvertAndCheckDC(hdc) == NULL ) return FALSE;
445
446 return NtGdiPolyPolyDraw(hdc, (PPOINT)apt, (PULONG)asz, csz, GdiPolyPolygon);
447}
448
449
450/*
451 * @implemented
452 */
453BOOL
454WINAPI
456 _In_ HDC hdc,
457 _In_ CONST POINT *apt,
458 _In_reads_(csz) CONST DWORD *asz,
459 _In_ DWORD csz)
460{
462 return FALSE;
463
464 HANDLE_EMETAFDC(BOOL, PolyPolyline, FALSE, hdc, apt, asz, csz);
465
466 if ( GdiConvertAndCheckDC(hdc) == NULL ) return FALSE;
467
468 return NtGdiPolyPolyDraw(hdc , (PPOINT)apt, (PULONG)asz, csz, GdiPolyPolyLine);
469}
470
471
472/*
473 * @implemented
474 */
475BOOL
476WINAPI
478 _In_ HDC hdc,
479 _In_ INT xStart,
480 _In_ INT yStart,
481 _In_ COLORREF crFill,
482 _In_ UINT fuFillType)
483{
484 HANDLE_METADC(BOOL, ExtFloodFill, FALSE, hdc, xStart, yStart, crFill, fuFillType);
485
486 if ( GdiConvertAndCheckDC(hdc) == NULL ) return FALSE;
487
488 return NtGdiExtFloodFill(hdc, xStart, yStart, crFill, fuFillType);
489}
490
491
492/*
493 * @implemented
494 */
495BOOL
496WINAPI
498 _In_ HDC hdc,
499 _In_ INT xStart,
500 _In_ INT yStart,
501 _In_ COLORREF crFill)
502{
503 return ExtFloodFill(hdc, xStart, yStart, crFill, FLOODFILLBORDER);
504}
505
506/*
507 * @implemented
508 */
509BOOL
510WINAPI
512 _In_ HDC hdcDest,
513 _In_ INT xDest,
514 _In_ INT yDest,
515 _In_ INT cx,
516 _In_ INT cy,
518 _In_ INT xSrc,
519 _In_ INT ySrc,
520 _In_ DWORD dwRop)
521{
522 /* Use PatBlt for no source blt, like windows does */
523 if (!ROP_USES_SOURCE(dwRop))
524 {
525 return PatBlt(hdcDest, xDest, yDest, cx, cy, dwRop);
526 }
527
528 /* For meta DCs we use StretchBlt via emfdc.c */
530 BitBlt,
531 FALSE,
532 hdcDest,
533 xDest,
534 yDest,
535 cx,
536 cy,
537 hdcSrc,
538 xSrc,
539 ySrc,
540 dwRop);
541
542 if ( GdiConvertAndCheckDC(hdcDest) == NULL ) return FALSE;
543
544 return NtGdiBitBlt(hdcDest, xDest, yDest, cx, cy, hdcSrc, xSrc, ySrc, dwRop, CLR_INVALID, 0);
545}
546
547BOOL
548WINAPI
550 _In_ HDC hdc,
551 _In_ INT nXLeft,
552 _In_ INT nYLeft,
553 _In_ INT nWidth,
554 _In_ INT nHeight,
555 _In_ DWORD dwRop)
556{
557 PDC_ATTR pdcattr;
558
559 HANDLE_EMETAFDC(BOOL, PatBlt, FALSE, hdc, nXLeft, nYLeft, nWidth, nHeight, dwRop);
560
561 if ( GdiConvertAndCheckDC(hdc) == NULL ) return FALSE;
562
563 /* Get the DC attribute */
564 pdcattr = GdiGetDcAttr(hdc);
565 if (pdcattr && !(pdcattr->ulDirty_ & DC_DIBSECTION))
566 {
567 PGDIBSPATBLT pgO;
568
570 if (pgO)
571 {
572 pdcattr->ulDirty_ |= DC_MODE_DIRTY;
573 pgO->nXLeft = nXLeft;
574 pgO->nYLeft = nYLeft;
575 pgO->nWidth = nWidth;
576 pgO->nHeight = nHeight;
577 pgO->dwRop = dwRop;
578 /* Snapshot attributes */
579 pgO->hbrush = pdcattr->hbrush;
580 pgO->crForegroundClr = pdcattr->crForegroundClr;
581 pgO->crBackgroundClr = pdcattr->crBackgroundClr;
582 pgO->crBrushClr = pdcattr->crBrushClr;
583 pgO->ulForegroundClr = pdcattr->ulForegroundClr;
584 pgO->ulBackgroundClr = pdcattr->ulBackgroundClr;
585 pgO->ulBrushClr = pdcattr->ulBrushClr;
586 return TRUE;
587 }
588 }
589 return NtGdiPatBlt( hdc, nXLeft, nYLeft, nWidth, nHeight, dwRop);
590}
591
592BOOL
593WINAPI
595 _In_ HDC hdc,
596 _In_ DWORD dwRop,
597 _In_ PPOLYPATBLT pPoly,
598 _In_ DWORD nCount,
599 _In_ DWORD dwMode)
600{
601 UINT i;
602 BOOL bResult;
603 HBRUSH hbrOld;
604 PDC_ATTR pdcattr;
605
606 /* Handle meta DCs */
609 {
611 {
612 return FALSE;
613 }
614
615 /* Save the current DC brush */
616 hbrOld = SelectObject(hdc, GetStockObject(DC_BRUSH));
617
618 /* Assume success */
619 bResult = TRUE;
620
621 /* Loop all rect */
622 for (i = 0; i < nCount; i++)
623 {
624 /* Select the brush for this rect */
625 SelectObject(hdc, pPoly[i].hBrush);
626
627 /* Do the PatBlt operation for this rect */
628 bResult &= PatBlt(hdc,
629 pPoly[i].nXLeft,
630 pPoly[i].nYLeft,
631 pPoly[i].nWidth,
632 pPoly[i].nHeight,
633 dwRop);
634 }
635
636 /* Restore the old brush */
637 SelectObject(hdc, hbrOld);
638
639 return bResult;
640 }
641
642 /* Get the DC attribute */
643 pdcattr = GdiGetDcAttr(hdc);
644 if (nCount && pdcattr && !(pdcattr->ulDirty_ & DC_DIBSECTION))
645 {
646 PGDIBSPPATBLT pgO;
647 PTEB pTeb = NtCurrentTeb();
648
650 if (pgO)
651 {
652 USHORT cjSize = 0;
653 if (nCount > 1) cjSize = (nCount-1) * sizeof(PATRECT);
654
655 if ((pTeb->GdiTebBatch.Offset + cjSize) <= GDIBATCHBUFSIZE)
656 {
657 pdcattr->ulDirty_ |= DC_MODE_DIRTY;
658 pgO->Count = nCount;
659 pgO->Mode = dwMode;
660 pgO->rop4 = dwRop;
661 /* Snapshot attributes */
662 pgO->crForegroundClr = pdcattr->crForegroundClr;
663 pgO->crBackgroundClr = pdcattr->crBackgroundClr;
664 pgO->crBrushClr = pdcattr->crBrushClr;
665 pgO->ulForegroundClr = pdcattr->ulForegroundClr;
666 pgO->ulBackgroundClr = pdcattr->ulBackgroundClr;
667 pgO->ulBrushClr = pdcattr->ulBrushClr;
668 RtlCopyMemory(pgO->pRect, pPoly, nCount * sizeof(PATRECT));
669 // Recompute offset and return size, remember one is already accounted for in the structure.
670 pTeb->GdiTebBatch.Offset += cjSize;
671 ((PGDIBATCHHDR)pgO)->Size += cjSize;
672 return TRUE;
673 }
674 // Reset offset and count then fall through
675 pTeb->GdiTebBatch.Offset -= sizeof(GDIBSPPATBLT);
676 pTeb->GdiBatchCount--;
677 }
678 }
679 return NtGdiPolyPatBlt(hdc, dwRop, pPoly, nCount, dwMode);
680}
681
682/*
683 * @implemented
684 */
685BOOL
686WINAPI
688 _In_ HDC hdcDest,
689 _In_ INT xDest,
690 _In_ INT yDest,
691 _In_ INT cxDest,
692 _In_ INT cyDest,
694 _In_ INT xSrc,
695 _In_ INT ySrc,
696 _In_ INT cxSrc,
697 _In_ INT cySrc,
698 _In_ DWORD dwRop)
699{
702 FALSE,
703 hdcDest,
704 xDest,
705 yDest,
706 cxDest,
707 cyDest,
708 hdcSrc,
709 xSrc,
710 ySrc,
711 cxSrc,
712 cySrc,
713 dwRop);
714
715 if ( GdiConvertAndCheckDC(hdcDest) == NULL ) return FALSE;
716
717 return NtGdiStretchBlt(hdcDest,
718 xDest,
719 yDest,
720 cxDest,
721 cyDest,
722 hdcSrc,
723 xSrc,
724 ySrc,
725 cxSrc,
726 cySrc,
727 dwRop,
729}
730
731
732/*
733 * @implemented
734 */
735BOOL
736WINAPI
738 _In_ HDC hdcDest,
739 _In_ INT xDest,
740 _In_ INT yDest,
741 _In_ INT cx,
742 _In_ INT cy,
744 _In_ INT xSrc,
745 _In_ INT ySrc,
746 _In_ HBITMAP hbmMask,
747 _In_ INT xMask,
748 _In_ INT yMask,
749 _In_ DWORD dwRop)
750{
752 MaskBlt,
753 FALSE,
754 hdcDest,
755 xDest,
756 yDest,
757 cx,
758 cy,
759 hdcSrc,
760 xSrc,
761 ySrc,
762 hbmMask,
763 xMask,
764 yMask,
765 dwRop);
766
767 if ( GdiConvertAndCheckDC(hdcDest) == NULL ) return FALSE;
768
769 return NtGdiMaskBlt(hdcDest,
770 xDest,
771 yDest,
772 cx,
773 cy,
774 hdcSrc,
775 xSrc,
776 ySrc,
777 hbmMask,
778 xMask,
779 yMask,
780 dwRop,
782}
783
784
785/*
786 * @implemented
787 */
788BOOL
789WINAPI
791 _In_ HDC hdcDest,
792 _In_reads_(3) const POINT * ppt,
794 _In_ INT xSrc,
795 _In_ INT ySrc,
796 _In_ INT cx,
797 _In_ INT cy,
798 _In_opt_ HBITMAP hbmMask,
799 _In_ INT xMask,
800 _In_ INT yMask)
801{
803 PlgBlt,
804 FALSE,
805 hdcDest,
806 ppt,
807 hdcSrc,
808 xSrc,
809 ySrc,
810 cx,
811 cy,
812 hbmMask,
813 xMask,
814 yMask);
815
816 if ( GdiConvertAndCheckDC(hdcDest) == NULL ) return FALSE;
817
818 return NtGdiPlgBlt(hdcDest,
819 (LPPOINT)ppt,
820 hdcSrc,
821 xSrc,
822 ySrc,
823 cx,
824 cy,
825 hbmMask,
826 xMask,
827 yMask,
829}
830
831BOOL
832WINAPI
835 _In_ INT xDst,
836 _In_ INT yDst,
837 _In_ INT cxDst,
838 _In_ INT cyDst,
840 _In_ INT xSrc,
841 _In_ INT ySrc,
842 _In_ INT cxSrc,
843 _In_ INT cySrc,
844 _In_ BLENDFUNCTION blendfn)
845{
846 if (hdcSrc == NULL ) return FALSE;
847
849
852 FALSE,
853 hdcDst,
854 xDst,
855 yDst,
856 cxDst,
857 cyDst,
858 hdcSrc,
859 xSrc,
860 ySrc,
861 cxSrc,
862 cySrc,
863 blendfn);
864
865 if ( GdiConvertAndCheckDC(hdcDst) == NULL ) return FALSE;
866
867 return NtGdiAlphaBlend(hdcDst,
868 xDst,
869 yDst,
870 cxDst,
871 cyDst,
872 hdcSrc,
873 xSrc,
874 ySrc,
875 cxSrc,
876 cySrc,
877 blendfn,
878 0);
879}
880
881
882/*
883 * @implemented
884 */
885BOOL
886WINAPI
889 _In_ INT xDst,
890 _In_ INT yDst,
891 _In_ INT cxDst,
892 _In_ INT cyDst,
894 _In_ INT xSrc,
895 _In_ INT ySrc,
896 _In_ INT cxSrc,
897 _In_ INT cySrc,
898 _In_ UINT crTransparent)
899{
902 FALSE,
903 hdcDst,
904 xDst,
905 yDst,
906 cxDst,
907 cyDst,
908 hdcSrc,
909 xSrc,
910 ySrc,
911 cxSrc,
912 cySrc,
913 crTransparent);
914
915 if ( GdiConvertAndCheckDC(hdcDst) == NULL ) return FALSE;
916
917 return NtGdiTransparentBlt(hdcDst, xDst, yDst, cxDst, cyDst, hdcSrc, xSrc, ySrc, cxSrc, cySrc, crTransparent);
918}
919
920/*
921 * @implemented
922 */
923BOOL
924WINAPI
926 _In_ HDC hdc,
930 _In_ ULONG nCount,
932{
934
935 HANDLE_EMETAFDC(BOOL, GradientFill, FALSE, hdc, pVertex, nVertex, pMesh, nCount, ulMode);
936
937 if ( GdiConvertAndCheckDC(hdc) == NULL ) return FALSE;
938
939 return NtGdiGradientFill(hdc, pVertex, nVertex, pMesh, nCount, ulMode);
940}
static HRGN hrgn
#define ERROR_NOT_ENOUGH_MEMORY
Definition: dderror.h:7
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define GetProcessHeap()
Definition: compat.h:736
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
#define SetLastError(x)
Definition: compat.h:752
#define HeapAlloc
Definition: compat.h:733
#define HeapFree(x, y, z)
Definition: compat.h:735
return ret
Definition: mutex.c:146
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
HDC WINAPI GdiConvertAndCheckDC(HDC hdc)
Definition: dc.c:403
FORCEINLINE PVOID GdiAllocBatchCommand(HDC hdc, USHORT Cmd)
Definition: gdi32p.h:407
BOOL WINAPI GdiValidateHandle(HGDIOBJ)
Definition: misc.c:712
#define HANDLE_METADC(_RetType, _Func, dwError, hdc,...)
Definition: gdi32p.h:615
#define ROP_USES_SOURCE(Rop)
Definition: gdi32p.h:88
FORCEINLINE PDC_ATTR GdiGetDcAttr(HDC hdc)
Definition: gdi32p.h:477
#define HANDLE_EMETAFDC(_RetType, _Func, dwError, hdc,...)
Definition: gdi32p.h:670
BOOL WINAPI RoundRect(_In_ HDC hdc, _In_ INT left, _In_ INT top, _In_ INT right, _In_ INT bottom, _In_ INT width, _In_ INT height)
Definition: painting.c:111
BOOL WINAPI PlgBlt(_In_ HDC hdcDest, _In_reads_(3) const POINT *ppt, _In_ HDC hdcSrc, _In_ INT xSrc, _In_ INT ySrc, _In_ INT cx, _In_ INT cy, _In_opt_ HBITMAP hbmMask, _In_ INT xMask, _In_ INT yMask)
Definition: painting.c:790
BOOL WINAPI FrameRgn(_In_ HDC hdc, _In_ HRGN hrgn, _In_ HBRUSH hbr, _In_ INT nWidth, _In_ INT nHeight)
Definition: painting.c:205
BOOL WINAPI ExtFloodFill(_In_ HDC hdc, _In_ INT xStart, _In_ INT yStart, _In_ COLORREF crFill, _In_ UINT fuFillType)
Definition: painting.c:477
BOOL WINAPI PolyBezier(_In_ HDC hdc, _In_reads_(cpt) const POINT *apt, _In_ DWORD cpt)
Definition: painting.c:263
BOOL WINAPI MoveToEx(_In_ HDC hdc, _In_ INT x, _In_ INT y, _Out_opt_ LPPOINT ppt)
Definition: painting.c:24
BOOL WINAPI Polyline(_In_ HDC hdc, _In_reads_(cpt) const POINT *apt, _In_ INT cpt)
Definition: painting.c:379
BOOL WINAPI PolylineTo(_In_ HDC hdc, _In_reads_(cpt) const POINT *apt, _In_ DWORD cpt)
Definition: painting.c:397
BOOL WINAPI FillRgn(_In_ HDC hdc, _In_ HRGN hrgn, _In_ HBRUSH hbr)
Definition: painting.c:183
COLORREF WINAPI SetPixel(_In_ HDC hdc, _In_ INT x, _In_ INT y, _In_ COLORREF crColor)
Definition: painting.c:149
BOOL WINAPI GdiTransparentBlt(_In_ HDC hdcDst, _In_ INT xDst, _In_ INT yDst, _In_ INT cxDst, _In_ INT cyDst, _In_ HDC hdcSrc, _In_ INT xSrc, _In_ INT ySrc, _In_ INT cxSrc, _In_ INT cySrc, _In_ UINT crTransparent)
Definition: painting.c:887
BOOL WINAPI InvertRgn(_In_ HDC hdc, _In_ HRGN hrgn)
Definition: painting.c:229
BOOL WINAPI PolyBezierTo(_In_ HDC hdc, _In_reads_(cpt) const POINT *apt, _In_ DWORD cpt)
Definition: painting.c:281
COLORREF WINAPI GetPixel(_In_ HDC hdc, _In_ INT x, _In_ INT y)
Definition: painting.c:133
BOOL WINAPI PatBlt(_In_ HDC hdc, _In_ INT nXLeft, _In_ INT nYLeft, _In_ INT nWidth, _In_ INT nHeight, _In_ DWORD dwRop)
Definition: painting.c:549
BOOL WINAPI PolyPolyline(_In_ HDC hdc, _In_ CONST POINT *apt, _In_reads_(csz) CONST DWORD *asz, _In_ DWORD csz)
Definition: painting.c:455
BOOL WINAPI GdiAlphaBlend(_In_ HDC hdcDst, _In_ INT xDst, _In_ INT yDst, _In_ INT cxDst, _In_ INT cyDst, _In_ HDC hdcSrc, _In_ INT xSrc, _In_ INT ySrc, _In_ INT cxSrc, _In_ INT cySrc, _In_ BLENDFUNCTION blendfn)
Definition: painting.c:833
BOOL WINAPI StretchBlt(_In_ HDC hdcDest, _In_ INT xDest, _In_ INT yDest, _In_ INT cxDest, _In_ INT cyDest, _In_opt_ HDC hdcSrc, _In_ INT xSrc, _In_ INT ySrc, _In_ INT cxSrc, _In_ INT cySrc, _In_ DWORD dwRop)
Definition: painting.c:687
BOOL WINAPI GdiGradientFill(_In_ HDC hdc, _In_reads_(nVertex) PTRIVERTEX pVertex, _In_ ULONG nVertex, _In_ PVOID pMesh, _In_ ULONG nCount, _In_ ULONG ulMode)
Definition: painting.c:925
BOOL WINAPI PolyDraw(_In_ HDC hdc, _In_reads_(cpt) const POINT *apt, _In_reads_(cpt) const BYTE *aj, _In_ INT cpt)
Definition: painting.c:342
BOOL WINAPI PaintRgn(_In_ HDC hdc, _In_ HRGN hrgn)
Definition: painting.c:250
BOOL WINAPI Ellipse(_In_ HDC hdc, _In_ INT left, _In_ INT top, _In_ INT right, _In_ INT bottom)
Definition: painting.c:71
BOOL WINAPI Rectangle(_In_ HDC hdc, _In_ INT left, _In_ INT top, _In_ INT right, _In_ INT bottom)
Definition: painting.c:91
BOOL WINAPI FloodFill(_In_ HDC hdc, _In_ INT xStart, _In_ INT yStart, _In_ COLORREF crFill)
Definition: painting.c:497
BOOL WINAPI BitBlt(_In_ HDC hdcDest, _In_ INT xDest, _In_ INT yDest, _In_ INT cx, _In_ INT cy, _In_opt_ HDC hdcSrc, _In_ INT xSrc, _In_ INT ySrc, _In_ DWORD dwRop)
Definition: painting.c:511
BOOL WINAPI Polygon(_In_ HDC hdc, _In_reads_(cpt) const POINT *apt, _In_ INT cpt)
Definition: painting.c:361
BOOL WINAPI PolyPolygon(_In_ HDC hdc, _In_ const POINT *apt, _In_reads_(csz) const INT *asz, _In_ INT csz)
Definition: painting.c:436
BOOL WINAPI MaskBlt(_In_ HDC hdcDest, _In_ INT xDest, _In_ INT yDest, _In_ INT cx, _In_ INT cy, _In_ HDC hdcSrc, _In_ INT xSrc, _In_ INT ySrc, _In_ HBITMAP hbmMask, _In_ INT xMask, _In_ INT yMask, _In_ DWORD dwRop)
Definition: painting.c:737
BOOL WINAPI LineTo(_In_ HDC hdc, _In_ INT x, _In_ INT y)
Definition: painting.c:9
BOOL WINAPI PolyPatBlt(_In_ HDC hdc, _In_ DWORD dwRop, _In_ PPOLYPATBLT pPoly, _In_ DWORD nCount, _In_ DWORD dwMode)
Definition: painting.c:594
BOOL WINAPI SetPixelV(_In_ HDC hdc, _In_ INT x, _In_ INT y, _In_ COLORREF crColor)
Definition: painting.c:168
#define GDI_OBJECT_TYPE_DC
Definition: gdi.h:46
#define GDI_HANDLE_GET_TYPE(h)
Definition: gdi.h:31
#define GDI_OBJECT_TYPE_METADC
Definition: gdi.h:57
@ GDILoObjType_LO_METADC16_TYPE
Definition: gdi_private.h:49
@ GDILoObjType_LO_ALTDC_TYPE
Definition: gdi_private.h:43
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
GLint GLint GLsizei GLsizei height
Definition: gl.h:1546
GLint GLint GLsizei width
Definition: gl.h:1546
GLdouble GLdouble GLdouble GLdouble top
Definition: glext.h:10859
GLdouble GLdouble right
Definition: glext.h:10859
GLint left
Definition: glext.h:7726
GLint GLint bottom
Definition: glext.h:7726
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 NtCurrentTeb
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
HDC hdc
Definition: main.c:9
static HBITMAP
Definition: button.c:44
static HDC
Definition: imagelist.c:88
unsigned int UINT
Definition: ndis.h:50
#define _In_reads_(s)
Definition: no_sal2.h:168
#define _Out_opt_
Definition: no_sal2.h:214
#define _In_
Definition: no_sal2.h:158
#define _In_opt_
Definition: no_sal2.h:212
#define DC_DIBSECTION
Definition: ntgdihdl.h:137
#define DC_MODE_DIRTY
Definition: ntgdihdl.h:144
#define DIRTY_PTLCURRENT
Definition: ntgdihdl.h:131
#define DIRTY_STYLESTATE
Definition: ntgdihdl.h:133
#define DIRTY_PTFXCURRENT
Definition: ntgdihdl.h:132
#define GDIBATCHBUFSIZE
Definition: ntgdityp.h:200
struct _GDIBATCHHDR * PGDIBATCHHDR
struct _GDIBSPPATBLT GDIBSPPATBLT
@ GdiPolyPolygon
Definition: ntgdityp.h:38
@ GdiPolyPolyLine
Definition: ntgdityp.h:39
@ GdiPolyBezierTo
Definition: ntgdityp.h:42
@ GdiPolyLineTo
Definition: ntgdityp.h:41
@ GdiPolyBezier
Definition: ntgdityp.h:40
@ GdiBCPatBlt
Definition: ntgdityp.h:86
@ GdiBCPolyPatBlt
Definition: ntgdityp.h:87
#define OBJ_BRUSH
Definition: objidl.idl:1015
#define CONST
Definition: pedump.c:81
BYTE * PBYTE
Definition: pedump.c:66
unsigned short USHORT
Definition: pedump.c:61
_Out_opt_ int _Out_opt_ int * cy
Definition: commctrl.h:586
_Out_opt_ int * cx
Definition: commctrl.h:585
__kernel_entry W32KAPI BOOL APIENTRY NtGdiRoundRect(_In_ HDC hdc, _In_ INT x1, _In_ INT y1, _In_ INT x2, _In_ INT y2, _In_ INT x3, _In_ INT y3)
__kernel_entry W32KAPI BOOL APIENTRY NtGdiTransparentBlt(_In_ HDC hdcDst, _In_ INT xDst, _In_ INT yDst, _In_ INT cxDst, _In_ INT cyDst, _In_ HDC hdcSrc, _In_ INT xSrc, _In_ INT ySrc, _In_ INT cxSrc, _In_ INT cySrc, _In_ COLORREF TransColor)
__kernel_entry W32KAPI DWORD APIENTRY NtGdiGetPixel(_In_ HDC hdc, _In_ INT x, _In_ INT y)
Definition: bitblt.c:1515
__kernel_entry W32KAPI BOOL APIENTRY NtGdiInvertRgn(_In_ HDC hdc, _In_ HRGN hrgn)
Definition: bitblt.c:1380
__kernel_entry W32KAPI BOOL APIENTRY NtGdiPlgBlt(_In_ HDC hdcTrg, _In_reads_(3) LPPOINT pptlTrg, _In_ HDC hdcSrc, _In_ INT xSrc, _In_ INT ySrc, _In_ INT cxSrc, _In_ INT cySrc, _In_opt_ HBITMAP hbmMask, _In_ INT xMask, _In_ INT yMask, _In_ DWORD crBackColor)
__kernel_entry W32KAPI BOOL APIENTRY NtGdiAlphaBlend(_In_ HDC hdcDst, _In_ LONG DstX, _In_ LONG DstY, _In_ LONG DstCx, _In_ LONG DstCy, _In_ HDC hdcSrc, _In_ LONG SrcX, _In_ LONG SrcY, _In_ LONG SrcCx, _In_ LONG SrcCy, _In_ BLENDFUNCTION BlendFunction, _In_ HANDLE hcmXform)
__kernel_entry W32KAPI BOOL APIENTRY NtGdiFrameRgn(_In_ HDC hdc, _In_ HRGN hrgn, _In_ HBRUSH hbrush, _In_ INT xWidth, _In_ INT yHeight)
Definition: bitblt.c:1356
__kernel_entry W32KAPI BOOL APIENTRY NtGdiBitBlt(_In_ HDC hdcDst, _In_ INT x, _In_ INT y, _In_ INT cx, _In_ INT cy, _In_opt_ HDC hdcSrc, _In_ INT xSrc, _In_ INT ySrc, _In_ DWORD rop4, _In_ DWORD crBackColor, _In_ FLONG fl)
__kernel_entry W32KAPI BOOL APIENTRY NtGdiExtFloodFill(_In_ HDC hdc, _In_ INT x, _In_ INT y, _In_ COLORREF crColor, _In_ UINT iFillType)
__kernel_entry W32KAPI BOOL APIENTRY NtGdiGradientFill(_In_ HDC hdc, _In_ PTRIVERTEX pVertex, _In_ ULONG nVertex, _In_ PVOID pMesh, _In_ ULONG nMesh, _In_ ULONG ulMode)
__kernel_entry W32KAPI BOOL APIENTRY NtGdiMaskBlt(_In_ HDC hdc, _In_ INT xDst, _In_ INT yDst, _In_ INT cx, _In_ INT cy, _In_ HDC hdcSrc, _In_ INT xSrc, _In_ INT ySrc, _In_opt_ HBITMAP hbmMask, _In_ INT xMask, _In_ INT yMask, _In_ DWORD dwRop4, _In_ DWORD crBackColor)
__kernel_entry W32KAPI BOOL APIENTRY NtGdiRectangle(_In_ HDC hdc, _In_ INT xLeft, _In_ INT yTop, _In_ INT xRight, _In_ INT yBottom)
__kernel_entry W32KAPI BOOL APIENTRY NtGdiStretchBlt(_In_ HDC hdcDst, _In_ INT xDst, _In_ INT yDst, _In_ INT cxDst, _In_ INT cyDst, _In_opt_ HDC hdcSrc, _In_ INT xSrc, _In_ INT ySrc, _In_ INT cxSrc, _In_ INT cySrc, _In_ DWORD dwRop, _In_ DWORD dwBackColor)
__kernel_entry W32KAPI BOOL APIENTRY NtGdiFillRgn(_In_ HDC hdc, _In_ HRGN hrgn, _In_ HBRUSH hbrush)
Definition: bitblt.c:1299
__kernel_entry W32KAPI BOOL APIENTRY NtGdiPatBlt(_In_ HDC hdcDest, _In_ INT x, _In_ INT y, _In_ INT cx, _In_ INT cy, _In_ DWORD dwRop)
Definition: bitblt.c:988
__kernel_entry W32KAPI BOOL APIENTRY NtGdiPolyPatBlt(_In_ HDC hdc, _In_ DWORD rop4, _In_reads_(cPoly) PPOLYPATBLT pPoly, _In_ DWORD cPoly, _In_ DWORD dwMode)
__kernel_entry W32KAPI BOOL APIENTRY NtGdiPolyDraw(_In_ HDC hdc, _In_reads_(cpt) LPPOINT ppt, _In_reads_(cpt) LPBYTE pjAttr, _In_ ULONG cpt)
Definition: line.c:687
__kernel_entry W32KAPI BOOL APIENTRY NtGdiEllipse(_In_ HDC hdc, _In_ INT xLeft, _In_ INT yTop, _In_ INT xRight, _In_ INT yBottom)
__kernel_entry W32KAPI BOOL APIENTRY NtGdiLineTo(_In_ HDC hdc, _In_ INT x, _In_ INT y)
__kernel_entry W32KAPI COLORREF APIENTRY NtGdiSetPixel(_In_ HDC hdcDst, _In_ INT x, _In_ INT y, _In_ COLORREF crColor)
Definition: bitblt.c:1427
__kernel_entry W32KAPI ULONG_PTR APIENTRY NtGdiPolyPolyDraw(_In_ HDC hdc, _In_ PPOINT ppt, _In_reads_(ccpt) PULONG pcpt, _In_ ULONG ccpt, _In_ INT iFunc)
POINTL ptlCurrent
Definition: ntgdihdl.h:311
HANDLE hbrush
Definition: ntgdihdl.h:295
ULONG ulBrushClr
Definition: ntgdihdl.h:302
ULONG ulBackgroundClr
Definition: ntgdihdl.h:298
COLORREF crBrushClr
Definition: ntgdihdl.h:301
ULONG ulForegroundClr
Definition: ntgdihdl.h:300
COLORREF crForegroundClr
Definition: ntgdihdl.h:299
COLORREF crBackgroundClr
Definition: ntgdihdl.h:297
ULONG ulDirty_
Definition: ntgdihdl.h:294
POINTL ptfxCurrent
Definition: ntgdihdl.h:312
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
DWORD Mode
Definition: ntgdityp.h:492
COLORREF crBackgroundClr
Definition: ntgdityp.h:495
COLORREF crBrushClr
Definition: ntgdityp.h:496
ULONG Offset
Definition: compat.h:831
LONG y
Definition: windef.h:130
LONG x
Definition: windef.h:129
Definition: compat.h:836
GDI_TEB_BATCH GdiTebBatch
Definition: compat.h:857
ULONG GdiBatchCount
Definition: compat.h:887
long y
Definition: polytest.cpp:48
long x
Definition: polytest.cpp:48
uint32_t * PULONG
Definition: typedefs.h:59
int32_t INT
Definition: typedefs.h:58
#define RtlCopyMemory(Destination, Source, Length)
Definition: typedefs.h:263
uint32_t ULONG
Definition: typedefs.h:59
#define TransparentBlt
Definition: misc.c:292
#define AlphaBlend
Definition: misc.c:293
_In_ CLIPOBJ _In_opt_ XLATEOBJ _In_ TRIVERTEX _In_ ULONG _In_ PVOID pMesh
Definition: winddi.h:3653
_In_ CLIPOBJ _In_opt_ XLATEOBJ _In_ TRIVERTEX _In_ ULONG nVertex
Definition: winddi.h:3652
_In_ CLIPOBJ _In_opt_ XLATEOBJ _In_ TRIVERTEX _In_ ULONG _In_ PVOID _In_ ULONG _In_ RECTL _In_ POINTL _In_ ULONG ulMode
Definition: winddi.h:3657
_In_ ULONG cjSize
Definition: winddi.h:3634
_In_ CLIPOBJ _In_opt_ XLATEOBJ _In_ TRIVERTEX * pVertex
Definition: winddi.h:3651
DWORD COLORREF
Definition: windef.h:100
#define WINAPI
Definition: msvc.h:6
#define FLOODFILLBORDER
Definition: wingdi.h:644
HGDIOBJ WINAPI GetStockObject(_In_ int)
BOOL WINAPI GetCurrentPositionEx(_In_ HDC, _Out_ LPPOINT)
Definition: coord.c:241
BOOL WINAPI DPtoLP(_In_ HDC hdc, _Inout_updates_(c) LPPOINT lppt, _In_ int c)
HGDIOBJ WINAPI GetCurrentObject(_In_ HDC, _In_ UINT)
Definition: dc.c:428
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1546
#define CLR_INVALID
Definition: wingdi.h:883
static HDC hdcSrc
Definition: xlate.c:32
static HDC hdcDst
Definition: xlate.c:32
unsigned char BYTE
Definition: xxhash.c:193