Add SkPath::getVerbs/countVerbs
Review URL: http://codereview.appspot.com/6306053/
git-svn-id: http://skia.googlecode.com/svn/trunk@4209 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/tests/PathTest.cpp b/tests/PathTest.cpp
index 9d9903f..21f78bf 100644
--- a/tests/PathTest.cpp
+++ b/tests/PathTest.cpp
@@ -756,16 +756,28 @@
REPORTER_ASSERT(reporter, pt.fY == SK_Scalar1);
bounds.set(0, 0, 0, 0);
REPORTER_ASSERT(reporter, bounds == p.getBounds());
+ {
+ uint8_t verbs[1];
+ REPORTER_ASSERT(reporter, SK_ARRAY_COUNT(verbs) == p.getVerbs(verbs, SK_ARRAY_COUNT(verbs)));
+ REPORTER_ASSERT(reporter, SkPath::kMove_Verb == verbs[0]);
+ }
// MoveTo-MoveTo case
p.moveTo(SK_Scalar1*2, SK_Scalar1);
REPORTER_ASSERT(reporter, !p.isEmpty());
REPORTER_ASSERT(reporter, 2 == p.countPoints());
+ REPORTER_ASSERT(reporter, 2 == p.countVerbs());
p.getLastPt(&pt);
REPORTER_ASSERT(reporter, pt.fX == SK_Scalar1*2);
REPORTER_ASSERT(reporter, pt.fY == SK_Scalar1);
bounds.set(SK_Scalar1, SK_Scalar1, 2*SK_Scalar1, SK_Scalar1);
REPORTER_ASSERT(reporter, bounds == p.getBounds());
+ {
+ uint8_t verbs[2];
+ REPORTER_ASSERT(reporter, SK_ARRAY_COUNT(verbs) == p.getVerbs(verbs, SK_ARRAY_COUNT(verbs)));
+ REPORTER_ASSERT(reporter, SkPath::kMove_Verb == verbs[0]);
+ REPORTER_ASSERT(reporter, SkPath::kMove_Verb == verbs[1]);
+ }
// moveTo-close case
p.reset();
@@ -774,7 +786,14 @@
bounds.set(0, 0, 0, 0);
REPORTER_ASSERT(reporter, !p.isEmpty());
REPORTER_ASSERT(reporter, 1 == p.countPoints());
+ REPORTER_ASSERT(reporter, 2 == p.countVerbs());
REPORTER_ASSERT(reporter, bounds == p.getBounds());
+ {
+ uint8_t verbs[2];
+ REPORTER_ASSERT(reporter, SK_ARRAY_COUNT(verbs) == p.getVerbs(verbs, SK_ARRAY_COUNT(verbs)));
+ REPORTER_ASSERT(reporter, SkPath::kMove_Verb == verbs[0]);
+ REPORTER_ASSERT(reporter, SkPath::kClose_Verb == verbs[1]);
+ }
// moveTo-close-moveTo-close case
p.moveTo(SK_Scalar1*2, SK_Scalar1);
@@ -783,6 +802,14 @@
REPORTER_ASSERT(reporter, !p.isEmpty());
REPORTER_ASSERT(reporter, 2 == p.countPoints());
REPORTER_ASSERT(reporter, bounds == p.getBounds());
+ {
+ uint8_t verbs[4];
+ REPORTER_ASSERT(reporter, SK_ARRAY_COUNT(verbs) == p.getVerbs(verbs, SK_ARRAY_COUNT(verbs)));
+ REPORTER_ASSERT(reporter, SkPath::kMove_Verb == verbs[0]);
+ REPORTER_ASSERT(reporter, SkPath::kClose_Verb == verbs[1]);
+ REPORTER_ASSERT(reporter, SkPath::kMove_Verb == verbs[0]);
+ REPORTER_ASSERT(reporter, SkPath::kClose_Verb == verbs[1]);
+ }
// moveTo-line case
p.reset();
@@ -792,6 +819,12 @@
REPORTER_ASSERT(reporter, !p.isEmpty());
REPORTER_ASSERT(reporter, 2 == p.countPoints());
REPORTER_ASSERT(reporter, bounds == p.getBounds());
+ {
+ uint8_t verbs[2];
+ REPORTER_ASSERT(reporter, SK_ARRAY_COUNT(verbs) == p.getVerbs(verbs, SK_ARRAY_COUNT(verbs)));
+ REPORTER_ASSERT(reporter, SkPath::kMove_Verb == verbs[0]);
+ REPORTER_ASSERT(reporter, SkPath::kLine_Verb == verbs[1]);
+ }
// moveTo-lineTo-moveTo-lineTo case
p.moveTo(SK_Scalar1*2, SK_Scalar1);
@@ -800,6 +833,14 @@
REPORTER_ASSERT(reporter, !p.isEmpty());
REPORTER_ASSERT(reporter, 4 == p.countPoints());
REPORTER_ASSERT(reporter, bounds == p.getBounds());
+ {
+ uint8_t verbs[4];
+ REPORTER_ASSERT(reporter, SK_ARRAY_COUNT(verbs) == p.getVerbs(verbs, SK_ARRAY_COUNT(verbs)));
+ REPORTER_ASSERT(reporter, SkPath::kMove_Verb == verbs[0]);
+ REPORTER_ASSERT(reporter, SkPath::kLine_Verb == verbs[1]);
+ REPORTER_ASSERT(reporter, SkPath::kMove_Verb == verbs[2]);
+ REPORTER_ASSERT(reporter, SkPath::kLine_Verb == verbs[3]);
+ }
// moveTo-line-close case
p.reset();
@@ -810,6 +851,13 @@
REPORTER_ASSERT(reporter, !p.isEmpty());
REPORTER_ASSERT(reporter, 2 == p.countPoints());
REPORTER_ASSERT(reporter, bounds == p.getBounds());
+ {
+ uint8_t verbs[3];
+ REPORTER_ASSERT(reporter, SK_ARRAY_COUNT(verbs) == p.getVerbs(verbs, SK_ARRAY_COUNT(verbs)));
+ REPORTER_ASSERT(reporter, SkPath::kMove_Verb == verbs[0]);
+ REPORTER_ASSERT(reporter, SkPath::kLine_Verb == verbs[1]);
+ REPORTER_ASSERT(reporter, SkPath::kClose_Verb == verbs[2]);
+ }
// moveTo-line-close-moveTo-line-close case
p.moveTo(SK_Scalar1*2, SK_Scalar1);
@@ -819,6 +867,16 @@
REPORTER_ASSERT(reporter, !p.isEmpty());
REPORTER_ASSERT(reporter, 4 == p.countPoints());
REPORTER_ASSERT(reporter, bounds == p.getBounds());
+ {
+ uint8_t verbs[6];
+ REPORTER_ASSERT(reporter, SK_ARRAY_COUNT(verbs) == p.getVerbs(verbs, SK_ARRAY_COUNT(verbs)));
+ REPORTER_ASSERT(reporter, SkPath::kMove_Verb == verbs[0]);
+ REPORTER_ASSERT(reporter, SkPath::kLine_Verb == verbs[1]);
+ REPORTER_ASSERT(reporter, SkPath::kClose_Verb == verbs[2]);
+ REPORTER_ASSERT(reporter, SkPath::kMove_Verb == verbs[3]);
+ REPORTER_ASSERT(reporter, SkPath::kLine_Verb == verbs[4]);
+ REPORTER_ASSERT(reporter, SkPath::kClose_Verb == verbs[5]);
+ }
// moveTo-quadTo case
p.reset();
@@ -828,12 +886,26 @@
REPORTER_ASSERT(reporter, !p.isEmpty());
REPORTER_ASSERT(reporter, 3 == p.countPoints());
REPORTER_ASSERT(reporter, bounds == p.getBounds());
+ {
+ uint8_t verbs[2];
+ REPORTER_ASSERT(reporter, SK_ARRAY_COUNT(verbs) == p.getVerbs(verbs, SK_ARRAY_COUNT(verbs)));
+ REPORTER_ASSERT(reporter, SkPath::kMove_Verb == verbs[0]);
+ REPORTER_ASSERT(reporter, SkPath::kQuad_Verb == verbs[1]);
+ }
// moveTo-quadTo-close case
p.close();
REPORTER_ASSERT(reporter, !p.isEmpty());
REPORTER_ASSERT(reporter, 3 == p.countPoints());
+ REPORTER_ASSERT(reporter, 3 == p.countVerbs());
REPORTER_ASSERT(reporter, bounds == p.getBounds());
+ {
+ uint8_t verbs[3];
+ REPORTER_ASSERT(reporter, SK_ARRAY_COUNT(verbs) == p.getVerbs(verbs, SK_ARRAY_COUNT(verbs)));
+ REPORTER_ASSERT(reporter, SkPath::kMove_Verb == verbs[0]);
+ REPORTER_ASSERT(reporter, SkPath::kQuad_Verb == verbs[1]);
+ REPORTER_ASSERT(reporter, SkPath::kClose_Verb == verbs[2]);
+ }
// moveTo-quadTo-moveTo-quadTo case
p.reset();
@@ -845,6 +917,14 @@
REPORTER_ASSERT(reporter, !p.isEmpty());
REPORTER_ASSERT(reporter, 6 == p.countPoints());
REPORTER_ASSERT(reporter, bounds == p.getBounds());
+ {
+ uint8_t verbs[4];
+ REPORTER_ASSERT(reporter, SK_ARRAY_COUNT(verbs) == p.getVerbs(verbs, SK_ARRAY_COUNT(verbs)));
+ REPORTER_ASSERT(reporter, SkPath::kMove_Verb == verbs[0]);
+ REPORTER_ASSERT(reporter, SkPath::kQuad_Verb == verbs[1]);
+ REPORTER_ASSERT(reporter, SkPath::kMove_Verb == verbs[0]);
+ REPORTER_ASSERT(reporter, SkPath::kQuad_Verb == verbs[1]);
+ }
// moveTo-cubicTo case
p.reset();
@@ -856,14 +936,27 @@
REPORTER_ASSERT(reporter, !p.isEmpty());
REPORTER_ASSERT(reporter, 4 == p.countPoints());
REPORTER_ASSERT(reporter, bounds == p.getBounds());
+ {
+ uint8_t verbs[2];
+ REPORTER_ASSERT(reporter, SK_ARRAY_COUNT(verbs) == p.getVerbs(verbs, SK_ARRAY_COUNT(verbs)));
+ REPORTER_ASSERT(reporter, SkPath::kMove_Verb == verbs[0]);
+ REPORTER_ASSERT(reporter, SkPath::kCubic_Verb == verbs[1]);
+ }
- // moveTo-quadTo-close case
+ // moveTo-cubicTo-close case
p.close();
REPORTER_ASSERT(reporter, !p.isEmpty());
REPORTER_ASSERT(reporter, 4 == p.countPoints());
REPORTER_ASSERT(reporter, bounds == p.getBounds());
+ {
+ uint8_t verbs[3];
+ REPORTER_ASSERT(reporter, SK_ARRAY_COUNT(verbs) == p.getVerbs(verbs, SK_ARRAY_COUNT(verbs)));
+ REPORTER_ASSERT(reporter, SkPath::kMove_Verb == verbs[0]);
+ REPORTER_ASSERT(reporter, SkPath::kCubic_Verb == verbs[1]);
+ REPORTER_ASSERT(reporter, SkPath::kClose_Verb == verbs[2]);
+ }
- // moveTo-quadTo-moveTo-quadTo case
+ // moveTo-cubicTo-moveTo-cubicTo case
p.reset();
p.moveTo(SK_Scalar1, SK_Scalar1);
p.cubicTo(SK_Scalar1, SK_Scalar1,
@@ -877,6 +970,14 @@
REPORTER_ASSERT(reporter, !p.isEmpty());
REPORTER_ASSERT(reporter, 8 == p.countPoints());
REPORTER_ASSERT(reporter, bounds == p.getBounds());
+ {
+ uint8_t verbs[4];
+ REPORTER_ASSERT(reporter, SK_ARRAY_COUNT(verbs) == p.getVerbs(verbs, SK_ARRAY_COUNT(verbs)));
+ REPORTER_ASSERT(reporter, SkPath::kMove_Verb == verbs[0]);
+ REPORTER_ASSERT(reporter, SkPath::kCubic_Verb == verbs[1]);
+ REPORTER_ASSERT(reporter, SkPath::kMove_Verb == verbs[2]);
+ REPORTER_ASSERT(reporter, SkPath::kCubic_Verb == verbs[3]);
+ }
}
struct SegmentInfo {
@@ -1391,6 +1492,7 @@
REPORTER_ASSERT(reporter, p.isEmpty());
REPORTER_ASSERT(reporter, 0 == p.countPoints());
+ REPORTER_ASSERT(reporter, 0 == p.countVerbs());
REPORTER_ASSERT(reporter, 0 == p.getSegmentMasks());
REPORTER_ASSERT(reporter, p.isConvex());
REPORTER_ASSERT(reporter, p.getFillType() == SkPath::kWinding_FillType);
@@ -1426,11 +1528,21 @@
REPORTER_ASSERT(reporter, p != p2);
REPORTER_ASSERT(reporter, !(p == p2));
- // does getPoints return the right result
- REPORTER_ASSERT(reporter, p.getPoints(NULL, 5) == 4);
+ // do getPoints and getVerbs return the right result
+ REPORTER_ASSERT(reporter, p.getPoints(NULL, 0) == 4);
+ REPORTER_ASSERT(reporter, p.getVerbs(NULL, 0) == 5);
SkPoint pts[4];
int count = p.getPoints(pts, 4);
REPORTER_ASSERT(reporter, count == 4);
+ uint8_t verbs[6];
+ verbs[5] = 0xff;
+ p.getVerbs(verbs, 5);
+ REPORTER_ASSERT(reporter, SkPath::kMove_Verb == verbs[0]);
+ REPORTER_ASSERT(reporter, SkPath::kLine_Verb == verbs[1]);
+ REPORTER_ASSERT(reporter, SkPath::kLine_Verb == verbs[2]);
+ REPORTER_ASSERT(reporter, SkPath::kLine_Verb == verbs[3]);
+ REPORTER_ASSERT(reporter, SkPath::kClose_Verb == verbs[4]);
+ REPORTER_ASSERT(reporter, 0xff == verbs[5]);
bounds2.set(pts, 4);
REPORTER_ASSERT(reporter, bounds == bounds2);