diff options
author | robertphillips <robertphillips@google.com> | 2014-11-17 12:11:42 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-11-17 12:11:42 -0800 |
commit | f52a063dfd7883bbaa58617416a48c2be724e36b (patch) | |
tree | 33ba011391752281e896396e655edf5783953aca /tests | |
parent | a18cc77c338e79b5de5c7ee883da31f6befad9bc (diff) |
Fix yet another convexicator issue
This CL fixes the case where a bad initial vector (i.e., nearly zero) managed to short circuit all of the convexicator's logic. The initial bad vector would become the last vector and then never get displaced.
The history of this is:
https://codereview.chromium.org/298973004/
Switched the convexicator to not advance the last vector when the cross product wasn't significant
https://codereview.chromium.org/573763002/
Fixed a bug (crbug.com/412640) wherein a zero area path was being incorrectly categorized as convex b.c. opposite but equal vectors were not signaling concavity.
BUG=433683
Review URL: https://codereview.chromium.org/727283003
Diffstat (limited to 'tests')
-rw-r--r-- | tests/PathTest.cpp | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/tests/PathTest.cpp b/tests/PathTest.cpp index 94b91d261b..78cba5ba00 100644 --- a/tests/PathTest.cpp +++ b/tests/PathTest.cpp @@ -1206,6 +1206,20 @@ static void test_convexity2(skiatest::Reporter* reporter) { degenerateConcave.lineTo(41.446522f, 376.25f); check_convexity(reporter, degenerateConcave, SkPath::kConcave_Convexity); check_direction(reporter, degenerateConcave, SkPath::kUnknown_Direction); + + // http://crbug.com/433683 + SkPath badFirstVector; + badFirstVector.moveTo(501.087708f, 319.610352f); + badFirstVector.lineTo(501.087708f, 319.610352f); + badFirstVector.cubicTo(501.087677f, 319.610321f, 449.271606f, 258.078674f, 395.084564f, 198.711182f); + badFirstVector.cubicTo(358.967072f, 159.140717f, 321.910553f, 120.650436f, 298.442322f, 101.955399f); + badFirstVector.lineTo(301.557678f, 98.044601f); + badFirstVector.cubicTo(325.283844f, 116.945084f, 362.615204f, 155.720825f, 398.777557f, 195.340454f); + badFirstVector.cubicTo(453.031860f, 254.781662f, 504.912262f, 316.389618f, 504.912292f, 316.389648f); + badFirstVector.lineTo(504.912292f, 316.389648f); + badFirstVector.lineTo(501.087708f, 319.610352f); + badFirstVector.close(); + check_convexity(reporter, badFirstVector, SkPath::kConcave_Convexity); } static void check_convex_bounds(skiatest::Reporter* reporter, const SkPath& p, |