OLD | NEW |
(Empty) | |
| 1 /* |
| 2 * Copyright 2015 Google Inc. |
| 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. |
| 6 */ |
| 7 |
| 8 #include "gm.h" |
| 9 |
| 10 #include "SkDashPathEffect.h" |
| 11 #include "SkPaint.h" |
| 12 #include "SkPath.h" |
| 13 #include "SkRRect.h" |
| 14 |
| 15 namespace skiagm { |
| 16 |
| 17 class ContourStartGM : public GM { |
| 18 public: |
| 19 ContourStartGM() { |
| 20 const SkScalar kMaxDashLen = 100; |
| 21 const SkScalar kDashGrowth = 1.2f; |
| 22 |
| 23 SkSTArray<100, SkScalar> intervals; |
| 24 for (SkScalar len = 1; len < kMaxDashLen; len *= kDashGrowth) { |
| 25 intervals.push_back(len); |
| 26 intervals.push_back(len); |
| 27 } |
| 28 |
| 29 SkAutoTUnref<SkPathEffect> effect( |
| 30 SkDashPathEffect::Create(intervals.begin(), intervals.count(), 0)); |
| 31 |
| 32 fDashPaint.setAntiAlias(true); |
| 33 fDashPaint.setStyle(SkPaint::kStroke_Style); |
| 34 fDashPaint.setStrokeWidth(6); |
| 35 fDashPaint.setColor(0xff008000); |
| 36 fDashPaint.setPathEffect(effect); |
| 37 |
| 38 fPointsPaint.setColor(0xff800000); |
| 39 fPointsPaint.setStrokeWidth(3); |
| 40 |
| 41 fRect = SkRect::MakeLTRB(10, 10, 100, 70); |
| 42 } |
| 43 |
| 44 protected: |
| 45 SkString onShortName() override { |
| 46 return SkString("contour_start"); |
| 47 } |
| 48 |
| 49 SkISize onISize() override { return SkISize::Make(kImageWidth, kImageHeight)
; } |
| 50 |
| 51 void onDraw(SkCanvas* canvas) override { |
| 52 |
| 53 drawDirs(canvas, [](const SkRect& rect, SkPath::Direction dir, unsigned
startIndex) { |
| 54 SkPath path; |
| 55 path.addRect(rect, dir, startIndex); |
| 56 return path; |
| 57 }); |
| 58 |
| 59 drawDirs(canvas, [](const SkRect& rect, SkPath::Direction dir, unsigned
startIndex) { |
| 60 SkPath path; |
| 61 path.addOval(rect, dir, startIndex); |
| 62 return path; |
| 63 }); |
| 64 |
| 65 drawDirs(canvas, [](const SkRect& rect, SkPath::Direction dir, unsigned
startIndex) { |
| 66 SkRRect rrect; |
| 67 const SkVector radii[4] = { {15, 15}, {15, 15}, {15, 15}, {15, 15}}; |
| 68 rrect.setRectRadii(rect, radii); |
| 69 |
| 70 SkPath path; |
| 71 path.addRRect(rrect, dir, startIndex); |
| 72 return path; |
| 73 }); |
| 74 |
| 75 drawDirs(canvas, [](const SkRect& rect, SkPath::Direction dir, unsigned
startIndex) { |
| 76 SkRRect rrect; |
| 77 rrect.setRect(rect); |
| 78 |
| 79 SkPath path; |
| 80 path.addRRect(rrect, dir, startIndex); |
| 81 return path; |
| 82 }); |
| 83 |
| 84 drawDirs(canvas, [](const SkRect& rect, SkPath::Direction dir, unsigned
startIndex) { |
| 85 SkRRect rrect; |
| 86 rrect.setOval(rect); |
| 87 |
| 88 SkPath path; |
| 89 path.addRRect(rrect, dir, startIndex); |
| 90 return path; |
| 91 }); |
| 92 |
| 93 } |
| 94 |
| 95 private: |
| 96 static const int kImageWidth = 1200; |
| 97 static const int kImageHeight = 600; |
| 98 |
| 99 SkPaint fDashPaint, fPointsPaint; |
| 100 SkRect fRect; |
| 101 |
| 102 void drawDirs(SkCanvas* canvas, |
| 103 SkPath (*makePath)(const SkRect&, SkPath::Direction, unsigned)
) const { |
| 104 drawOneColumn(canvas, SkPath::kCW_Direction, makePath); |
| 105 canvas->translate(kImageWidth / 10, 0); |
| 106 drawOneColumn(canvas, SkPath::kCCW_Direction, makePath); |
| 107 canvas->translate(kImageWidth / 10, 0); |
| 108 } |
| 109 |
| 110 void drawOneColumn(SkCanvas* canvas, SkPath::Direction dir, |
| 111 SkPath (*makePath)(const SkRect&, SkPath::Direction, unsi
gned)) const { |
| 112 SkAutoCanvasRestore acr(canvas, true); |
| 113 |
| 114 for (unsigned i = 0; i < 8; ++i) { |
| 115 const SkPath path = makePath(fRect, dir, i); |
| 116 canvas->drawPath(path, fDashPaint); |
| 117 |
| 118 const int n = path.countPoints(); |
| 119 SkAutoTArray<SkPoint> points(n); |
| 120 path.getPoints(points.get(), n); |
| 121 canvas->drawPoints(SkCanvas::kPoints_PointMode, n, points.get(), fPo
intsPaint); |
| 122 |
| 123 canvas->translate(0, kImageHeight / 8); |
| 124 } |
| 125 } |
| 126 |
| 127 typedef GM INHERITED; |
| 128 }; |
| 129 |
| 130 DEF_GM( return new ContourStartGM(); ) |
| 131 |
| 132 } // namespace skiagm |
| 133 |
OLD | NEW |