xref: /reactos/win32ss/gdi/gdi32/wine/path.c (revision 333b8f19)
1 //
2 //
3 // Do not remove this file, "Justin Case" future maintenance issues with Path arises.......
4 //
5 //
6 
7 #include <precomp.h>
8 #include "gdi_private.h"
9 
10 #define NDEBUG
11 #include <debug.h>
12 
13 WINEDC *get_nulldrv_dc( PHYSDEV dev );
14 const struct gdi_dc_funcs path_driver DECLSPEC_HIDDEN;
15 
16 struct path_physdev
17 {
18     struct gdi_physdev dev;
19     //struct gdi_path   *path;
20     BOOL HasPathHook;
21 };
22 
get_path_physdev(PHYSDEV dev)23 static inline struct path_physdev *get_path_physdev( PHYSDEV dev )
24 {
25     return CONTAINING_RECORD( dev, struct path_physdev, dev );
26 }
27 
28 /***********************************************************************
29  *           pathdrv_BeginPath
30  */
pathdrv_BeginPath(PHYSDEV dev)31 static BOOL pathdrv_BeginPath( PHYSDEV dev )
32 {
33     DPRINT("pathdrv_BeginPath dev %p\n",dev);
34     return TRUE;
35 }
36 
37 
38 /***********************************************************************
39  *           pathdrv_AbortPath
40  */
pathdrv_AbortPath(PHYSDEV dev)41 static BOOL pathdrv_AbortPath( PHYSDEV dev )
42 {
43     DC *dc = get_physdev_dc( dev );
44     DPRINT("pathdrv_AbortPath dev %p\n",dev);
45     path_driver.pDeleteDC( pop_dc_driver( dc, &path_driver ));
46     return TRUE;
47 }
48 
49 
50 /***********************************************************************
51  *           pathdrv_EndPath
52  */
pathdrv_EndPath(PHYSDEV dev)53 static BOOL pathdrv_EndPath( PHYSDEV dev )
54 {
55     struct path_physdev *physdev = get_path_physdev( dev );
56     DC *dc = get_physdev_dc( dev );
57 
58     DPRINT("pathdrv_EndPath dev %p\n",dev);
59 
60     pop_dc_driver( dc, &path_driver );
61     HeapFree( GetProcessHeap(), 0, physdev );
62 
63     return TRUE;
64 }
65 
66 
67 /***********************************************************************
68  *           pathdrv_CreateDC
69  */
pathdrv_CreateDC(PHYSDEV * dev,LPCWSTR driver,LPCWSTR device,LPCWSTR output,const DEVMODEW * devmode)70 static BOOL pathdrv_CreateDC( PHYSDEV *dev, LPCWSTR driver, LPCWSTR device,
71                               LPCWSTR output, const DEVMODEW *devmode )
72 {
73     struct path_physdev *physdev = HeapAlloc( GetProcessHeap(), 0, sizeof(*physdev) );
74     DPRINT("pathdrv_CreateDC dev %p\n",dev);
75     if (!physdev) return FALSE;
76     push_dc_driver( dev, &physdev->dev, &path_driver );
77     return TRUE;
78 }
79 
80 
81 /*************************************************************
82  *           pathdrv_DeleteDC
83  */
pathdrv_DeleteDC(PHYSDEV dev)84 static BOOL pathdrv_DeleteDC( PHYSDEV dev )
85 {
86     struct path_physdev *physdev = get_path_physdev( dev );
87     DPRINT("pathdrv_DeleteDC dev %p\n",dev);
88     HeapFree( GetProcessHeap(), 0, physdev );
89     return TRUE;
90 }
91 
92 /*************************************************************
93  *           pathdrv_MoveTo
94  */
pathdrv_MoveTo(PHYSDEV dev,INT x,INT y)95 static BOOL pathdrv_MoveTo( PHYSDEV dev, INT x, INT y )
96 {
97 //    struct path_physdev *physdev = get_path_physdev( dev );
98 //    DC *dc = get_physdev_dc( dev );
99     DPRINT("pathdrv_MoveTo dev %p\n",dev);
100     return TRUE;
101 }
102 
103 
104 /*************************************************************
105  *           pathdrv_LineTo
106  */
pathdrv_LineTo(PHYSDEV dev,INT x,INT y)107 static BOOL pathdrv_LineTo( PHYSDEV dev, INT x, INT y )
108 {
109 //    struct path_physdev *physdev = get_path_physdev( dev );
110 //    DC *dc = get_physdev_dc( dev );
111     DPRINT("pathdrv_LineTo dev %p\n",dev);
112     return TRUE;
113 }
114 
115 
116 /*************************************************************
117  *           pathdrv_Rectangle
118  */
pathdrv_Rectangle(PHYSDEV dev,INT x1,INT y1,INT x2,INT y2)119 static BOOL pathdrv_Rectangle( PHYSDEV dev, INT x1, INT y1, INT x2, INT y2 )
120 {
121 //    struct path_physdev *physdev = get_path_physdev( dev );
122 //    DC *dc = get_physdev_dc( dev );
123     DPRINT("pathdrv_Rectangle dev %p\n",dev);
124     return TRUE;
125 }
126 
127 
128 /*************************************************************
129  *           pathdrv_RoundRect
130  */
pathdrv_RoundRect(PHYSDEV dev,INT x1,INT y1,INT x2,INT y2,INT ell_width,INT ell_height)131 static BOOL pathdrv_RoundRect( PHYSDEV dev, INT x1, INT y1, INT x2, INT y2, INT ell_width, INT ell_height )
132 {
133 //    struct path_physdev *physdev = get_path_physdev( dev );
134 //    DC *dc = get_physdev_dc( dev );
135     DPRINT("pathdrv_RoundRect dev %p\n",dev);
136     return TRUE;
137 }
138 
139 
140 /*************************************************************
141  *           pathdrv_Ellipse
142  */
pathdrv_Ellipse(PHYSDEV dev,INT x1,INT y1,INT x2,INT y2)143 static BOOL pathdrv_Ellipse( PHYSDEV dev, INT x1, INT y1, INT x2, INT y2 )
144 {
145 //    struct path_physdev *physdev = get_path_physdev( dev );
146 //    DC *dc = get_physdev_dc( dev );
147     DPRINT("pathdrv_Ellipse dev %p\n",dev);
148     return TRUE;
149 }
150 
151 /*************************************************************
152  *           pathdrv_AngleArc
153  */
pathdrv_AngleArc(PHYSDEV dev,INT x,INT y,DWORD radius,FLOAT eStartAngle,FLOAT eSweepAngle)154 static BOOL pathdrv_AngleArc( PHYSDEV dev, INT x, INT y, DWORD radius, FLOAT eStartAngle, FLOAT eSweepAngle)
155 {
156     DPRINT("pathdrv_AngleArc dev %p\n",dev);
157     return TRUE;
158 }
159 
160 
161 /*************************************************************
162  *           pathdrv_Arc
163  */
pathdrv_Arc(PHYSDEV dev,INT left,INT top,INT right,INT bottom,INT xstart,INT ystart,INT xend,INT yend)164 static BOOL pathdrv_Arc( PHYSDEV dev, INT left, INT top, INT right, INT bottom,
165                          INT xstart, INT ystart, INT xend, INT yend )
166 {
167 //    DC *dc = get_physdev_dc( dev );
168     DPRINT("pathdrv_Arc dev %p\n",dev);
169     return TRUE;
170 }
171 
172 
173 /*************************************************************
174  *           pathdrv_ArcTo
175  */
pathdrv_ArcTo(PHYSDEV dev,INT left,INT top,INT right,INT bottom,INT xstart,INT ystart,INT xend,INT yend)176 static BOOL pathdrv_ArcTo( PHYSDEV dev, INT left, INT top, INT right, INT bottom,
177                            INT xstart, INT ystart, INT xend, INT yend )
178 {
179 //    DC *dc = get_physdev_dc( dev );
180     DPRINT("pathdrv_ArcTo dev %p\n",dev);
181     return TRUE;
182 }
183 
184 
185 /*************************************************************
186  *           pathdrv_Chord
187  */
pathdrv_Chord(PHYSDEV dev,INT left,INT top,INT right,INT bottom,INT xstart,INT ystart,INT xend,INT yend)188 static BOOL pathdrv_Chord( PHYSDEV dev, INT left, INT top, INT right, INT bottom,
189                            INT xstart, INT ystart, INT xend, INT yend )
190 {
191 //    DC *dc = get_physdev_dc( dev );
192     DPRINT("pathdrv_Chord dev %p\n",dev);
193     return TRUE;
194 }
195 
196 
197 /*************************************************************
198  *           pathdrv_Pie
199  */
pathdrv_Pie(PHYSDEV dev,INT left,INT top,INT right,INT bottom,INT xstart,INT ystart,INT xend,INT yend)200 static BOOL pathdrv_Pie( PHYSDEV dev, INT left, INT top, INT right, INT bottom,
201                          INT xstart, INT ystart, INT xend, INT yend )
202 {
203 //    DC *dc = get_physdev_dc( dev );
204     DPRINT("pathdrv_Pie dev %p\n",dev);
205     return TRUE;
206 }
207 
208 
209 /*************************************************************
210  *           pathdrv_PolyBezierTo
211  */
pathdrv_PolyBezierTo(PHYSDEV dev,const POINT * pts,DWORD cbPoints)212 static BOOL pathdrv_PolyBezierTo( PHYSDEV dev, const POINT *pts, DWORD cbPoints )
213 {
214 //    struct path_physdev *physdev = get_path_physdev( dev );
215 //    DC *dc = get_physdev_dc( dev );
216     DPRINT("pathdrv_PolyBezierTo dev %p\n",dev);
217     return TRUE;
218 }
219 
220 
221 /*************************************************************
222  *           pathdrv_PolyBezier
223  */
pathdrv_PolyBezier(PHYSDEV dev,const POINT * pts,DWORD cbPoints)224 static BOOL pathdrv_PolyBezier( PHYSDEV dev, const POINT *pts, DWORD cbPoints )
225 {
226 //    struct path_physdev *physdev = get_path_physdev( dev );
227 //    DC *dc = get_physdev_dc( dev );
228     DPRINT("pathdrv_PolyBezier dev %p\n",dev);
229     return TRUE;
230 }
231 
232 
233 /*************************************************************
234  *           pathdrv_PolyDraw
235  */
pathdrv_PolyDraw(PHYSDEV dev,const POINT * pts,const BYTE * types,DWORD cbPoints)236 static BOOL pathdrv_PolyDraw( PHYSDEV dev, const POINT *pts, const BYTE *types, DWORD cbPoints )
237 {
238 //    struct path_physdev *physdev = get_path_physdev( dev );
239 //    DC *dc = get_physdev_dc( dev );
240     DPRINT("pathdrv_PolyDraw dev %p\n",dev);
241     return TRUE;
242 }
243 
244 
245 /*************************************************************
246  *           pathdrv_Polyline
247  */
pathdrv_Polyline(PHYSDEV dev,const POINT * pts,INT count)248 static BOOL pathdrv_Polyline( PHYSDEV dev, const POINT *pts, INT count )
249 {
250 //    struct path_physdev *physdev = get_path_physdev( dev );
251 //    DC *dc = get_physdev_dc( dev );
252     DPRINT("pathdrv_PolyLine dev %p\n",dev);
253     return TRUE;
254 }
255 
256 
257 /*************************************************************
258  *           pathdrv_PolylineTo
259  */
pathdrv_PolylineTo(PHYSDEV dev,const POINT * pts,INT count)260 static BOOL pathdrv_PolylineTo( PHYSDEV dev, const POINT *pts, INT count )
261 {
262 //    struct path_physdev *physdev = get_path_physdev( dev );
263 //    DC *dc = get_physdev_dc( dev );
264     DPRINT("pathdrv_PolyLineTo dev %p\n",dev);
265     return TRUE;
266 }
267 
268 
269 /*************************************************************
270  *           pathdrv_Polygon
271  */
pathdrv_Polygon(PHYSDEV dev,const POINT * pts,INT count)272 static BOOL pathdrv_Polygon( PHYSDEV dev, const POINT *pts, INT count )
273 {
274 //    struct path_physdev *physdev = get_path_physdev( dev );
275 //    DC *dc = get_physdev_dc( dev );
276     DPRINT("pathdrv_Polygon dev %p\n",dev);
277     return TRUE;
278 }
279 
280 
281 /*************************************************************
282  *           pathdrv_PolyPolygon
283  */
pathdrv_PolyPolygon(PHYSDEV dev,const POINT * pts,const INT * counts,UINT polygons)284 static BOOL pathdrv_PolyPolygon( PHYSDEV dev, const POINT* pts, const INT* counts, UINT polygons )
285 {
286 //    struct path_physdev *physdev = get_path_physdev( dev );
287 //    DC *dc = get_physdev_dc( dev );
288     DPRINT("pathdrv_PolyPolygon dev %p\n",dev);
289     return TRUE;
290 }
291 
292 
293 /*************************************************************
294  *           pathdrv_PolyPolyline
295  */
pathdrv_PolyPolyline(PHYSDEV dev,const POINT * pts,const DWORD * counts,DWORD polylines)296 static BOOL pathdrv_PolyPolyline( PHYSDEV dev, const POINT* pts, const DWORD* counts, DWORD polylines )
297 {
298 //    struct path_physdev *physdev = get_path_physdev( dev );
299 //    DC *dc = get_physdev_dc( dev );
300     DPRINT("pathdrv_PolyPolyline dev %p\n",dev);
301     return TRUE;
302 }
303 
304 
305 /*************************************************************
306  *           pathdrv_ExtTextOut
307  */
pathdrv_ExtTextOut(PHYSDEV dev,INT x,INT y,UINT flags,const RECT * lprc,LPCWSTR str,UINT count,const INT * dx)308 static BOOL pathdrv_ExtTextOut( PHYSDEV dev, INT x, INT y, UINT flags, const RECT *lprc,
309                                 LPCWSTR str, UINT count, const INT *dx )
310 {
311 //    struct path_physdev *physdev = get_path_physdev( dev );
312     DPRINT("pathdrv_ExtTextOut dev %p\n",dev);
313     return TRUE;
314 }
315 
316 /*************************************************************
317  *           pathdrv_CloseFigure
318  */
pathdrv_CloseFigure(PHYSDEV dev)319 static BOOL pathdrv_CloseFigure( PHYSDEV dev )
320 {
321 //    struct path_physdev *physdev = get_path_physdev( dev );
322     DPRINT("pathdrv_CloseFigure dev %p\n",dev);
323     return TRUE;
324 }
325 
326 
327 /***********************************************************************
328  *           null driver fallback implementations
329  */
330 
nulldrv_BeginPath(PHYSDEV dev)331 BOOL nulldrv_BeginPath( PHYSDEV dev )
332 {
333     DC *dc = get_nulldrv_dc( dev );
334     struct path_physdev *physdev;
335 
336     if (!path_driver.pCreateDC( &dc->physDev, NULL, NULL, NULL, NULL ))
337     {
338         return FALSE;
339     }
340     physdev = get_path_physdev( find_dc_driver( dc, &path_driver ));
341     physdev->HasPathHook = TRUE;
342     DPRINT("nulldrv_BeginPath dev %p\n",dev);
343     DPRINT("nulldrv_BeginPath pd %p\n",physdev);
344     return TRUE;
345 }
346 
nulldrv_EndPath(PHYSDEV dev)347 BOOL nulldrv_EndPath( PHYSDEV dev )
348 {
349     DPRINT("nulldrv_EndPath dev %p\n",dev);
350     SetLastError( ERROR_CAN_NOT_COMPLETE );
351     return FALSE;
352 }
353 
nulldrv_AbortPath(PHYSDEV dev)354 BOOL nulldrv_AbortPath( PHYSDEV dev )
355 {
356     //DC *dc = get_nulldrv_dc( dev );
357     DPRINT("nulldrv_AbortPath dev %p\n",dev);
358     //if (dc->path) free_gdi_path( dc->path );
359     //dc->path = NULL;
360     return TRUE;
361 }
362 
nulldrv_CloseFigure(PHYSDEV dev)363 BOOL nulldrv_CloseFigure( PHYSDEV dev )
364 {
365     DPRINT("nulldrv_CloseFigure dev %p\n",dev);
366     SetLastError( ERROR_CAN_NOT_COMPLETE );
367     return FALSE;
368 }
369 
nulldrv_SelectClipPath(PHYSDEV dev,INT mode)370 BOOL nulldrv_SelectClipPath( PHYSDEV dev, INT mode )
371 {
372     BOOL ret = FALSE;
373     HRGN hrgn = PathToRegion( dev->hdc );
374     DPRINT("nulldrv_SelectClipPath dev %p\n",dev);
375     if (hrgn)
376     {
377         ret = ExtSelectClipRgn( dev->hdc, hrgn, mode ) != ERROR;
378         DeleteObject( hrgn );
379     }
380     return ret;
381 //    return TRUE;
382 }
383 
nulldrv_FillPath(PHYSDEV dev)384 BOOL nulldrv_FillPath( PHYSDEV dev )
385 {
386     DPRINT("nulldrv_FillPath dev %p\n",dev);
387     //if (GetPath( dev->hdc, NULL, NULL, 0 ) == -1) return FALSE;
388     //AbortPath( dev->hdc );
389     return TRUE;
390 }
391 
nulldrv_StrokeAndFillPath(PHYSDEV dev)392 BOOL nulldrv_StrokeAndFillPath( PHYSDEV dev )
393 {
394     DPRINT("nulldrv_StrokeAndFillPath dev %p\n",dev);
395     //if (GetPath( dev->hdc, NULL, NULL, 0 ) == -1) return FALSE;
396     //AbortPath( dev->hdc );
397     return TRUE;
398 }
399 
nulldrv_StrokePath(PHYSDEV dev)400 BOOL nulldrv_StrokePath( PHYSDEV dev )
401 {
402     DPRINT("nulldrv_StrokePath dev %p\n",dev);
403     //if (GetPath( dev->hdc, NULL, NULL, 0 ) == -1) return FALSE;
404     //AbortPath( dev->hdc );
405     return TRUE;
406 }
407 
nulldrv_FlattenPath(PHYSDEV dev)408 BOOL nulldrv_FlattenPath( PHYSDEV dev )
409 {
410 /*    DC *dc = get_nulldrv_dc( dev );
411     struct gdi_path *path; */
412     DPRINT("nulldrv_FlattenPath dev %p\n",dev);
413 /*    if (!dc->path)
414     {
415         SetLastError( ERROR_CAN_NOT_COMPLETE );
416         return FALSE;
417     }
418     if (!(path = PATH_FlattenPath( dc->path ))) return FALSE;
419     free_gdi_path( dc->path );
420     dc->path = path;*/
421     return TRUE;
422 }
423 
nulldrv_WidenPath(PHYSDEV dev)424 BOOL nulldrv_WidenPath( PHYSDEV dev )
425 {
426 /*    DC *dc = get_nulldrv_dc( dev );
427     struct gdi_path *path;*/
428     DPRINT("nulldrv_WidenPath dev %p\n",dev);
429 /*    if (!dc->path)
430     {
431         SetLastError( ERROR_CAN_NOT_COMPLETE );
432         return FALSE;
433     }
434     if (!(path = PATH_WidenPath( dc ))) return FALSE;
435     free_gdi_path( dc->path );
436     dc->path = path;*/
437     return TRUE;
438 }
439 
440 const struct gdi_dc_funcs path_driver =
441 {
442     NULL,                               /* pAbortDoc */
443     pathdrv_AbortPath,                  /* pAbortPath */
444     NULL,                               /* pAlphaBlend */
445     pathdrv_AngleArc,                   /* pAngleArc */
446     pathdrv_Arc,                        /* pArc */
447     pathdrv_ArcTo,                      /* pArcTo */
448     pathdrv_BeginPath,                  /* pBeginPath */
449     NULL,                               /* pBlendImage */
450     pathdrv_Chord,                      /* pChord */
451     pathdrv_CloseFigure,                /* pCloseFigure */
452     NULL,                               /* pCreateCompatibleDC */
453     pathdrv_CreateDC,                   /* pCreateDC */
454     pathdrv_DeleteDC,                   /* pDeleteDC */
455     NULL,                               /* pDeleteObject */
456     NULL,                               /* pDeviceCapabilities */
457     pathdrv_Ellipse,                    /* pEllipse */
458     NULL,                               /* pEndDoc */
459     NULL,                               /* pEndPage */
460     pathdrv_EndPath,                    /* pEndPath */
461     NULL,                               /* pEnumFonts */
462     NULL,                               /* pEnumICMProfiles */
463     NULL,                               /* pExcludeClipRect */
464     NULL,                               /* pExtDeviceMode */
465     NULL,                               /* pExtEscape */
466     NULL,                               /* pExtFloodFill */
467     NULL,                               /* pExtSelectClipRgn */
468     pathdrv_ExtTextOut,                 /* pExtTextOut */
469     NULL,                               /* pFillPath */
470     NULL,                               /* pFillRgn */
471     NULL,                               /* pFlattenPath */
472     NULL,                               /* pFontIsLinked */
473     NULL,                               /* pFrameRgn */
474     NULL,                               /* pGdiComment */
475     NULL,                               /* pGetBoundsRect */
476     NULL,                               /* pGetCharABCWidths */
477     NULL,                               /* pGetCharABCWidthsI */
478     NULL,                               /* pGetCharWidth */
479     NULL,                               /* pGetCharWidthInfo */
480     NULL,                               /* pGetDeviceCaps */
481     NULL,                               /* pGetDeviceGammaRamp */
482     NULL,                               /* pGetFontData */
483     NULL,                               /* pGetFontRealizationInfo */
484     NULL,                               /* pGetFontUnicodeRanges */
485     NULL,                               /* pGetGlyphIndices */
486     NULL,                               /* pGetGlyphOutline */
487     NULL,                               /* pGetICMProfile */
488     NULL,                               /* pGetImage */
489     NULL,                               /* pGetKerningPairs */
490     NULL,                               /* pGetNearestColor */
491     NULL,                               /* pGetOutlineTextMetrics */
492     NULL,                               /* pGetPixel */
493     NULL,                               /* pGetSystemPaletteEntries */
494     NULL,                               /* pGetTextCharsetInfo */
495     NULL,                               /* pGetTextExtentExPoint */
496     NULL,                               /* pGetTextExtentExPointI */
497     NULL,                               /* pGetTextFace */
498     NULL,                               /* pGetTextMetrics */
499     NULL,                               /* pGradientFill */
500     NULL,                               /* pIntersectClipRect */
501     NULL,                               /* pInvertRgn */
502     pathdrv_LineTo,                     /* pLineTo */
503     NULL,                               /* pModifyWorldTransform */
504     pathdrv_MoveTo,                     /* pMoveTo */
505     NULL,                               /* pOffsetClipRgn */
506     NULL,                               /* pOffsetViewportOrg */
507     NULL,                               /* pOffsetWindowOrg */
508     NULL,                               /* pPaintRgn */
509     NULL,                               /* pPatBlt */
510     pathdrv_Pie,                        /* pPie */
511     pathdrv_PolyBezier,                 /* pPolyBezier */
512     pathdrv_PolyBezierTo,               /* pPolyBezierTo */
513     pathdrv_PolyDraw,                   /* pPolyDraw */
514     pathdrv_PolyPolygon,                /* pPolyPolygon */
515     pathdrv_PolyPolyline,               /* pPolyPolyline */
516     pathdrv_Polygon,                    /* pPolygon */
517     pathdrv_Polyline,                   /* pPolyline */
518     pathdrv_PolylineTo,                 /* pPolylineTo */
519     NULL,                               /* pPutImage */
520     NULL,                               /* pRealizeDefaultPalette */
521     NULL,                               /* pRealizePalette */
522     pathdrv_Rectangle,                  /* pRectangle */
523     NULL,                               /* pResetDC */
524     NULL,                               /* pRestoreDC */
525     pathdrv_RoundRect,                  /* pRoundRect */
526     NULL,                               /* pSaveDC */
527     NULL,                               /* pScaleViewportExt */
528     NULL,                               /* pScaleWindowExt */
529     NULL,                               /* pSelectBitmap */
530     NULL,                               /* pSelectBrush */
531     NULL,                               /* pSelectClipPath */
532     NULL,                               /* pSelectFont */
533     NULL,                               /* pSelectPalette */
534     NULL,                               /* pSelectPen */
535     NULL,                               /* pSetArcDirection */
536     NULL,                               /* pSetBkColor */
537     NULL,                               /* pSetBkMode */
538     NULL,                               /* pSetDCBrushColor */
539     NULL,                               /* pSetDCPenColor */
540     NULL,                               /* pSetDIBColorTable */
541     NULL,                               /* pSetDIBitsToDevice */
542     NULL,                               /* pSetDeviceClipping */
543     NULL,                               /* pSetDeviceGammaRamp */
544     NULL,                               /* pSetLayout */
545     NULL,                               /* pSetMapMode */
546     NULL,                               /* pSetMapperFlags */
547     NULL,                               /* pSetPixel */
548     NULL,                               /* pSetPolyFillMode */
549     NULL,                               /* pSetROP2 */
550     NULL,                               /* pSetRelAbs */
551     NULL,                               /* pSetStretchBltMode */
552     NULL,                               /* pSetTextAlign */
553     NULL,                               /* pSetTextCharacterExtra */
554     NULL,                               /* pSetTextColor */
555     NULL,                               /* pSetTextJustification */
556     NULL,                               /* pSetViewportExt */
557     NULL,                               /* pSetViewportOrg */
558     NULL,                               /* pSetWindowExt */
559     NULL,                               /* pSetWindowOrg */
560     NULL,                               /* pSetWorldTransform */
561     NULL,                               /* pStartDoc */
562     NULL,                               /* pStartPage */
563     NULL,                               /* pStretchBlt */
564     NULL,                               /* pStretchDIBits */
565     NULL,                               /* pStrokeAndFillPath */
566     NULL,                               /* pStrokePath */
567     NULL,                               /* pUnrealizePalette */
568     NULL,                               /* pWidenPath */
569     NULL,                               /* wine_get_wgl_driver */
570     GDI_PRIORITY_PATH_DRV               /* priority */
571 };
572