diff options
author | caryclark <caryclark@google.com> | 2015-09-09 07:04:33 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-09-09 07:04:33 -0700 |
commit | 62fb1ba1786863e545c89839b5706ad5151cec15 (patch) | |
tree | e880b4c5ad03e597cd2ae09515552bc096c89844 /tests/EmptyPathTest.cpp | |
parent | a1254acdb344174e761f5061c820559dab64a74c (diff) |
more zero-length changes for svg compatibility
If a path contains a moveTo followed by a line or curve,
even if the line or curve has no length, SVG expects
the end caps to draw if the cap style is round or square.
Fredrik Söderquist attached a patch to the chrome bug
(slightly modified here) that fixes layout test failures
resulting from deleting special-case code in SVG
dealing with zero-length path segments.
R=reed@google.com,fs@opera.com
BUG=22974
Review URL: https://codereview.chromium.org/1330623003
Diffstat (limited to 'tests/EmptyPathTest.cpp')
-rw-r--r-- | tests/EmptyPathTest.cpp | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/tests/EmptyPathTest.cpp b/tests/EmptyPathTest.cpp index c4f011a0dc..060ef8d237 100644 --- a/tests/EmptyPathTest.cpp +++ b/tests/EmptyPathTest.cpp @@ -54,7 +54,13 @@ static void drawAndTest(skiatest::Reporter* reporter, const SkPath& path, } } -static void iter_paint(skiatest::Reporter* reporter, const SkPath& path, bool shouldDraw) { +enum DrawCaps { + kDontDrawCaps, + kDrawCaps +}; + +static void iter_paint(skiatest::Reporter* reporter, const SkPath& path, bool shouldDraw, + DrawCaps drawCaps) { static const SkPaint::Cap gCaps[] = { SkPaint::kButt_Cap, SkPaint::kRound_Cap, @@ -73,6 +79,11 @@ static void iter_paint(skiatest::Reporter* reporter, const SkPath& path, bool sh for (size_t cap = 0; cap < SK_ARRAY_COUNT(gCaps); ++cap) { for (size_t join = 0; join < SK_ARRAY_COUNT(gJoins); ++join) { for (size_t style = 0; style < SK_ARRAY_COUNT(gStyles); ++style) { + if (drawCaps && SkPaint::kButt_Cap != gCaps[cap] + && SkPaint::kFill_Style != gStyles[style]) { + continue; + } + SkPaint paint; paint.setStrokeWidth(SkIntToScalar(10)); @@ -127,10 +138,14 @@ static void test_emptydrawing(skiatest::Reporter* reporter) { if (doClose) { path.close(); } + /* zero length segments and close following moves draw round and square caps */ + bool allowCaps = make_L == gMakeProc[i] || make_Q == gMakeProc[i] + || make_C == gMakeProc[i] || make_MZM == gMakeProc[i]; + allowCaps |= SkToBool(doClose); for (size_t fill = 0; fill < SK_ARRAY_COUNT(gFills); ++fill) { path.setFillType(gFills[fill]); bool shouldDraw = path.isInverseFillType(); - iter_paint(reporter, path, shouldDraw); + iter_paint(reporter, path, shouldDraw, allowCaps ? kDrawCaps : kDontDrawCaps); } } } |