Commit eddc1275 authored by Vincent Povirk's avatar Vincent Povirk Committed by Alexandre Julliard

gdiplus: Fix GdipFlattenPath for already-flat paths and add a test.

parent 025daaf0
...@@ -984,17 +984,16 @@ GpStatus WINGDIPAPI GdipFlattenPath(GpPath *path, GpMatrix* matrix, REAL flatnes ...@@ -984,17 +984,16 @@ GpStatus WINGDIPAPI GdipFlattenPath(GpPath *path, GpMatrix* matrix, REAL flatnes
/* always add line points and start points */ /* always add line points and start points */
if((type == PathPointTypeStart) || (type == PathPointTypeLine)){ if((type == PathPointTypeStart) || (type == PathPointTypeLine)){
type = (path->pathdata.Types[i] & ~PathPointTypeBezier) | PathPointTypeLine; if(!add_path_list_node(node, pt.X, pt.Y, path->pathdata.Types[i]))
if(!add_path_list_node(node, pt.X, pt.Y, type))
goto memout; goto memout;
node = node->next; node = node->next;
++i;
continue; continue;
} }
/* Bezier curve always stored as 4 points */ /* Bezier curve always stored as 4 points */
if((path->pathdata.Types[i-1] & PathPointTypePathTypeMask) != PathPointTypeStart){ if((path->pathdata.Types[i-1] & PathPointTypePathTypeMask) != PathPointTypeStart){
type = (path->pathdata.Types[i] & ~PathPointTypeBezier) | PathPointTypeLine;
if(!add_path_list_node(node, pt.X, pt.Y, type)) if(!add_path_list_node(node, pt.X, pt.Y, type))
goto memout; goto memout;
......
...@@ -914,6 +914,11 @@ static path_test_t flattenellipse_path[] = { ...@@ -914,6 +914,11 @@ static path_test_t flattenellipse_path[] = {
{100.0,25.0, PathPointTypeLine | PathPointTypeCloseSubpath, 0, 1} /*24*/ {100.0,25.0, PathPointTypeLine | PathPointTypeCloseSubpath, 0, 1} /*24*/
}; };
static path_test_t flattenline_path[] = {
{5.0, 10.0,PathPointTypeStart, 0, 0}, /*0*/
{50.0, 100.0, PathPointTypeLine, 0, 0} /*1*/
};
static path_test_t flattenarc_path[] = { static path_test_t flattenarc_path[] = {
{100.0, 25.0,PathPointTypeStart, 0, 0}, /*0*/ {100.0, 25.0,PathPointTypeStart, 0, 0}, /*0*/
{99.0, 30.0, PathPointTypeLine, 0, 0}, /*1*/ {99.0, 30.0, PathPointTypeLine, 0, 0}, /*1*/
...@@ -966,6 +971,14 @@ static void test_flatten(void) ...@@ -966,6 +971,14 @@ static void test_flatten(void)
status = GdipResetPath(path); status = GdipResetPath(path);
expect(Ok, status); expect(Ok, status);
status = GdipAddPathLine(path, 5.0, 10.0, 50.0, 100.0);
expect(Ok, status);
status = GdipFlattenPath(path, NULL, 1.0);
expect(Ok, status);
ok_path(path, flattenline_path, sizeof(flattenline_path)/sizeof(path_test_t), FALSE);
status = GdipResetPath(path);
expect(Ok, status);
status = GdipAddPathArc(path, 0.0, 0.0, 100.0, 50.0, 0.0, 90.0); status = GdipAddPathArc(path, 0.0, 0.0, 100.0, 50.0, 0.0, 90.0);
expect(Ok, status); expect(Ok, status);
status = GdipFlattenPath(path, NULL, 1.0); status = GdipFlattenPath(path, NULL, 1.0);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment