From d3cfd94228e6e58bb43dc4f799b4e443fba027a3 Mon Sep 17 00:00:00 2001 From: caryclark Date: Thu, 17 Mar 2016 05:33:28 -0700 Subject: don't create zero length intervals Dashing a pattern without zero-length intervals should not create them if the end of the on interval coincides with the beginning of the initial dash offset. R=reed@google.com BUG=591993 GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1766243004 Committed: https://skia.googlesource.com/skia/+/18bbd00190623fb6cdb119df4a118ac3c1aed52a Review URL: https://codereview.chromium.org/1766243004 --- gm/bug530095.cpp | 13 +++++++++++++ src/utils/SkDashPath.cpp | 7 ++++--- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/gm/bug530095.cpp b/gm/bug530095.cpp index 690da3c9d0..76f6bc8f2e 100644 --- a/gm/bug530095.cpp +++ b/gm/bug530095.cpp @@ -46,3 +46,16 @@ DEF_SIMPLE_GM(bug530095, canvas, 900, 1200) { canvas->translate(4, 4); canvas->drawPath(path2, paint); } + +DEF_SIMPLE_GM(bug591993, canvas, 40, 140) { + SkPaint p; + p.setColor(SK_ColorRED); + p.setAntiAlias(true); + p.setStyle(SkPaint::kStroke_Style); + p.setStrokeCap(SkPaint::kRound_Cap); + p.setStrokeWidth(10); + SkScalar intervals[] = { 100, 100 }; + SkPathEffect* dash = SkDashPathEffect::Create(intervals, SK_ARRAY_COUNT(intervals), 100); + p.setPathEffect(dash)->unref(); + canvas->drawLine(20, 20, 120, 20, p); +} diff --git a/src/utils/SkDashPath.cpp b/src/utils/SkDashPath.cpp index cd01a9972b..0d2783eba2 100644 --- a/src/utils/SkDashPath.cpp +++ b/src/utils/SkDashPath.cpp @@ -16,11 +16,12 @@ static inline int is_even(int x) { static SkScalar find_first_interval(const SkScalar intervals[], SkScalar phase, int32_t* index, int count) { for (int i = 0; i < count; ++i) { - if (phase > intervals[i]) { - phase -= intervals[i]; + SkScalar gap = intervals[i]; + if (phase > gap || (phase == gap && gap)) { + phase -= gap; } else { *index = i; - return intervals[i] - phase; + return gap - phase; } } // If we get here, phase "appears" to be larger than our length. This -- cgit v1.2.3