ReactOS  0.4.14-dev-556-g4c5b21f
dc.c
Go to the documentation of this file.
1 /*
2  * Enhanced MetaFile driver dc value functions
3  *
4  * Copyright 1999 Huw D M Davies
5  * Copyright 2016 Alexandre Julliard
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with this library; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
20  */
21 
22 #include <assert.h>
24 
25 /* get the emf physdev from the path physdev */
26 static inline PHYSDEV get_emfdev( PHYSDEV path )
27 {
28  return &CONTAINING_RECORD( path, EMFDRV_PDEVICE, pathdev )->dev;
29 }
30 
31 static const struct gdi_dc_funcs emfpath_driver;
32 
34 {
36  INT ret = next->funcs->pSaveDC( next );
37 
38  if (ret)
39  {
40  EMRSAVEDC emr;
41  emr.emr.iType = EMR_SAVEDC;
42  emr.emr.nSize = sizeof(emr);
43  EMFDRV_WriteRecord( dev, &emr.emr );
44  }
45  return ret;
46 }
47 
49 {
51  EMFDRV_PDEVICE* physDev = get_emf_physdev( dev );
52  DC *dc = get_physdev_dc( dev );
53  EMRRESTOREDC emr;
54  BOOL ret;
55 
56  emr.emr.iType = EMR_RESTOREDC;
57  emr.emr.nSize = sizeof(emr);
58 
59  if (level < 0)
60  emr.iRelative = level;
61  else
62  emr.iRelative = level - dc->saveLevel - 1;
63 
64  physDev->restoring++;
65  ret = next->funcs->pRestoreDC( next, level );
66  physDev->restoring--;
67 
68  if (ret) EMFDRV_WriteRecord( dev, &emr.emr );
69  return ret;
70 }
71 
73 {
74  EMRSETTEXTALIGN emr;
76  emr.emr.nSize = sizeof(emr);
77  emr.iMode = align;
78  return EMFDRV_WriteRecord( dev, &emr.emr ) ? align : GDI_ERROR;
79 }
80 
81 BOOL EMFDRV_SetTextJustification(PHYSDEV dev, INT nBreakExtra, INT nBreakCount)
82 {
84  emr.emr.iType = EMR_SETTEXTJUSTIFICATION;
85  emr.emr.nSize = sizeof(emr);
86  emr.nBreakExtra = nBreakExtra;
87  emr.nBreakCount = nBreakCount;
88  return EMFDRV_WriteRecord(dev, &emr.emr);
89 }
90 
92 {
93  EMRSETBKMODE emr;
94  emr.emr.iType = EMR_SETBKMODE;
95  emr.emr.nSize = sizeof(emr);
96  emr.iMode = mode;
97  return EMFDRV_WriteRecord( dev, &emr.emr ) ? mode : 0;
98 }
99 
101 {
102  EMRSETBKCOLOR emr;
103  EMFDRV_PDEVICE *physDev = get_emf_physdev( dev );
104 
105  if (physDev->restoring) return color; /* don't output records during RestoreDC */
106 
107  emr.emr.iType = EMR_SETBKCOLOR;
108  emr.emr.nSize = sizeof(emr);
109  emr.crColor = color;
110  return EMFDRV_WriteRecord( dev, &emr.emr ) ? color : CLR_INVALID;
111 }
112 
113 
115 {
116  EMRSETTEXTCOLOR emr;
117  EMFDRV_PDEVICE *physDev = get_emf_physdev( dev );
118 
119  if (physDev->restoring) return color; /* don't output records during RestoreDC */
120 
121  emr.emr.iType = EMR_SETTEXTCOLOR;
122  emr.emr.nSize = sizeof(emr);
123  emr.crColor = color;
124  return EMFDRV_WriteRecord( dev, &emr.emr ) ? color : CLR_INVALID;
125 }
126 
128 {
129  EMRSETROP2 emr;
130  emr.emr.iType = EMR_SETROP2;
131  emr.emr.nSize = sizeof(emr);
132  emr.iMode = rop;
133  return EMFDRV_WriteRecord( dev, &emr.emr ) ? rop : 0;
134 }
135 
137 {
138  EMRSETPOLYFILLMODE emr;
140  emr.emr.nSize = sizeof(emr);
141  emr.iMode = mode;
142  return EMFDRV_WriteRecord( dev, &emr.emr ) ? mode : 0;
143 }
144 
146 {
149  emr.emr.nSize = sizeof(emr);
150  emr.iMode = mode;
151  return EMFDRV_WriteRecord( dev, &emr.emr ) ? mode : 0;
152 }
153 
155 {
156  EMRSETARCDIRECTION emr;
157 
159  emr.emr.nSize = sizeof(emr);
160  emr.iArcDirection = arcDirection;
161  return EMFDRV_WriteRecord(dev, &emr.emr) ? arcDirection : 0;
162 }
163 
165 {
167  EMREXCLUDECLIPRECT emr;
168 
170  emr.emr.nSize = sizeof(emr);
171  emr.rclClip.left = left;
172  emr.rclClip.top = top;
173  emr.rclClip.right = right;
174  emr.rclClip.bottom = bottom;
175  if (!EMFDRV_WriteRecord( dev, &emr.emr )) return ERROR;
176  return next->funcs->pExcludeClipRect( next, left, top, right, bottom );
177 }
178 
180 {
183 
185  emr.emr.nSize = sizeof(emr);
186  emr.rclClip.left = left;
187  emr.rclClip.top = top;
188  emr.rclClip.right = right;
189  emr.rclClip.bottom = bottom;
190  if (!EMFDRV_WriteRecord( dev, &emr.emr )) return ERROR;
191  return next->funcs->pIntersectClipRect( next, left, top, right, bottom );
192 }
193 
195 {
197  EMROFFSETCLIPRGN emr;
198 
200  emr.emr.nSize = sizeof(emr);
201  emr.ptlOffset.x = x;
202  emr.ptlOffset.y = y;
203  if (!EMFDRV_WriteRecord( dev, &emr.emr )) return ERROR;
204  return next->funcs->pOffsetClipRgn( next, x, y );
205 }
206 
208 {
210  EMREXTSELECTCLIPRGN *emr;
211  DWORD size, rgnsize;
212  BOOL ret;
213 
214  if (!hrgn)
215  {
216  if (mode != RGN_COPY) return ERROR;
217  rgnsize = 0;
218  }
219  else rgnsize = GetRegionData( hrgn, 0, NULL );
220 
221  size = rgnsize + offsetof(EMREXTSELECTCLIPRGN,RgnData);
222  emr = HeapAlloc( GetProcessHeap(), 0, size );
223  if (rgnsize) GetRegionData( hrgn, rgnsize, (RGNDATA *)&emr->RgnData );
224 
226  emr->emr.nSize = size;
227  emr->cbRgnData = rgnsize;
228  emr->iMode = mode;
229 
230  ret = EMFDRV_WriteRecord( dev, &emr->emr );
231  HeapFree( GetProcessHeap(), 0, emr );
232  return ret ? next->funcs->pExtSelectClipRgn( next, hrgn, mode ) : ERROR;
233 }
234 
236 {
238  EMRSETMAPMODE emr;
239  emr.emr.iType = EMR_SETMAPMODE;
240  emr.emr.nSize = sizeof(emr);
241  emr.iMode = mode;
242 
243  if (!EMFDRV_WriteRecord( dev, &emr.emr )) return 0;
244  return next->funcs->pSetMapMode( next, mode );
245 }
246 
248 {
251 
253  emr.emr.nSize = sizeof(emr);
254  emr.szlExtent.cx = cx;
255  emr.szlExtent.cy = cy;
256 
257  if (!EMFDRV_WriteRecord( dev, &emr.emr )) return FALSE;
258  return next->funcs->pSetViewportExtEx( next, cx, cy, size );
259 }
260 
262 {
264  EMRSETWINDOWEXTEX emr;
265 
267  emr.emr.nSize = sizeof(emr);
268  emr.szlExtent.cx = cx;
269  emr.szlExtent.cy = cy;
270 
271  if (!EMFDRV_WriteRecord( dev, &emr.emr )) return FALSE;
272  return next->funcs->pSetWindowExtEx( next, cx, cy, size );
273 }
274 
276 {
279 
281  emr.emr.nSize = sizeof(emr);
282  emr.ptlOrigin.x = x;
283  emr.ptlOrigin.y = y;
284 
285  if (!EMFDRV_WriteRecord( dev, &emr.emr )) return FALSE;
286  return next->funcs->pSetViewportOrgEx( next, x, y, pt );
287 }
288 
290 {
292  EMRSETWINDOWORGEX emr;
293 
295  emr.emr.nSize = sizeof(emr);
296  emr.ptlOrigin.x = x;
297  emr.ptlOrigin.y = y;
298 
299  if (!EMFDRV_WriteRecord( dev, &emr.emr )) return FALSE;
300  return next->funcs->pSetWindowOrgEx( next, x, y, pt );
301 }
302 
303 BOOL EMFDRV_ScaleViewportExtEx( PHYSDEV dev, INT xNum, INT xDenom, INT yNum, INT yDenom, SIZE *size )
304 {
307 
309  emr.emr.nSize = sizeof(emr);
310  emr.xNum = xNum;
311  emr.xDenom = xDenom;
312  emr.yNum = yNum;
313  emr.yDenom = yDenom;
314 
315  if (!EMFDRV_WriteRecord( dev, &emr.emr )) return FALSE;
316  return next->funcs->pScaleViewportExtEx( next, xNum, xDenom, yNum, yDenom, size );
317 }
318 
319 BOOL EMFDRV_ScaleWindowExtEx( PHYSDEV dev, INT xNum, INT xDenom, INT yNum, INT yDenom, SIZE *size )
320 {
323 
325  emr.emr.nSize = sizeof(emr);
326  emr.xNum = xNum;
327  emr.xDenom = xDenom;
328  emr.yNum = yNum;
329  emr.yDenom = yDenom;
330 
331  if (!EMFDRV_WriteRecord( dev, &emr.emr )) return FALSE;
332  return next->funcs->pScaleWindowExtEx( next, xNum, xDenom, yNum, yDenom, size );
333 }
334 
336 {
337  EMRSETLAYOUT emr;
338 
339  emr.emr.iType = EMR_SETLAYOUT;
340  emr.emr.nSize = sizeof(emr);
341  emr.iMode = layout;
342  return EMFDRV_WriteRecord( dev, &emr.emr ) ? layout : GDI_ERROR;
343 }
344 
346 {
349 
351  emr.emr.nSize = sizeof(emr);
352  emr.xform = *xform;
353 
354  if (!EMFDRV_WriteRecord( dev, &emr.emr )) return FALSE;
355  return next->funcs->pSetWorldTransform( next, xform );
356 }
357 
359 {
362 
364  emr.emr.nSize = sizeof(emr);
365  emr.xform = *xform;
366  emr.iMode = mode;
367 
368  if (!EMFDRV_WriteRecord( dev, &emr.emr )) return FALSE;
369  return next->funcs->pModifyWorldTransform( next, xform, mode );
370 }
371 
373 {
376  POINT prev;
377 
378  GetViewportOrgEx( dev->hdc, &prev );
379 
381  emr.emr.nSize = sizeof(emr);
382  emr.ptlOrigin.x = prev.x + x;
383  emr.ptlOrigin.y = prev.y + y;
384 
385  if (!EMFDRV_WriteRecord( dev, &emr.emr )) return FALSE;
386  return next->funcs->pOffsetViewportOrgEx( next, x, y, pt );
387 }
388 
390 {
392  EMRSETWINDOWORGEX emr;
393  POINT prev;
394 
395  GetWindowOrgEx( dev->hdc, &prev );
396 
398  emr.emr.nSize = sizeof(emr);
399  emr.ptlOrigin.x = prev.x + x;
400  emr.ptlOrigin.y = prev.y + y;
401 
402  if (!EMFDRV_WriteRecord( dev, &emr.emr )) return FALSE;
403  return next->funcs->pOffsetWindowOrgEx( next, x, y, pt );
404 }
405 
407 {
408  EMRSETMAPPERFLAGS emr;
409 
411  emr.emr.nSize = sizeof(emr);
412  emr.dwFlags = flags;
413 
414  return EMFDRV_WriteRecord( dev, &emr.emr ) ? flags : GDI_ERROR;
415 }
416 
418 {
419  EMRABORTPATH emr;
420 
421  emr.emr.iType = EMR_ABORTPATH;
422  emr.emr.nSize = sizeof(emr);
423 
424  return EMFDRV_WriteRecord( dev, &emr.emr );
425 }
426 
428 {
429  EMFDRV_PDEVICE *physDev = get_emf_physdev( dev );
431  EMRBEGINPATH emr;
432  DC *dc = get_physdev_dc( dev );
433 
434  emr.emr.iType = EMR_BEGINPATH;
435  emr.emr.nSize = sizeof(emr);
436 
437  if (!EMFDRV_WriteRecord( dev, &emr.emr )) return FALSE;
438  if (physDev->path) return TRUE; /* already open */
439 
440  if (!next->funcs->pBeginPath( next )) return FALSE;
441  push_dc_driver( &dc->physDev, &physDev->pathdev, &emfpath_driver );
442  physDev->path = TRUE;
443  return TRUE;
444 }
445 
447 {
448  EMRCLOSEFIGURE emr;
449 
450  emr.emr.iType = EMR_CLOSEFIGURE;
451  emr.emr.nSize = sizeof(emr);
452 
453  EMFDRV_WriteRecord( dev, &emr.emr );
454  return FALSE; /* always fails without a path */
455 }
456 
458 {
459  EMRENDPATH emr;
460 
461  emr.emr.iType = EMR_ENDPATH;
462  emr.emr.nSize = sizeof(emr);
463 
464  EMFDRV_WriteRecord( dev, &emr.emr );
465  return FALSE; /* always fails without a path */
466 }
467 
469 {
470  EMRFLATTENPATH emr;
471 
472  emr.emr.iType = EMR_FLATTENPATH;
473  emr.emr.nSize = sizeof(emr);
474 
475  return EMFDRV_WriteRecord( dev, &emr.emr );
476 }
477 
479 {
480  // PHYSDEV next = GET_NEXT_PHYSDEV( dev, pSelectClipPath ); This HACK breaks test_emf_clipping
481  EMRSELECTCLIPPATH emr;
482  // BOOL ret = FALSE;
483  // HRGN hrgn;
484 
486  emr.emr.nSize = sizeof(emr);
487  emr.iMode = iMode;
488 
489  if (!EMFDRV_WriteRecord( dev, &emr.emr )) return FALSE;
490 /* hrgn = PathToRegion( dev->hdc );
491  if (hrgn)
492  {
493  ret = next->funcs->pExtSelectClipRgn( next, hrgn, iMode );
494  DeleteObject( hrgn );
495  } ERR("EMFDRV_SelectClipPath ret %d\n",ret);
496  return ret;*/
497  return TRUE;
498 }
499 
501 {
502  EMRWIDENPATH emr;
503 
504  emr.emr.iType = EMR_WIDENPATH;
505  emr.emr.nSize = sizeof(emr);
506 
507  return EMFDRV_WriteRecord( dev, &emr.emr );
508 }
509 
511 {
512  EMFDRV_PDEVICE *physDev = get_emf_physdev( dev );
513 
514  return GetDeviceCaps( physDev->ref_dc, cap );
515 }
516 
517 
518 /***********************************************************************
519  * emfpathdrv_AbortPath
520  */
522 {
523  PHYSDEV emfdev = get_emfdev( dev );
525  DC *dc = get_physdev_dc( dev );
526 
528  emfdev->funcs->pAbortPath( emfdev );
529  return next->funcs->pAbortPath( next );
530 }
531 
532 /***********************************************************************
533  * emfpathdrv_AngleArc
534  */
536 {
537  PHYSDEV emfdev = get_emfdev( dev );
539 
540  return (emfdev->funcs->pAngleArc( emfdev, x, y, radius, start, sweep ) &&
541  next->funcs->pAngleArc( next, x, y, radius, start, sweep ));
542 }
543 
544 /***********************************************************************
545  * emfpathdrv_Arc
546  */
548  INT xstart, INT ystart, INT xend, INT yend )
549 {
550  PHYSDEV emfdev = get_emfdev( dev );
552 
553  return (emfdev->funcs->pArc( emfdev, left, top, right, bottom, xstart, ystart, xend, yend ) &&
554  next->funcs->pArc( next, left, top, right, bottom, xstart, ystart, xend, yend ));
555 }
556 
557 /***********************************************************************
558  * emfpathdrv_ArcTo
559  */
561  INT xstart, INT ystart, INT xend, INT yend )
562 {
563  PHYSDEV emfdev = get_emfdev( dev );
565 
566  return (emfdev->funcs->pArcTo( emfdev, left, top, right, bottom, xstart, ystart, xend, yend ) &&
567  next->funcs->pArcTo( next, left, top, right, bottom, xstart, ystart, xend, yend ));
568 }
569 
570 /***********************************************************************
571  * emfpathdrv_BeginPath
572  */
574 {
575  PHYSDEV emfdev = get_emfdev( dev );
577 
578  return (emfdev->funcs->pBeginPath( emfdev ) && next->funcs->pBeginPath( next ));
579 }
580 
581 /***********************************************************************
582  * emfpathdrv_Chord
583  */
585  INT xstart, INT ystart, INT xend, INT yend )
586 {
587  PHYSDEV emfdev = get_emfdev( dev );
589 
590  return (emfdev->funcs->pChord( emfdev, left, top, right, bottom, xstart, ystart, xend, yend ) &&
591  next->funcs->pChord( next, left, top, right, bottom, xstart, ystart, xend, yend ));
592 }
593 
594 /***********************************************************************
595  * emfpathdrv_CloseFigure
596  */
598 {
599  PHYSDEV emfdev = get_emfdev( dev );
601 
602  emfdev->funcs->pCloseFigure( emfdev );
603  return next->funcs->pCloseFigure( next );
604 }
605 
606 /***********************************************************************
607  * emfpathdrv_CreateDC
608  */
610  LPCWSTR output, const DEVMODEW *devmode )
611 {
612  assert( 0 ); /* should never be called */
613  return TRUE;
614 }
615 
616 /*************************************************************
617  * emfpathdrv_DeleteDC
618  */
620 {
621  EMFDRV_PDEVICE *physdev = (EMFDRV_PDEVICE *)get_emfdev( dev );
622 
623  physdev->path = FALSE;
624  return TRUE;
625 }
626 
627 /***********************************************************************
628  * emfpathdrv_Ellipse
629  */
631 {
632  PHYSDEV emfdev = get_emfdev( dev );
634 
635  return (emfdev->funcs->pEllipse( emfdev, x1, y1, x2, y2 ) &&
636  next->funcs->pEllipse( next, x1, y1, x2, y2 ));
637 }
638 
639 /***********************************************************************
640  * emfpathdrv_EndPath
641  */
643 {
644  PHYSDEV emfdev = get_emfdev( dev );
646  DC *dc = get_physdev_dc( dev );
647 
649  emfdev->funcs->pEndPath( emfdev );
650  return next->funcs->pEndPath( next );
651 }
652 
653 /***********************************************************************
654  * emfpathdrv_ExtTextOut
655  */
657  LPCWSTR str, UINT count, const INT *dx )
658 {
659  PHYSDEV emfdev = get_emfdev( dev );
661 
662  return (emfdev->funcs->pExtTextOut( emfdev, x, y, flags, rect, str, count, dx ) &&
663  next->funcs->pExtTextOut( next, x, y, flags, rect, str, count, dx ));
664 }
665 
666 /***********************************************************************
667  * emfpathdrv_LineTo
668  */
670 {
671  PHYSDEV emfdev = get_emfdev( dev );
673 
674  return (emfdev->funcs->pLineTo( emfdev, x, y ) && next->funcs->pLineTo( next, x, y ));
675 }
676 
677 /***********************************************************************
678  * emfpathdrv_MoveTo
679  */
681 {
682  PHYSDEV emfdev = get_emfdev( dev );
684 
685  return (emfdev->funcs->pMoveTo( emfdev, x, y ) && next->funcs->pMoveTo( next, x, y ));
686 }
687 
688 /***********************************************************************
689  * emfpathdrv_Pie
690  */
692  INT xstart, INT ystart, INT xend, INT yend )
693 {
694  PHYSDEV emfdev = get_emfdev( dev );
696 
697  return (emfdev->funcs->pPie( emfdev, left, top, right, bottom, xstart, ystart, xend, yend ) &&
698  next->funcs->pPie( next, left, top, right, bottom, xstart, ystart, xend, yend ));
699 }
700 
701 /***********************************************************************
702  * emfpathdrv_PolyBezier
703  */
705 {
706  PHYSDEV emfdev = get_emfdev( dev );
708 
709  return (emfdev->funcs->pPolyBezier( emfdev, pts, count ) &&
710  next->funcs->pPolyBezier( next, pts, count ));
711 }
712 
713 /***********************************************************************
714  * emfpathdrv_PolyBezierTo
715  */
717 {
718  PHYSDEV emfdev = get_emfdev( dev );
720 
721  return (emfdev->funcs->pPolyBezierTo( emfdev, pts, count ) &&
722  next->funcs->pPolyBezierTo( next, pts, count ));
723 }
724 
725 /***********************************************************************
726  * emfpathdrv_PolyDraw
727  */
728 static BOOL emfpathdrv_PolyDraw( PHYSDEV dev, const POINT *pts, const BYTE *types, DWORD count )
729 {
730  PHYSDEV emfdev = get_emfdev( dev );
732 
733  return (emfdev->funcs->pPolyDraw( emfdev, pts, types, count ) &&
734  next->funcs->pPolyDraw( next, pts, types, count ));
735 }
736 
737 /***********************************************************************
738  * emfpathdrv_PolyPolygon
739  */
740 static BOOL emfpathdrv_PolyPolygon( PHYSDEV dev, const POINT *pts, const INT *counts, UINT polygons )
741 {
742  PHYSDEV emfdev = get_emfdev( dev );
744 
745  return (emfdev->funcs->pPolyPolygon( emfdev, pts, counts, polygons ) &&
746  next->funcs->pPolyPolygon( next, pts, counts, polygons ));
747 }
748 
749 /***********************************************************************
750  * emfpathdrv_PolyPolyline
751  */
752 static BOOL emfpathdrv_PolyPolyline( PHYSDEV dev, const POINT *pts, const DWORD *counts, DWORD polylines )
753 {
754  PHYSDEV emfdev = get_emfdev( dev );
756 
757  return (emfdev->funcs->pPolyPolyline( emfdev, pts, counts, polylines ) &&
758  next->funcs->pPolyPolyline( next, pts, counts, polylines ));
759 }
760 
761 /***********************************************************************
762  * emfpathdrv_Polygon
763  */
765 {
766  PHYSDEV emfdev = get_emfdev( dev );
768 
769  return (emfdev->funcs->pPolygon( emfdev, pts, count ) &&
770  next->funcs->pPolygon( next, pts, count ));
771 }
772 
773 /***********************************************************************
774  * emfpathdrv_Polyline
775  */
777 {
778  PHYSDEV emfdev = get_emfdev( dev );
780 
781  return (emfdev->funcs->pPolyline( emfdev, pts, count ) &&
782  next->funcs->pPolyline( next, pts, count ));
783 }
784 
785 /***********************************************************************
786  * emfpathdrv_PolylineTo
787  */
789 {
790  PHYSDEV emfdev = get_emfdev( dev );
792 
793  return (emfdev->funcs->pPolylineTo( emfdev, pts, count ) &&
794  next->funcs->pPolylineTo( next, pts, count ));
795 }
796 
797 /***********************************************************************
798  * emfpathdrv_Rectangle
799  */
801 {
802  PHYSDEV emfdev = get_emfdev( dev );
804 
805  return (emfdev->funcs->pRectangle( emfdev, x1, y1, x2, y2 ) &&
806  next->funcs->pRectangle( next, x1, y1, x2, y2 ));
807 }
808 
809 /***********************************************************************
810  * emfpathdrv_RoundRect
811  */
813  INT ell_width, INT ell_height )
814 {
815  PHYSDEV emfdev = get_emfdev( dev );
817 
818  return (emfdev->funcs->pRoundRect( emfdev, x1, y1, x2, y2, ell_width, ell_height ) &&
819  next->funcs->pRoundRect( next, x1, y1, x2, y2, ell_width, ell_height ));
820 }
821 
822 static const struct gdi_dc_funcs emfpath_driver =
823 {
824  NULL, /* pAbortDoc */
825  emfpathdrv_AbortPath, /* pAbortPath */
826  NULL, /* pAlphaBlend */
827  emfpathdrv_AngleArc, /* pAngleArc */
828  emfpathdrv_Arc, /* pArc */
829  emfpathdrv_ArcTo, /* pArcTo */
830  emfpathdrv_BeginPath, /* pBeginPath */
831  NULL, /* pBlendImage */
832  emfpathdrv_Chord, /* pChord */
833  emfpathdrv_CloseFigure, /* pCloseFigure */
834  NULL, /* pCreateCompatibleDC */
835  emfpathdrv_CreateDC, /* pCreateDC */
836  emfpathdrv_DeleteDC, /* pDeleteDC */
837  NULL, /* pDeleteObject */
838  NULL, /* pDeviceCapabilities */
839  emfpathdrv_Ellipse, /* pEllipse */
840  NULL, /* pEndDoc */
841  NULL, /* pEndPage */
842  emfpathdrv_EndPath, /* pEndPath */
843  NULL, /* pEnumFonts */
844  NULL, /* pEnumICMProfiles */
845  NULL, /* pExcludeClipRect */
846  NULL, /* pExtDeviceMode */
847  NULL, /* pExtEscape */
848  NULL, /* pExtFloodFill */
849  NULL, /* pExtSelectClipRgn */
850  emfpathdrv_ExtTextOut, /* pExtTextOut */
851  NULL, /* pFillPath */
852  NULL, /* pFillRgn */
853  NULL, /* pFlattenPath */
854  NULL, /* pFontIsLinked */
855  NULL, /* pFrameRgn */
856  NULL, /* pGdiComment */
857  NULL, /* pGetBoundsRect */
858  NULL, /* pGetCharABCWidths */
859  NULL, /* pGetCharABCWidthsI */
860  NULL, /* pGetCharWidth */
861  NULL, /* pGetCharWidthInfo */
862 #ifdef __REACTOS__
864 #else
865  NULL, /* pGetDeviceCaps */
866 #endif
867  NULL, /* pGetDeviceGammaRamp */
868  NULL, /* pGetFontData */
869  NULL, /* pGetFontRealizationInfo */
870  NULL, /* pGetFontUnicodeRanges */
871  NULL, /* pGetGlyphIndices */
872  NULL, /* pGetGlyphOutline */
873  NULL, /* pGetICMProfile */
874  NULL, /* pGetImage */
875  NULL, /* pGetKerningPairs */
876  NULL, /* pGetNearestColor */
877  NULL, /* pGetOutlineTextMetrics */
878  NULL, /* pGetPixel */
879  NULL, /* pGetSystemPaletteEntries */
880  NULL, /* pGetTextCharsetInfo */
881  NULL, /* pGetTextExtentExPoint */
882  NULL, /* pGetTextExtentExPointI */
883  NULL, /* pGetTextFace */
884  NULL, /* pGetTextMetrics */
885  NULL, /* pGradientFill */
886  NULL, /* pIntersectClipRect */
887  NULL, /* pInvertRgn */
888  emfpathdrv_LineTo, /* pLineTo */
889  NULL, /* pModifyWorldTransform */
890  emfpathdrv_MoveTo, /* pMoveTo */
891  NULL, /* pOffsetClipRgn */
892  NULL, /* pOffsetViewportOrg */
893  NULL, /* pOffsetWindowOrg */
894  NULL, /* pPaintRgn */
895  NULL, /* pPatBlt */
896  emfpathdrv_Pie, /* pPie */
897  emfpathdrv_PolyBezier, /* pPolyBezier */
898  emfpathdrv_PolyBezierTo, /* pPolyBezierTo */
899  emfpathdrv_PolyDraw, /* pPolyDraw */
900  emfpathdrv_PolyPolygon, /* pPolyPolygon */
901  emfpathdrv_PolyPolyline, /* pPolyPolyline */
902  emfpathdrv_Polygon, /* pPolygon */
903  emfpathdrv_Polyline, /* pPolyline */
904  emfpathdrv_PolylineTo, /* pPolylineTo */
905  NULL, /* pPutImage */
906  NULL, /* pRealizeDefaultPalette */
907  NULL, /* pRealizePalette */
908  emfpathdrv_Rectangle, /* pRectangle */
909  NULL, /* pResetDC */
910  NULL, /* pRestoreDC */
911  emfpathdrv_RoundRect, /* pRoundRect */
912  NULL, /* pSaveDC */
913  NULL, /* pScaleViewportExt */
914  NULL, /* pScaleWindowExt */
915  NULL, /* pSelectBitmap */
916  NULL, /* pSelectBrush */
917  NULL, /* pSelectClipPath */
918  NULL, /* pSelectFont */
919  NULL, /* pSelectPalette */
920  NULL, /* pSelectPen */
921  NULL, /* pSetArcDirection */
922  NULL, /* pSetBkColor */
923  NULL, /* pSetBkMode */
924  NULL, /* pSetDCBrushColor */
925  NULL, /* pSetDCPenColor */
926  NULL, /* pSetDIBColorTable */
927  NULL, /* pSetDIBitsToDevice */
928  NULL, /* pSetDeviceClipping */
929  NULL, /* pSetDeviceGammaRamp */
930  NULL, /* pSetLayout */
931  NULL, /* pSetMapMode */
932  NULL, /* pSetMapperFlags */
933  NULL, /* pSetPixel */
934  NULL, /* pSetPolyFillMode */
935  NULL, /* pSetROP2 */
936  NULL, /* pSetRelAbs */
937  NULL, /* pSetStretchBltMode */
938  NULL, /* pSetTextAlign */
939  NULL, /* pSetTextCharacterExtra */
940  NULL, /* pSetTextColor */
941  NULL, /* pSetTextJustification */
942  NULL, /* pSetViewportExt */
943  NULL, /* pSetViewportOrg */
944  NULL, /* pSetWindowExt */
945  NULL, /* pSetWindowOrg */
946  NULL, /* pSetWorldTransform */
947  NULL, /* pStartDoc */
948  NULL, /* pStartPage */
949  NULL, /* pStretchBlt */
950  NULL, /* pStretchDIBits */
951  NULL, /* pStrokeAndFillPath */
952  NULL, /* pStrokePath */
953  NULL, /* pUnrealizePalette */
954  NULL, /* pWidenPath */
955  NULL, /* wine_get_wgl_driver */
956  GDI_PRIORITY_PATH_DRV + 1 /* priority */
957 };
COLORREF EMFDRV_SetTextColor(PHYSDEV dev, COLORREF color)
Definition: dc.c:114
_In_ CLIPOBJ _In_ BRUSHOBJ _In_ LONG _In_ LONG y1
Definition: winddi.h:3706
static BOOL emfpathdrv_EndPath(PHYSDEV dev)
Definition: dc.c:642
#define EMR_SETPOLYFILLMODE
Definition: wingdi.h:93
static BOOL emfpathdrv_Ellipse(PHYSDEV dev, INT x1, INT y1, INT x2, INT y2)
Definition: dc.c:630
BOOL(* pArcTo)(PHYSDEV, INT, INT, INT, INT, INT, INT, INT, INT)
Definition: gdi_driver.h:72
#define EMR_SETMAPMODE
Definition: wingdi.h:91
GLint level
Definition: gl.h:1546
#define EMR_SETARCDIRECTION
Definition: wingdi.h:131
#define push_dc_driver
Definition: gdi_private.h:200
#define TRUE
Definition: types.h:120
static UCHAR ULONG UCHAR ULONG UCHAR * output
Definition: bcrypt.c:29
BOOL EMFDRV_ModifyWorldTransform(PHYSDEV dev, const XFORM *xform, DWORD mode)
Definition: dc.c:358
BOOL(* pScaleViewportExtEx)(PHYSDEV, INT, INT, INT, INT, SIZE *)
Definition: gdi_driver.h:152
BOOL(* pRestoreDC)(PHYSDEV, INT)
Definition: gdi_driver.h:149
BOOL(* pPolyPolygon)(PHYSDEV, const POINT *, const INT *, UINT)
Definition: gdi_driver.h:139
long y
Definition: polytest.cpp:48
BOOL EMFDRV_WriteRecord(PHYSDEV dev, EMR *emr) DECLSPEC_HIDDEN
Definition: init.c:194
static BOOL emfpathdrv_PolyBezierTo(PHYSDEV dev, const POINT *pts, DWORD count)
Definition: dc.c:716
_In_ ULONG iMode
Definition: winddi.h:3520
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
static BOOL emfpathdrv_DeleteDC(PHYSDEV dev)
Definition: dc.c:619
long x
Definition: polytest.cpp:48
BOOL EMFDRV_SetWorldTransform(PHYSDEV dev, const XFORM *xform)
Definition: dc.c:345
BOOL WINAPI GetWindowOrgEx(_In_ HDC, _Out_ LPPOINT)
Definition: coord.c:439
BOOL(* pBeginPath)(PHYSDEV)
Definition: gdi_driver.h:73
#define pt(x, y)
Definition: drawing.c:79
INT(* pOffsetClipRgn)(PHYSDEV, INT, INT)
Definition: gdi_driver.h:130
BOOL(* pSetWorldTransform)(PHYSDEV, const XFORM *)
Definition: gdi_driver.h:185
#define ERROR(name)
Definition: error_private.h:53
GLuint GLuint GLsizei count
Definition: gl.h:1545
#define EMR_EXCLUDECLIPRECT
Definition: wingdi.h:103
_In_ CLIPOBJ _In_ BRUSHOBJ _In_ LONG x1
Definition: winddi.h:3706
BOOL(* pArc)(PHYSDEV, INT, INT, INT, INT, INT, INT, INT, INT)
Definition: gdi_driver.h:71
#define EMR_WIDENPATH
Definition: wingdi.h:140
BOOL(* pPie)(PHYSDEV, INT, INT, INT, INT, INT, INT, INT, INT)
Definition: gdi_driver.h:135
INT EMFDRV_IntersectClipRect(PHYSDEV dev, INT left, INT top, INT right, INT bottom)
Definition: dc.c:179
BOOL(* pLineTo)(PHYSDEV, INT, INT)
Definition: gdi_driver.h:127
static EMFDRV_PDEVICE * get_emf_physdev(PHYSDEV dev)
INT(* pExcludeClipRect)(PHYSDEV, INT, INT, INT, INT)
Definition: gdi_driver.h:88
#define CLR_INVALID
Definition: wingdi.h:882
long bottom
Definition: polytest.cpp:53
static BOOL emfpathdrv_Chord(PHYSDEV dev, INT left, INT top, INT right, INT bottom, INT xstart, INT ystart, INT xend, INT yend)
Definition: dc.c:584
BOOL EMFDRV_CloseFigure(PHYSDEV dev)
Definition: dc.c:446
#define EMR_ENDPATH
Definition: wingdi.h:134
#define assert(x)
Definition: debug.h:53
BOOL EMFDRV_AbortPath(PHYSDEV dev)
Definition: dc.c:417
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
BOOL(* pPolylineTo)(PHYSDEV, const POINT *, INT)
Definition: gdi_driver.h:143
INT EMFDRV_ExtSelectClipRgn(PHYSDEV dev, HRGN hrgn, INT mode)
Definition: dc.c:207
BOOL EMFDRV_SetTextJustification(PHYSDEV dev, INT nBreakExtra, INT nBreakCount)
Definition: dc.c:81
BOOL(* pPolyBezier)(PHYSDEV, const POINT *, DWORD)
Definition: gdi_driver.h:136
INT EMFDRV_SetMapMode(PHYSDEV dev, INT mode)
Definition: dc.c:235
BOOL(* pRectangle)(PHYSDEV, INT, INT, INT, INT)
Definition: gdi_driver.h:147
static BOOL emfpathdrv_Rectangle(PHYSDEV dev, INT x1, INT y1, INT x2, INT y2)
Definition: dc.c:800
INT(* pSetMapMode)(PHYSDEV, INT)
Definition: gdi_driver.h:170
int align(int length, int align)
Definition: dsound8.c:36
#define EMR_ABORTPATH
Definition: wingdi.h:142
static const struct gdi_dc_funcs emfpath_driver
Definition: dc.c:31
BOOL(* pSetViewportOrgEx)(PHYSDEV, INT, INT, POINT *)
Definition: gdi_driver.h:182
#define EMR_SETTEXTCOLOR
Definition: wingdi.h:98
BOOL(* pAngleArc)(PHYSDEV, INT, INT, DWORD, FLOAT, FLOAT)
Definition: gdi_driver.h:70
BOOL(* pOffsetWindowOrgEx)(PHYSDEV, INT, INT, POINT *)
Definition: gdi_driver.h:132
#define EMR_SETTEXTALIGN
Definition: wingdi.h:96
BOOL(* pPolyBezierTo)(PHYSDEV, const POINT *, DWORD)
Definition: gdi_driver.h:137
BOOL(* pPolyDraw)(PHYSDEV, const POINT *, const BYTE *, DWORD)
Definition: gdi_driver.h:138
int32_t INT
Definition: typedefs.h:56
BOOL(* pPolyPolyline)(PHYSDEV, const POINT *, const DWORD *, DWORD)
Definition: gdi_driver.h:140
static BOOL emfpathdrv_Polyline(PHYSDEV dev, const POINT *pts, INT count)
Definition: dc.c:776
& rect
Definition: startmenu.cpp:1413
BOOL(* pExtTextOut)(PHYSDEV, INT, INT, UINT, const RECT *, LPCWSTR, UINT, const INT *)
Definition: gdi_driver.h:93
BOOL(* pOffsetViewportOrgEx)(PHYSDEV, INT, INT, POINT *)
Definition: gdi_driver.h:131
LONG y
Definition: windef.h:330
#define EMR_SETVIEWPORTORGEX
Definition: wingdi.h:86
BOOL(* pPolygon)(PHYSDEV, const POINT *, INT)
Definition: gdi_driver.h:141
BOOL EMFDRV_RestoreDC(PHYSDEV dev, INT level)
Definition: dc.c:48
static BOOL emfpathdrv_AngleArc(PHYSDEV dev, INT x, INT y, DWORD radius, FLOAT start, FLOAT sweep)
Definition: dc.c:535
#define EMR_SETSTRETCHBLTMODE
Definition: wingdi.h:95
BOOL(* pPolyline)(PHYSDEV, const POINT *, INT)
Definition: gdi_driver.h:142
long right
Definition: polytest.cpp:53
#define GET_NEXT_PHYSDEV(dev, func)
Definition: gdi_driver.h:215
BOOL(* pModifyWorldTransform)(PHYSDEV, const XFORM *, DWORD)
Definition: gdi_driver.h:128
static BOOL emfpathdrv_PolyPolygon(PHYSDEV dev, const POINT *pts, const INT *counts, UINT polygons)
Definition: dc.c:740
INT EMFDRV_GetDeviceCaps(PHYSDEV dev, INT cap)
Definition: dc.c:510
BOOL(* pSetViewportExtEx)(PHYSDEV, INT, INT, SIZE *)
Definition: gdi_driver.h:181
BOOL EMFDRV_ScaleViewportExtEx(PHYSDEV dev, INT xNum, INT xDenom, INT yNum, INT yDenom, SIZE *size)
Definition: dc.c:303
GLenum cap
Definition: glext.h:9639
DWORD EMFDRV_SetMapperFlags(PHYSDEV dev, DWORD flags)
Definition: dc.c:406
COLORREF EMFDRV_SetBkColor(PHYSDEV dev, COLORREF color)
Definition: dc.c:100
#define EMR_INTERSECTCLIPRECT
Definition: wingdi.h:104
unsigned int BOOL
Definition: ntddk_ex.h:94
GLuint color
Definition: glext.h:6243
Definition: devices.h:37
BOOL EMFDRV_SetViewportOrgEx(PHYSDEV dev, INT x, INT y, POINT *pt)
Definition: dc.c:275
long top
Definition: polytest.cpp:53
#define EMR_RESTOREDC
Definition: wingdi.h:108
static int rop(int rop, int src, int dst)
Definition: nanoxwin.c:124
static BOOL emfpathdrv_PolyBezier(PHYSDEV dev, const POINT *pts, DWORD count)
Definition: dc.c:704
INT(* pExtSelectClipRgn)(PHYSDEV, HRGN, INT)
Definition: gdi_driver.h:92
BOOL(* pEllipse)(PHYSDEV, INT, INT, INT, INT)
Definition: gdi_driver.h:82
int WINAPI GetDeviceCaps(_In_ HDC hdc, _In_ int nIndex)
Definition: dc.c:561
INT EMFDRV_SetBkMode(PHYSDEV dev, INT mode)
Definition: dc.c:91
_Out_opt_ int _Out_opt_ int * cy
Definition: commctrl.h:581
BOOL(* pRoundRect)(PHYSDEV, INT, INT, INT, INT, INT, INT)
Definition: gdi_driver.h:150
const WCHAR * str
smooth NULL
Definition: ftsmooth.c:416
BOOL(* pAbortPath)(PHYSDEV)
Definition: gdi_driver.h:68
#define offsetof(TYPE, MEMBER)
static BOOL emfpathdrv_PolyPolyline(PHYSDEV dev, const POINT *pts, const DWORD *counts, DWORD polylines)
Definition: dc.c:752
INT EMFDRV_SetStretchBltMode(PHYSDEV dev, INT mode)
Definition: dc.c:145
static BOOL emfpathdrv_LineTo(PHYSDEV dev, INT x, INT y)
Definition: dc.c:669
LONG cx
Definition: windef.h:334
static BOOL emfpathdrv_Arc(PHYSDEV dev, INT left, INT top, INT right, INT bottom, INT xstart, INT ystart, INT xend, INT yend)
Definition: dc.c:547
GLint GLint bottom
Definition: glext.h:7726
static BOOL emfpathdrv_CreateDC(PHYSDEV *dev, LPCWSTR driver, LPCWSTR device, LPCWSTR output, const DEVMODEW *devmode)
Definition: dc.c:609
BOOL(* pEndPath)(PHYSDEV)
Definition: gdi_driver.h:85
BOOL EMFDRV_SelectClipPath(PHYSDEV dev, INT iMode)
Definition: dc.c:478
#define EMR_SETMAPPERFLAGS
Definition: wingdi.h:90
long left
Definition: polytest.cpp:53
#define GDI_PRIORITY_PATH_DRV
Definition: gdi_driver.h:207
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
Definition: Messaging.c:560
COLORREF crColor
Definition: wingdi.h:2180
BOOL(* pSetWindowOrgEx)(PHYSDEV, INT, INT, POINT *)
Definition: gdi_driver.h:184
#define EMR_MODIFYWORLDTRANSFORM
Definition: wingdi.h:110
static DWORD layout
Definition: dc.c:42
INT EMFDRV_SaveDC(PHYSDEV dev)
Definition: dc.c:33
static BOOL emfpathdrv_ArcTo(PHYSDEV dev, INT left, INT top, INT right, INT bottom, INT xstart, INT ystart, INT xend, INT yend)
Definition: dc.c:560
#define EMR_SETROP2
Definition: wingdi.h:94
Definition: polytest.cpp:40
GLsizeiptr size
Definition: glext.h:5919
#define GetProcessHeap()
Definition: compat.h:403
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
BOOL EMFDRV_OffsetWindowOrgEx(PHYSDEV dev, INT x, INT y, POINT *pt)
Definition: dc.c:389
Definition: cmds.c:130
DEVMODEW devmode
DWORD COLORREF
Definition: windef.h:300
struct gdi_physdev pathdev
BOOL WINAPI GetViewportOrgEx(_In_ HDC, _Out_ LPPOINT)
Definition: coord.c:383
unsigned long DWORD
Definition: ntddk_ex.h:95
#define EMR_SCALEWINDOWEXTEX
Definition: wingdi.h:106
GLint left
Definition: glext.h:7726
LONG x
Definition: windef.h:329
BOOL EMFDRV_OffsetViewportOrgEx(PHYSDEV dev, INT x, INT y, POINT *pt)
Definition: dc.c:372
INT(* pSaveDC)(PHYSDEV)
Definition: gdi_driver.h:151
#define EMR_SELECTCLIPPATH
Definition: wingdi.h:141
GLdouble GLdouble right
Definition: glext.h:10859
static PHYSDEV get_emfdev(PHYSDEV path)
Definition: dc.c:26
GLbitfield flags
Definition: glext.h:7161
static PHYSDEV pop_dc_driver(DC *dc, const struct gdi_dc_funcs *funcs)
Definition: gdi_private.h:145
static BOOL emfpathdrv_CloseFigure(PHYSDEV dev)
Definition: dc.c:597
static BOOL emfpathdrv_AbortPath(PHYSDEV dev)
Definition: dc.c:521
int ret
DWORD nSize
Definition: wingdi.h:1690
BOOL(* pScaleWindowExtEx)(PHYSDEV, INT, INT, INT, INT, SIZE *)
Definition: gdi_driver.h:153
BOOL EMFDRV_FlattenPath(PHYSDEV dev)
Definition: dc.c:468
static HRGN hrgn
Definition: win.c:55
unsigned char BYTE
Definition: mem.h:68
BOOL(* pMoveTo)(PHYSDEV, INT, INT)
Definition: gdi_driver.h:129
INT EMFDRV_SetArcDirection(PHYSDEV dev, INT arcDirection)
Definition: dc.c:154
_In_ CLIPOBJ _In_ BRUSHOBJ _In_ LONG _In_ LONG _In_ LONG _In_ LONG y2
Definition: winddi.h:3706
GLenum mode
Definition: glext.h:6217
#define EMR_SCALEVIEWPORTEXTEX
Definition: wingdi.h:105
#define EMR_SETWINDOWEXTEX
Definition: wingdi.h:83
#define EMR_SETBKMODE
Definition: wingdi.h:92
#define RGN_COPY
Definition: wingdi.h:356
static BOOL emfpathdrv_PolyDraw(PHYSDEV dev, const POINT *pts, const BYTE *types, DWORD count)
Definition: dc.c:728
INT EMFDRV_SetROP2(PHYSDEV dev, INT rop)
Definition: dc.c:127
#define EMR_CLOSEFIGURE
Definition: wingdi.h:135
struct @1623::@1624 driver
DWORD iType
Definition: wingdi.h:1689
static unsigned __int64 next
Definition: rand_nt.c:6
#define EMR_FLATTENPATH
Definition: wingdi.h:139
GLuint start
Definition: gl.h:1545
static BOOL emfpathdrv_BeginPath(PHYSDEV dev)
Definition: dc.c:573
WINEDC * get_physdev_dc(PHYSDEV dev)
Definition: rosglue.c:191
BOOL(* pCloseFigure)(PHYSDEV)
Definition: gdi_driver.h:76
INT EMFDRV_SetPolyFillMode(PHYSDEV dev, INT mode)
Definition: dc.c:136
static BOOL emfpathdrv_MoveTo(PHYSDEV dev, INT x, INT y)
Definition: dc.c:680
unsigned int UINT
Definition: ndis.h:50
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
GLint dx
Definition: linetemp.h:97
BOOL EMFDRV_SetWindowExtEx(PHYSDEV dev, INT cx, INT cy, SIZE *size)
Definition: dc.c:261
_In_ CLIPOBJ _In_ BRUSHOBJ _In_ LONG _In_ LONG _In_ LONG x2
Definition: winddi.h:3706
static BOOL emfpathdrv_Polygon(PHYSDEV dev, const POINT *pts, INT count)
Definition: dc.c:764
_Out_opt_ int * cx
Definition: commctrl.h:581
static BOOL emfpathdrv_Pie(PHYSDEV dev, INT left, INT top, INT right, INT bottom, INT xstart, INT ystart, INT xend, INT yend)
Definition: dc.c:691
float FLOAT
Definition: typedefs.h:67
BOOL EMFDRV_BeginPath(PHYSDEV dev)
Definition: dc.c:427
BOOL EMFDRV_WidenPath(PHYSDEV dev)
Definition: dc.c:500
#define EMR_SETBKCOLOR
Definition: wingdi.h:99
#define EMR_BEGINPATH
Definition: wingdi.h:133
INT(* pIntersectClipRect)(PHYSDEV, INT, INT, INT, INT)
Definition: gdi_driver.h:125
#define EMR_SETWORLDTRANSFORM
Definition: wingdi.h:109
BOOL EMFDRV_SetWindowOrgEx(PHYSDEV dev, INT x, INT y, POINT *pt)
Definition: dc.c:289
static const WCHAR dc[]
static BOOL emfpathdrv_PolylineTo(PHYSDEV dev, const POINT *pts, INT count)
Definition: dc.c:788
#define EMR_SETVIEWPORTEXTEX
Definition: wingdi.h:85
LONG iRelative
Definition: wingdi.h:2150
const struct gdi_dc_funcs * funcs
Definition: gdi_driver.h:31
GLdouble GLdouble GLdouble GLdouble top
Definition: glext.h:10859
#define EMR_SETWINDOWORGEX
Definition: wingdi.h:84
static BOOL emfpathdrv_RoundRect(PHYSDEV dev, INT x1, INT y1, INT x2, INT y2, INT ell_width, INT ell_height)
Definition: dc.c:812
UINT EMFDRV_SetTextAlign(PHYSDEV dev, UINT align)
Definition: dc.c:72
#define GDI_ERROR
Definition: wingdi.h:1308
INT EMFDRV_ExcludeClipRect(PHYSDEV dev, INT left, INT top, INT right, INT bottom)
Definition: dc.c:164
BOOL EMFDRV_EndPath(PHYSDEV dev)
Definition: dc.c:457
LONG cy
Definition: windef.h:335
BOOL(* pChord)(PHYSDEV, INT, INT, INT, INT, INT, INT, INT, INT)
Definition: gdi_driver.h:75
INT EMFDRV_OffsetClipRgn(PHYSDEV dev, INT x, INT y)
Definition: dc.c:194
static BOOL emfpathdrv_ExtTextOut(PHYSDEV dev, INT x, INT y, UINT flags, const RECT *rect, LPCWSTR str, UINT count, const INT *dx)
Definition: dc.c:656
DWORD WINAPI GetRegionData(_In_ HRGN hrgn, _In_ DWORD nCount, _Out_writes_bytes_to_opt_(nCount, return) LPRGNDATA lpRgnData)
BOOL EMFDRV_ScaleWindowExtEx(PHYSDEV dev, INT xNum, INT xDenom, INT yNum, INT yDenom, SIZE *size)
Definition: dc.c:319
#define HeapFree(x, y, z)
Definition: compat.h:402
#define EMR_EXTSELECTCLIPRGN
Definition: wingdi.h:148
BOOL EMFDRV_SetViewportExtEx(PHYSDEV dev, INT cx, INT cy, SIZE *size)
Definition: dc.c:247
#define EMR_SAVEDC
Definition: wingdi.h:107
DWORD EMFDRV_SetLayout(PHYSDEV dev, DWORD layout)
Definition: dc.c:335
BOOL(* pSetWindowExtEx)(PHYSDEV, INT, INT, SIZE *)
Definition: gdi_driver.h:183
#define EMR_OFFSETCLIPRGN
Definition: wingdi.h:100