3 // Do not remove this file, "Justin Case" future maintenance issues with Path arises.......
8 #include "gdi_private.h"
13 WINEDC
*get_nulldrv_dc( PHYSDEV dev
);
14 const struct gdi_dc_funcs path_driver DECLSPEC_HIDDEN
;
18 struct gdi_physdev dev
;
19 //struct gdi_path *path;
23 static inline struct path_physdev
*get_path_physdev( PHYSDEV dev
)
25 return CONTAINING_RECORD( dev
, struct path_physdev
, dev
);
28 /***********************************************************************
31 static BOOL
pathdrv_BeginPath( PHYSDEV dev
)
33 DPRINT("pathdrv_BeginPath dev %p\n",dev
);
38 /***********************************************************************
41 static BOOL
pathdrv_AbortPath( PHYSDEV dev
)
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
));
50 /***********************************************************************
53 static BOOL
pathdrv_EndPath( PHYSDEV dev
)
55 struct path_physdev
*physdev
= get_path_physdev( dev
);
56 DC
*dc
= get_physdev_dc( dev
);
58 DPRINT("pathdrv_EndPath dev %p\n",dev
);
60 pop_dc_driver( dc
, &path_driver
);
61 HeapFree( GetProcessHeap(), 0, physdev
);
67 /***********************************************************************
70 static BOOL
pathdrv_CreateDC( PHYSDEV
*dev
, LPCWSTR driver
, LPCWSTR device
,
71 LPCWSTR output
, const DEVMODEW
*devmode
)
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
);
81 /*************************************************************
84 static BOOL
pathdrv_DeleteDC( PHYSDEV dev
)
86 struct path_physdev
*physdev
= get_path_physdev( dev
);
87 DPRINT("pathdrv_DeleteDC dev %p\n",dev
);
88 HeapFree( GetProcessHeap(), 0, physdev
);
92 /*************************************************************
95 static BOOL
pathdrv_MoveTo( PHYSDEV dev
, INT x
, INT y
)
97 // struct path_physdev *physdev = get_path_physdev( dev );
98 // DC *dc = get_physdev_dc( dev );
99 DPRINT("pathdrv_MoveTo dev %p\n",dev
);
104 /*************************************************************
107 static BOOL
pathdrv_LineTo( PHYSDEV dev
, INT x
, INT y
)
109 // struct path_physdev *physdev = get_path_physdev( dev );
110 // DC *dc = get_physdev_dc( dev );
111 DPRINT("pathdrv_LineTo dev %p\n",dev
);
116 /*************************************************************
119 static BOOL
pathdrv_Rectangle( PHYSDEV dev
, INT x1
, INT y1
, INT x2
, INT y2
)
121 // struct path_physdev *physdev = get_path_physdev( dev );
122 // DC *dc = get_physdev_dc( dev );
123 DPRINT("pathdrv_Rectangle dev %p\n",dev
);
128 /*************************************************************
131 static BOOL
pathdrv_RoundRect( PHYSDEV dev
, INT x1
, INT y1
, INT x2
, INT y2
, INT ell_width
, INT ell_height
)
133 // struct path_physdev *physdev = get_path_physdev( dev );
134 // DC *dc = get_physdev_dc( dev );
135 DPRINT("pathdrv_RoundRect dev %p\n",dev
);
140 /*************************************************************
143 static BOOL
pathdrv_Ellipse( PHYSDEV dev
, INT x1
, INT y1
, INT x2
, INT y2
)
145 // struct path_physdev *physdev = get_path_physdev( dev );
146 // DC *dc = get_physdev_dc( dev );
147 DPRINT("pathdrv_Ellipse dev %p\n",dev
);
151 /*************************************************************
154 static BOOL
pathdrv_AngleArc( PHYSDEV dev
, INT x
, INT y
, DWORD radius
, FLOAT eStartAngle
, FLOAT eSweepAngle
)
156 DPRINT("pathdrv_AngleArc dev %p\n",dev
);
161 /*************************************************************
164 static BOOL
pathdrv_Arc( PHYSDEV dev
, INT left
, INT top
, INT right
, INT bottom
,
165 INT xstart
, INT ystart
, INT xend
, INT yend
)
167 // DC *dc = get_physdev_dc( dev );
168 DPRINT("pathdrv_Arc dev %p\n",dev
);
173 /*************************************************************
176 static BOOL
pathdrv_ArcTo( PHYSDEV dev
, INT left
, INT top
, INT right
, INT bottom
,
177 INT xstart
, INT ystart
, INT xend
, INT yend
)
179 // DC *dc = get_physdev_dc( dev );
180 DPRINT("pathdrv_ArcTo dev %p\n",dev
);
185 /*************************************************************
188 static BOOL
pathdrv_Chord( PHYSDEV dev
, INT left
, INT top
, INT right
, INT bottom
,
189 INT xstart
, INT ystart
, INT xend
, INT yend
)
191 // DC *dc = get_physdev_dc( dev );
192 DPRINT("pathdrv_Chord dev %p\n",dev
);
197 /*************************************************************
200 static BOOL
pathdrv_Pie( PHYSDEV dev
, INT left
, INT top
, INT right
, INT bottom
,
201 INT xstart
, INT ystart
, INT xend
, INT yend
)
203 // DC *dc = get_physdev_dc( dev );
204 DPRINT("pathdrv_Pie dev %p\n",dev
);
209 /*************************************************************
210 * pathdrv_PolyBezierTo
212 static BOOL
pathdrv_PolyBezierTo( PHYSDEV dev
, const POINT
*pts
, DWORD cbPoints
)
214 // struct path_physdev *physdev = get_path_physdev( dev );
215 // DC *dc = get_physdev_dc( dev );
216 DPRINT("pathdrv_PolyBezierTo dev %p\n",dev
);
221 /*************************************************************
224 static BOOL
pathdrv_PolyBezier( PHYSDEV dev
, const POINT
*pts
, DWORD cbPoints
)
226 // struct path_physdev *physdev = get_path_physdev( dev );
227 // DC *dc = get_physdev_dc( dev );
228 DPRINT("pathdrv_PolyBezier dev %p\n",dev
);
233 /*************************************************************
236 static BOOL
pathdrv_PolyDraw( PHYSDEV dev
, const POINT
*pts
, const BYTE
*types
, DWORD cbPoints
)
238 // struct path_physdev *physdev = get_path_physdev( dev );
239 // DC *dc = get_physdev_dc( dev );
240 DPRINT("pathdrv_PolyDraw dev %p\n",dev
);
245 /*************************************************************
248 static BOOL
pathdrv_Polyline( PHYSDEV dev
, const POINT
*pts
, INT count
)
250 // struct path_physdev *physdev = get_path_physdev( dev );
251 // DC *dc = get_physdev_dc( dev );
252 DPRINT("pathdrv_PolyLine dev %p\n",dev
);
257 /*************************************************************
260 static BOOL
pathdrv_PolylineTo( PHYSDEV dev
, const POINT
*pts
, INT count
)
262 // struct path_physdev *physdev = get_path_physdev( dev );
263 // DC *dc = get_physdev_dc( dev );
264 DPRINT("pathdrv_PolyLineTo dev %p\n",dev
);
269 /*************************************************************
272 static BOOL
pathdrv_Polygon( PHYSDEV dev
, const POINT
*pts
, INT count
)
274 // struct path_physdev *physdev = get_path_physdev( dev );
275 // DC *dc = get_physdev_dc( dev );
276 DPRINT("pathdrv_Polygon dev %p\n",dev
);
281 /*************************************************************
282 * pathdrv_PolyPolygon
284 static BOOL
pathdrv_PolyPolygon( PHYSDEV dev
, const POINT
* pts
, const INT
* counts
, UINT polygons
)
286 // struct path_physdev *physdev = get_path_physdev( dev );
287 // DC *dc = get_physdev_dc( dev );
288 DPRINT("pathdrv_PolyPolygon dev %p\n",dev
);
293 /*************************************************************
294 * pathdrv_PolyPolyline
296 static BOOL
pathdrv_PolyPolyline( PHYSDEV dev
, const POINT
* pts
, const DWORD
* counts
, DWORD polylines
)
298 // struct path_physdev *physdev = get_path_physdev( dev );
299 // DC *dc = get_physdev_dc( dev );
300 DPRINT("pathdrv_PolyPolyline dev %p\n",dev
);
305 /*************************************************************
308 static BOOL
pathdrv_ExtTextOut( PHYSDEV dev
, INT x
, INT y
, UINT flags
, const RECT
*lprc
,
309 LPCWSTR str
, UINT count
, const INT
*dx
)
311 // struct path_physdev *physdev = get_path_physdev( dev );
312 DPRINT("pathdrv_ExtTextOut dev %p\n",dev
);
316 /*************************************************************
317 * pathdrv_CloseFigure
319 static BOOL
pathdrv_CloseFigure( PHYSDEV dev
)
321 // struct path_physdev *physdev = get_path_physdev( dev );
322 DPRINT("pathdrv_CloseFigure dev %p\n",dev
);
327 /***********************************************************************
328 * null driver fallback implementations
331 BOOL
nulldrv_BeginPath( PHYSDEV dev
)
333 DC
*dc
= get_nulldrv_dc( dev
);
334 struct path_physdev
*physdev
;
336 if (!path_driver
.pCreateDC( &dc
->physDev
, NULL
, NULL
, NULL
, NULL
))
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
);
347 BOOL
nulldrv_EndPath( PHYSDEV dev
)
349 DPRINT("nulldrv_EndPath dev %p\n",dev
);
350 SetLastError( ERROR_CAN_NOT_COMPLETE
);
354 BOOL
nulldrv_AbortPath( PHYSDEV dev
)
356 //DC *dc = get_nulldrv_dc( dev );
357 DPRINT("nulldrv_AbortPath dev %p\n",dev
);
358 //if (dc->path) free_gdi_path( dc->path );
363 BOOL
nulldrv_CloseFigure( PHYSDEV dev
)
365 DPRINT("nulldrv_CloseFigure dev %p\n",dev
);
366 SetLastError( ERROR_CAN_NOT_COMPLETE
);
370 BOOL
nulldrv_SelectClipPath( PHYSDEV dev
, INT mode
)
373 HRGN hrgn
= PathToRegion( dev
->hdc
);
374 DPRINT("nulldrv_SelectClipPath dev %p\n",dev
);
377 ret
= ExtSelectClipRgn( dev
->hdc
, hrgn
, mode
) != ERROR
;
378 DeleteObject( hrgn
);
384 BOOL
nulldrv_FillPath( PHYSDEV dev
)
386 DPRINT("nulldrv_FillPath dev %p\n",dev
);
387 //if (GetPath( dev->hdc, NULL, NULL, 0 ) == -1) return FALSE;
388 //AbortPath( dev->hdc );
392 BOOL
nulldrv_StrokeAndFillPath( PHYSDEV dev
)
394 DPRINT("nulldrv_StrokeAndFillPath dev %p\n",dev
);
395 //if (GetPath( dev->hdc, NULL, NULL, 0 ) == -1) return FALSE;
396 //AbortPath( dev->hdc );
400 BOOL
nulldrv_StrokePath( PHYSDEV dev
)
402 DPRINT("nulldrv_StrokePath dev %p\n",dev
);
403 //if (GetPath( dev->hdc, NULL, NULL, 0 ) == -1) return FALSE;
404 //AbortPath( dev->hdc );
408 BOOL
nulldrv_FlattenPath( PHYSDEV dev
)
410 /* DC *dc = get_nulldrv_dc( dev );
411 struct gdi_path *path; */
412 DPRINT("nulldrv_FlattenPath dev %p\n",dev
);
415 SetLastError( ERROR_CAN_NOT_COMPLETE );
418 if (!(path = PATH_FlattenPath( dc->path ))) return FALSE;
419 free_gdi_path( dc->path );
424 BOOL
nulldrv_WidenPath( PHYSDEV dev
)
426 /* DC *dc = get_nulldrv_dc( dev );
427 struct gdi_path *path;*/
428 DPRINT("nulldrv_WidenPath dev %p\n",dev
);
431 SetLastError( ERROR_CAN_NOT_COMPLETE );
434 if (!(path = PATH_WidenPath( dc ))) return FALSE;
435 free_gdi_path( dc->path );
440 const struct gdi_dc_funcs path_driver
=
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 */
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 */
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
, /* pGetDeviceCaps */
480 NULL
, /* pGetDeviceGammaRamp */
481 NULL
, /* pGetFontData */
482 NULL
, /* pGetFontRealizationInfo */
483 NULL
, /* pGetFontUnicodeRanges */
484 NULL
, /* pGetGlyphIndices */
485 NULL
, /* pGetGlyphOutline */
486 NULL
, /* pGetICMProfile */
487 NULL
, /* pGetImage */
488 NULL
, /* pGetKerningPairs */
489 NULL
, /* pGetNearestColor */
490 NULL
, /* pGetOutlineTextMetrics */
491 NULL
, /* pGetPixel */
492 NULL
, /* pGetSystemPaletteEntries */
493 NULL
, /* pGetTextCharsetInfo */
494 NULL
, /* pGetTextExtentExPoint */
495 NULL
, /* pGetTextExtentExPointI */
496 NULL
, /* pGetTextFace */
497 NULL
, /* pGetTextMetrics */
498 NULL
, /* pGradientFill */
499 NULL
, /* pIntersectClipRect */
500 NULL
, /* pInvertRgn */
501 pathdrv_LineTo
, /* pLineTo */
502 NULL
, /* pModifyWorldTransform */
503 pathdrv_MoveTo
, /* pMoveTo */
504 NULL
, /* pOffsetClipRgn */
505 NULL
, /* pOffsetViewportOrg */
506 NULL
, /* pOffsetWindowOrg */
507 NULL
, /* pPaintRgn */
509 pathdrv_Pie
, /* pPie */
510 pathdrv_PolyBezier
, /* pPolyBezier */
511 pathdrv_PolyBezierTo
, /* pPolyBezierTo */
512 pathdrv_PolyDraw
, /* pPolyDraw */
513 pathdrv_PolyPolygon
, /* pPolyPolygon */
514 pathdrv_PolyPolyline
, /* pPolyPolyline */
515 pathdrv_Polygon
, /* pPolygon */
516 pathdrv_Polyline
, /* pPolyline */
517 pathdrv_PolylineTo
, /* pPolylineTo */
518 NULL
, /* pPutImage */
519 NULL
, /* pRealizeDefaultPalette */
520 NULL
, /* pRealizePalette */
521 pathdrv_Rectangle
, /* pRectangle */
523 NULL
, /* pRestoreDC */
524 pathdrv_RoundRect
, /* pRoundRect */
526 NULL
, /* pScaleViewportExt */
527 NULL
, /* pScaleWindowExt */
528 NULL
, /* pSelectBitmap */
529 NULL
, /* pSelectBrush */
530 NULL
, /* pSelectClipPath */
531 NULL
, /* pSelectFont */
532 NULL
, /* pSelectPalette */
533 NULL
, /* pSelectPen */
534 NULL
, /* pSetArcDirection */
535 NULL
, /* pSetBkColor */
536 NULL
, /* pSetBkMode */
537 NULL
, /* pSetDCBrushColor */
538 NULL
, /* pSetDCPenColor */
539 NULL
, /* pSetDIBColorTable */
540 NULL
, /* pSetDIBitsToDevice */
541 NULL
, /* pSetDeviceClipping */
542 NULL
, /* pSetDeviceGammaRamp */
543 NULL
, /* pSetLayout */
544 NULL
, /* pSetMapMode */
545 NULL
, /* pSetMapperFlags */
546 NULL
, /* pSetPixel */
547 NULL
, /* pSetPolyFillMode */
549 NULL
, /* pSetRelAbs */
550 NULL
, /* pSetStretchBltMode */
551 NULL
, /* pSetTextAlign */
552 NULL
, /* pSetTextCharacterExtra */
553 NULL
, /* pSetTextColor */
554 NULL
, /* pSetTextJustification */
555 NULL
, /* pSetViewportExt */
556 NULL
, /* pSetViewportOrg */
557 NULL
, /* pSetWindowExt */
558 NULL
, /* pSetWindowOrg */
559 NULL
, /* pSetWorldTransform */
560 NULL
, /* pStartDoc */
561 NULL
, /* pStartPage */
562 NULL
, /* pStretchBlt */
563 NULL
, /* pStretchDIBits */
564 NULL
, /* pStrokeAndFillPath */
565 NULL
, /* pStrokePath */
566 NULL
, /* pUnrealizePalette */
567 NULL
, /* pWidenPath */
568 NULL
, /* wine_get_wgl_driver */
569 GDI_PRIORITY_PATH_DRV
/* priority */