Preserve convex control point polygon in cubic->quadratic approximation
GM test modified, will require rebaselining.
Review URL: http://codereview.appspot.com/6355088/
git-svn-id: http://skia.googlecode.com/svn/trunk@4518 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/gm/convexpaths.cpp b/gm/convexpaths.cpp
index ebe715d..d1c6aee 100644
--- a/gm/convexpaths.cpp
+++ b/gm/convexpaths.cpp
@@ -134,7 +134,6 @@
100 * SK_Scalar1),
25 * SK_Scalar1, 130 * SK_Scalar1, false);
*/
-
// cubics
fPaths.push_back().cubicTo( 1 * SK_Scalar1, 1 * SK_Scalar1,
10 * SK_Scalar1, 90 * SK_Scalar1,
@@ -143,6 +142,27 @@
20 * SK_Scalar1, 100 * SK_Scalar1,
0 * SK_Scalar1, 0 * SK_Scalar1);
+ // path that has a cubic with a repeated first control point and
+ // a repeated last control point.
+ fPaths.push_back().moveTo(SK_Scalar1 * 10, SK_Scalar1 * 10);
+ fPaths.back().cubicTo(10 * SK_Scalar1, 10 * SK_Scalar1,
+ 10 * SK_Scalar1, 0,
+ 20 * SK_Scalar1, 0);
+ fPaths.back().lineTo(40 * SK_Scalar1, 0);
+ fPaths.back().cubicTo(40 * SK_Scalar1, 0,
+ 50 * SK_Scalar1, 0,
+ 50 * SK_Scalar1, 10 * SK_Scalar1);
+
+ // path that has two cubics with repeated middle control points.
+ fPaths.push_back().moveTo(SK_Scalar1 * 10, SK_Scalar1 * 10);
+ fPaths.back().cubicTo(10 * SK_Scalar1, 0,
+ 10 * SK_Scalar1, 0,
+ 20 * SK_Scalar1, 0);
+ fPaths.back().lineTo(40 * SK_Scalar1, 0);
+ fPaths.back().cubicTo(50 * SK_Scalar1, 0,
+ 50 * SK_Scalar1, 0,
+ 50 * SK_Scalar1, 10 * SK_Scalar1);
+
// triangle where one edge is a degenerate quad
fPaths.push_back().moveTo(SkFloatToScalar(8.59375f), 45 * SK_Scalar1);
fPaths.back().quadTo(SkFloatToScalar(16.9921875f), 45 * SK_Scalar1,