From e547ceb1f65e3367b0e665f71cd218355300f57a Mon Sep 17 00:00:00 2001 From: Evan Stade Date: Thu, 12 Jul 2007 19:42:54 -0700 Subject: [PATCH] gdiplus: Use passed pen in GdipAddPathWorldBound. --- dlls/gdiplus/graphicspath.c | 13 +++++++++---- dlls/gdiplus/tests/graphicspath.c | 13 +++++-------- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/dlls/gdiplus/graphicspath.c b/dlls/gdiplus/graphicspath.c index 5b410d6bd38..72b718af630 100644 --- a/dlls/gdiplus/graphicspath.c +++ b/dlls/gdiplus/graphicspath.c @@ -217,6 +217,7 @@ GpStatus WINGDIPAPI GdipGetPathWorldBounds(GpPath* path, GpRectF* bounds, GpPointF extrema[2]; GpPointF * points; INT count, i; + REAL path_width; /* Matrix and pen can be null. */ if(!path || !bounds) @@ -229,10 +230,6 @@ GpStatus WINGDIPAPI GdipGetPathWorldBounds(GpPath* path, GpRectF* bounds, return Ok; } - /* FIXME: implement case where pen is non-NULL. */ - if(pen) - return NotImplemented; - points = path->pathdata.Points; extrema[0].X = extrema[1].X = points[0].X; extrema[0].Y = extrema[1].Y = points[0].Y; @@ -249,6 +246,14 @@ GpStatus WINGDIPAPI GdipGetPathWorldBounds(GpPath* path, GpRectF* bounds, GdipTransformMatrixPoints((GpMatrix*)matrix, extrema, 2); } + if(pen){ + path_width = pen->width * pen->miterlimit / 2.0; + extrema[0].X -= path_width; + extrema[0].Y -= path_width; + extrema[1].X += path_width; + extrema[1].Y += path_width; + } + bounds->X = extrema[0].X; bounds->Y = extrema[0].Y; bounds->Width = extrema[1].X - extrema[0].X; diff --git a/dlls/gdiplus/tests/graphicspath.c b/dlls/gdiplus/tests/graphicspath.c index 67547975585..63c0bdc1c9a 100644 --- a/dlls/gdiplus/tests/graphicspath.c +++ b/dlls/gdiplus/tests/graphicspath.c @@ -301,16 +301,13 @@ static void test_worldbounds(void) GdipAddPathArc(path, 100.0, 100.0, 500.0, 700.0, 0.0, 100.0); GdipAddPathLine2(path, &(line2_points[0]), 10); status = GdipGetPathWorldBounds(path, &bounds, NULL, pen); - todo_wine - expect(Ok, status); + expect(Ok, status); GdipDeletePath(path); - todo_wine{ - expectf(100.0, bounds.X); - expectf(100.0, bounds.Y); - expectf(650.0, bounds.Width); - expectf(800.0, bounds.Height); - } + expectf(100.0, bounds.X); + expectf(100.0, bounds.Y); + expectf(650.0, bounds.Width); + expectf(800.0, bounds.Height); } START_TEST(graphicspath)