From 88168d4b3d531da2e707efb8b944365ec22fa0fc Mon Sep 17 00:00:00 2001 From: Vincent Povirk Date: Thu, 20 Oct 2016 15:21:28 -0500 Subject: [PATCH] gdiplus: Implement GdipIsOutlineVisiblePathPoint. Signed-off-by: Vincent Povirk Signed-off-by: Alexandre Julliard --- 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 8ba0016d13..b6ec88d0cc 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)