blob: b2df5fecd381e3ef4c92da55a4189792ba13b1b5 [file] [log] [blame]
Chris Daltonde980232020-06-16 15:56:16 -06001/*
2 * Copyright 2020 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/gm.h"
9#include "include/core/SkCanvas.h"
10#include "include/core/SkPath.h"
11#include "include/core/SkPoint.h"
12
13static constexpr float kStrokeWidth = 100;
14
15class WideButtCaps : public skiagm::GM {
16public:
17 WideButtCaps() {}
18
19protected:
20
21 SkString onShortName() override {
22 return SkString("widebuttcaps");
23 }
24
25 SkISize onISize() override {
26 return SkISize::Make(120 * 4, 120 * 3 + 140);
27 }
28
29 void onOnceBeforeDraw() override {
30 fStrokePaint.setAntiAlias(true);
31 fStrokePaint.setStrokeWidth(kStrokeWidth);
32 fStrokePaint.setColor(SK_ColorGREEN);
33 fStrokePaint.setStyle(SkPaint::kStroke_Style);
34 }
35
36 void onDraw(SkCanvas* canvas) override {
37 SkAutoCanvasRestore arc(canvas, true);
38 canvas->translate(60, 60);
39 canvas->clear(SK_ColorBLACK);
40
41 this->drawStrokes(canvas,
42 SkPath().lineTo(10,0).lineTo(10,10),
43 SkPath().cubicTo(10,0, 10,0, 10,10));
44 canvas->translate(0, 120);
45
46 this->drawStrokes(canvas,
47 SkPath().lineTo(0,-10).lineTo(0,10),
48 SkPath().cubicTo(0,-10, 0,-10, 0,10));
49 canvas->translate(0, 120);
50
51 this->drawStrokes(canvas,
52 SkPath().lineTo(0,-10).lineTo(10,-10).lineTo(10,10).lineTo(0,10),
53 SkPath().cubicTo(0,-10, 10,10, 0,10));
54 canvas->translate(0, 140);
55
56 this->drawStrokes(canvas,
57 SkPath().lineTo(0,-10).lineTo(10,-10).lineTo(10,0).lineTo(0,0),
58 SkPath().cubicTo(0,-10, 10,0, 0,0));
59 canvas->translate(0, 120);
60 }
61
62 void drawStrokes(SkCanvas* canvas, const SkPath& path, const SkPath& cubic) {
63 SkAutoCanvasRestore arc(canvas, true);
64 fStrokePaint.setStrokeJoin(SkPaint::kBevel_Join);
65 canvas->drawPath(path, fStrokePaint);
66
67 canvas->translate(120, 0);
68 fStrokePaint.setStrokeJoin(SkPaint::kRound_Join);
69 canvas->drawPath(path, fStrokePaint);
70
71 canvas->translate(120, 0);
72 fStrokePaint.setStrokeJoin(SkPaint::kMiter_Join);
73 canvas->drawPath(path, fStrokePaint);
74
75 canvas->translate(120, 0);
76 canvas->drawPath(cubic, fStrokePaint);
77 }
78
79private:
80 SkPaint fStrokePaint;
81 typedef GM INHERITED;
82};
83
84DEF_GM( return new WideButtCaps; )