When the last vertex is coincident with the first vertex, the last segment should be suppressed for both END_OPEN and END_CLOSED.
When the last, zero length segment is not omitted d2d_geometry_intersect_self will add invalid segments.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51139 Signed-off-by: Stefan Brüns stefan.bruens@rwth-aachen.de --- dlls/d2d1/geometry.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/dlls/d2d1/geometry.c b/dlls/d2d1/geometry.c index a7074899fda..95aaf199ad2 100644 --- a/dlls/d2d1/geometry.c +++ b/dlls/d2d1/geometry.c @@ -2917,8 +2917,9 @@ static void STDMETHODCALLTYPE d2d_geometry_sink_EndFigure(ID2D1GeometrySink *ifa { ++geometry->u.path.segment_count; figure->flags |= D2D_FIGURE_FLAG_CLOSED; - if (!memcmp(&figure->vertices[0], &figure->vertices[figure->vertex_count - 1], sizeof(*figure->vertices))) - --figure->vertex_count; + } + if (!memcmp(&figure->vertices[0], &figure->vertices[figure->vertex_count - 1], sizeof(*figure->vertices))) { + --figure->vertex_count; }
if (!d2d_geometry_add_figure_outline(geometry, figure, figure_end))