From 72f78c37010eb2bf20be4884d4f376d122830dfd Mon Sep 17 00:00:00 2001 From: Brian Salomon Date: Thu, 21 Dec 2017 11:56:42 -0500 Subject: 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 Reviewed-by: Greg Daniel --- gm/dashing.cpp | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'gm/dashing.cpp') 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;) -- cgit v1.2.3