aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests/EmptyPathTest.cpp
diff options
context:
space:
mode:
authorGravatar caryclark <caryclark@google.com>2015-09-09 07:04:33 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2015-09-09 07:04:33 -0700
commit62fb1ba1786863e545c89839b5706ad5151cec15 (patch)
treee880b4c5ad03e597cd2ae09515552bc096c89844 /tests/EmptyPathTest.cpp
parenta1254acdb344174e761f5061c820559dab64a74c (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.cpp19
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);
}
}
}