aboutsummaryrefslogtreecommitdiffhomepage
path: root/gm/dashing.cpp
diff options
context:
space:
mode:
authorGravatar Brian Salomon <bsalomon@google.com>2017-12-21 11:56:42 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-12-21 22:45:15 +0000
commit72f78c37010eb2bf20be4884d4f376d122830dfd (patch)
tree3ff52aa1e3f3bc8776e85f9c64f4c371772b336b /gm/dashing.cpp
parent6925fc0429424cae67a887e6faa27f168995612a (diff)
Make GrShape recognize horizontal/vertical dashed lines with 0 off intervals as rrects.
Change-Id: Ic29b41911e0185d36093d5352f4494709e8124ba Reviewed-on: https://skia-review.googlesource.com/88428 Commit-Queue: Brian Salomon <bsalomon@google.com> Reviewed-by: Greg Daniel <egdaniel@google.com>
Diffstat (limited to 'gm/dashing.cpp')
-rw-r--r--gm/dashing.cpp36
1 files changed, 36 insertions, 0 deletions
diff --git a/gm/dashing.cpp b/gm/dashing.cpp
index 277769198a..9a5268949f 100644
--- a/gm/dashing.cpp
+++ b/gm/dashing.cpp
@@ -569,6 +569,42 @@ DEF_SIMPLE_GM(dashtextcaps, canvas, 512, 512) {
canvas->drawLine(8, 120, 456, 120, p);
}
+DEF_SIMPLE_GM(dash_line_zero_off_interval, canvas, 160, 330) {
+ static constexpr SkScalar kIntervals[] = {5.f, 0.f, 2.f, 0.f};
+ SkPaint dashPaint;
+ dashPaint.setPathEffect(SkDashPathEffect::Make(kIntervals, SK_ARRAY_COUNT(kIntervals), 0.f));
+ SkASSERT(dashPaint.getPathEffect());
+ dashPaint.setStyle(SkPaint::kStroke_Style);
+ dashPaint.setStrokeWidth(20.f);
+ static constexpr struct {
+ SkPoint fA, fB;
+ } kLines[] = {{{0.5f, 0.5f}, {30.5f, 0.5f}}, // horizontal
+ {{0.5f, 0.5f}, {0.5f, 30.5f}}, // vertical
+ {{0.5f, 0.5f}, {0.5f, 0.5f}}, // point
+ {{0.5f, 0.5f}, {25.5f, 25.5f}}}; // diagonal
+ SkScalar pad = 5.f + dashPaint.getStrokeWidth();
+ canvas->translate(pad / 2.f, pad / 2.f);
+ canvas->save();
+ SkScalar h = 0.f;
+ for (const auto& line : kLines) {
+ h = SkTMax(h, SkScalarAbs(line.fA.fY - line.fB.fY));
+ }
+ for (const auto& line : kLines) {
+ SkScalar w = SkScalarAbs(line.fA.fX - line.fB.fX);
+ for (auto cap : {SkPaint::kButt_Cap, SkPaint::kSquare_Cap, SkPaint::kRound_Cap}) {
+ dashPaint.setStrokeCap(cap);
+ for (auto aa : {false, true}) {
+ dashPaint.setAntiAlias(aa);
+ canvas->drawLine(line.fA, line.fB, dashPaint);
+ canvas->translate(0.f, pad + h);
+ }
+ }
+ canvas->restore();
+ canvas->translate(pad + w, 0.f);
+ canvas->save();
+ }
+}
+
//////////////////////////////////////////////////////////////////////////////
DEF_GM(return new DashingGM;)