Vincent Povirk : gdiplus: Implement GdipIsOutlineVisiblePathPoint.
Alexandre Julliard
julliard at winehq.org
Sun Oct 23 13:24:14 CDT 2016
Module: wine
Branch: master
Commit: 88168d4b3d531da2e707efb8b944365ec22fa0fc
URL: http://source.winehq.org/git/wine.git/?a=commit;h=88168d4b3d531da2e707efb8b944365ec22fa0fc
Author: Vincent Povirk <vincent at codeweavers.com>
Date: Thu Oct 20 15:21:28 2016 -0500
gdiplus: Implement GdipIsOutlineVisiblePathPoint.
Signed-off-by: Vincent Povirk <vincent at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at 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)
More information about the wine-cvs
mailing list