aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Mike Reed <reed@google.com>2018-03-16 10:15:43 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-03-16 15:11:31 +0000
commit473f69276f1854db80e094cc4af091f7f8a5b00b (patch)
treef23829b7ff2dd37fe80018c6dfa5d83a05bd3d48
parente464160f6969d28d0e8c76c493f325e3a716c4d2 (diff)
fix nextContour bug
Calling nextContour() needs to ensure that we've already measured the "current" one. Bug: skia: Change-Id: I501c26d0b068028d67103888f06ec89125a5407a Reviewed-on: https://skia-review.googlesource.com/114692 Reviewed-by: Cary Clark <caryclark@google.com> Commit-Queue: Mike Reed <reed@google.com>
-rw-r--r--src/core/SkPathMeasure.cpp5
-rw-r--r--tests/PathMeasureTest.cpp10
2 files changed, 13 insertions, 2 deletions
diff --git a/src/core/SkPathMeasure.cpp b/src/core/SkPathMeasure.cpp
index cdcd164018..4fb18934d9 100644
--- a/src/core/SkPathMeasure.cpp
+++ b/src/core/SkPathMeasure.cpp
@@ -667,7 +667,7 @@ bool SkPathMeasure::getSegment(SkScalar startD, SkScalar stopD, SkPath* dst,
}
bool SkPathMeasure::isClosed() {
- (void)this->getLength();
+ (void)this->getLength(); // make sure we measure the current contour
return fIsClosed;
}
@@ -675,7 +675,8 @@ bool SkPathMeasure::isClosed() {
we're done with the path.
*/
bool SkPathMeasure::nextContour() {
- fLength = -1;
+ (void)this->getLength(); // make sure we measure the current contour
+ fLength = -1; // now signal that we should build the next set of segments
return this->getLength() > 0;
}
diff --git a/tests/PathMeasureTest.cpp b/tests/PathMeasureTest.cpp
index df66578f1b..bc75c5f122 100644
--- a/tests/PathMeasureTest.cpp
+++ b/tests/PathMeasureTest.cpp
@@ -217,3 +217,13 @@ DEF_TEST(PathMeasureConic, reporter) {
REPORTER_ASSERT(reporter, 19.5f < stdP.fX && stdP.fX < 20.5f);
REPORTER_ASSERT(reporter, 19.5f < hiP.fX && hiP.fX < 20.5f);
}
+
+// Regression test for b/26425223
+DEF_TEST(PathMeasure_nextctr, reporter) {
+ SkPath path;
+ path.moveTo(0, 0); path.lineTo(100, 0);
+
+ SkPathMeasure meas(path, false);
+ // only expect 1 contour, even if we didn't explicitly call getLength() ourselves
+ REPORTER_ASSERT(reporter, !meas.nextContour());
+}