Module: wine Branch: master Commit: 88168d4b3d531da2e707efb8b944365ec22fa0fc URL: http://source.winehq.org/git/wine.git/?a=commit;h=88168d4b3d531da2e707efb8b9...
Author: Vincent Povirk vincent@codeweavers.com Date: Thu Oct 20 15:21:28 2016 -0500
gdiplus: Implement GdipIsOutlineVisiblePathPoint.
Signed-off-by: Vincent Povirk vincent@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/gdiplus/graphicspath.c | 40 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 36 insertions(+), 4 deletions(-)
diff --git a/dlls/gdiplus/graphicspath.c b/dlls/gdiplus/graphicspath.c index 8ba0016..b6ec88d 100644 --- a/dlls/gdiplus/graphicspath.c +++ b/dlls/gdiplus/graphicspath.c @@ -1581,17 +1581,49 @@ GpStatus WINGDIPAPI GdipIsOutlineVisiblePathPointI(GpPath* path, INT x, INT y, GpStatus WINGDIPAPI GdipIsOutlineVisiblePathPoint(GpPath* path, REAL x, REAL y, GpPen *pen, GpGraphics *graphics, BOOL *result) { - static int calls; + GpStatus stat; + GpPath *wide_path; + GpMatrix *transform = NULL;
TRACE("(%p,%0.2f,%0.2f,%p,%p,%p)\n", path, x, y, pen, graphics, result);
if(!path || !pen) return InvalidParameter;
- if(!(calls++)) - FIXME("not implemented\n"); + stat = GdipClonePath(path, &wide_path);
- return NotImplemented; + if (stat != Ok) + return stat; + + if (pen->unit == UnitPixel && graphics != NULL) + { + stat = GdipCreateMatrix(&transform); + + if (stat == Ok) + stat = get_graphics_transform(graphics, CoordinateSpaceDevice, + CoordinateSpaceWorld, transform); + } + + if (stat == Ok) + stat = GdipWidenPath(wide_path, pen, transform, 1.0); + + if (pen->unit == UnitPixel && graphics != NULL) + { + if (stat == Ok) + stat = GdipInvertMatrix(transform); + + if (stat == Ok) + stat = GdipTransformPath(wide_path, transform); + } + + if (stat == Ok) + stat = GdipIsVisiblePathPoint(wide_path, x, y, graphics, result); + + GdipDeleteMatrix(transform); + + GdipDeletePath(wide_path); + + return stat; }
GpStatus WINGDIPAPI GdipIsVisiblePathPointI(GpPath* path, INT x, INT y, GpGraphics *graphics, BOOL *result)