| /* |
| * Copyright 2020 Google Inc. |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #include "gm/gm.h" |
| #include "include/core/SkCanvas.h" |
| #include "include/core/SkPath.h" |
| #include "include/core/SkPoint.h" |
| |
| static constexpr float kStrokeWidth = 100; |
| |
| class WideButtCaps : public skiagm::GM { |
| public: |
| WideButtCaps() {} |
| |
| protected: |
| |
| SkString onShortName() override { |
| return SkString("widebuttcaps"); |
| } |
| |
| SkISize onISize() override { |
| return SkISize::Make(120 * 4, 120 * 3 + 140); |
| } |
| |
| void onOnceBeforeDraw() override { |
| fStrokePaint.setAntiAlias(true); |
| fStrokePaint.setStrokeWidth(kStrokeWidth); |
| fStrokePaint.setColor(SK_ColorGREEN); |
| fStrokePaint.setStyle(SkPaint::kStroke_Style); |
| } |
| |
| void onDraw(SkCanvas* canvas) override { |
| SkAutoCanvasRestore arc(canvas, true); |
| canvas->translate(60, 60); |
| canvas->clear(SK_ColorBLACK); |
| |
| this->drawStrokes(canvas, |
| SkPath().lineTo(10,0).lineTo(10,10), |
| SkPath().cubicTo(10,0, 10,0, 10,10)); |
| canvas->translate(0, 120); |
| |
| this->drawStrokes(canvas, |
| SkPath().lineTo(0,-10).lineTo(0,10), |
| SkPath().cubicTo(0,-10, 0,-10, 0,10)); |
| canvas->translate(0, 120); |
| |
| this->drawStrokes(canvas, |
| SkPath().lineTo(0,-10).lineTo(10,-10).lineTo(10,10).lineTo(0,10), |
| SkPath().cubicTo(0,-10, 10,10, 0,10)); |
| canvas->translate(0, 140); |
| |
| this->drawStrokes(canvas, |
| SkPath().lineTo(0,-10).lineTo(10,-10).lineTo(10,0).lineTo(0,0), |
| SkPath().cubicTo(0,-10, 10,0, 0,0)); |
| canvas->translate(0, 120); |
| } |
| |
| void drawStrokes(SkCanvas* canvas, const SkPath& path, const SkPath& cubic) { |
| SkAutoCanvasRestore arc(canvas, true); |
| fStrokePaint.setStrokeJoin(SkPaint::kBevel_Join); |
| canvas->drawPath(path, fStrokePaint); |
| |
| canvas->translate(120, 0); |
| fStrokePaint.setStrokeJoin(SkPaint::kRound_Join); |
| canvas->drawPath(path, fStrokePaint); |
| |
| canvas->translate(120, 0); |
| fStrokePaint.setStrokeJoin(SkPaint::kMiter_Join); |
| canvas->drawPath(path, fStrokePaint); |
| |
| canvas->translate(120, 0); |
| canvas->drawPath(cubic, fStrokePaint); |
| } |
| |
| private: |
| SkPaint fStrokePaint; |
| typedef GM INHERITED; |
| }; |
| |
| DEF_GM( return new WideButtCaps; ) |