blob: b6e888b047bc48333b185cb2564e5d44cd38486a [file] [log] [blame]
reed@google.com63d73742012-01-10 15:33:12 +00001/*
2 * Copyright 2011 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#include "SkCanvas.h"
10#include "SkPath.h"
11#include "SkTypeface.h"
12
reed@google.com63d73742012-01-10 15:33:12 +000013namespace skiagm {
14
15class StrokeFillGM : public GM {
16public:
17 StrokeFillGM() {
18
19 }
20
21protected:
commit-bot@chromium.orga90c6802014-04-30 13:20:45 +000022
mtklein36352bf2015-03-25 18:17:31 -070023 SkString onShortName() override {
reed@google.com63d73742012-01-10 15:33:12 +000024 return SkString("stroke-fill");
25 }
26
mtklein36352bf2015-03-25 18:17:31 -070027 SkISize onISize() override {
tfarinaf5393182014-06-09 23:59:03 -070028 return SkISize::Make(640, 480);
reed@google.com63d73742012-01-10 15:33:12 +000029 }
30
bungeman@google.comf8aa18c2012-03-19 21:04:52 +000031 static void show_bold(SkCanvas* canvas, const void* text, int len,
32 SkScalar x, SkScalar y, const SkPaint& paint) {
reed@google.com188bfcf2012-01-17 18:26:38 +000033 SkPaint p(paint);
34 canvas->drawText(text, len, x, y, p);
35 p.setFakeBoldText(true);
36 canvas->drawText(text, len, x, y + SkIntToScalar(120), p);
37 }
38
mtklein36352bf2015-03-25 18:17:31 -070039 void onDraw(SkCanvas* canvas) override {
reed@google.com188bfcf2012-01-17 18:26:38 +000040 SkScalar x = SkIntToScalar(100);
41 SkScalar y = SkIntToScalar(88);
42
reed@google.comd1ab9322012-01-10 18:40:03 +000043 SkPaint paint;
reed@google.comd1ab9322012-01-10 18:40:03 +000044 paint.setAntiAlias(true);
45 paint.setTextSize(SkIntToScalar(100));
reed@google.comb435bd72012-01-10 19:28:01 +000046 paint.setStrokeWidth(SkIntToScalar(5));
rmistry@google.comae933ce2012-08-23 18:19:56 +000047
Cary Clark992c7b02014-07-31 08:58:44 -040048 sk_tool_utils::set_portable_typeface(&paint, "Papyrus");
bungeman@google.comf8aa18c2012-03-19 21:04:52 +000049 show_bold(canvas, "Hello", 5, x, y, paint);
reed@google.com188bfcf2012-01-17 18:26:38 +000050
Cary Clark992c7b02014-07-31 08:58:44 -040051 sk_tool_utils::set_portable_typeface(&paint, "Hiragino Maru Gothic Pro");
bungeman@google.comf8aa18c2012-03-19 21:04:52 +000052 const unsigned char hyphen[] = { 0xE3, 0x83, 0xBC };
53 show_bold(canvas, hyphen, SK_ARRAY_COUNT(hyphen), x + SkIntToScalar(300), y, paint);
reed@google.com188bfcf2012-01-17 18:26:38 +000054
55 paint.setStyle(SkPaint::kStrokeAndFill_Style);
56
reed@google.comd1ab9322012-01-10 18:40:03 +000057 SkPath path;
58 path.setFillType(SkPath::kWinding_FillType);
reed@google.comb435bd72012-01-10 19:28:01 +000059 path.addCircle(x, y + SkIntToScalar(200), SkIntToScalar(50), SkPath::kCW_Direction);
60 path.addCircle(x, y + SkIntToScalar(200), SkIntToScalar(40), SkPath::kCCW_Direction);
reed@google.comd1ab9322012-01-10 18:40:03 +000061 canvas->drawPath(path, paint);
rmistry@google.comae933ce2012-08-23 18:19:56 +000062
reed@google.comd1ab9322012-01-10 18:40:03 +000063 SkPath path2;
64 path2.setFillType(SkPath::kWinding_FillType);
reed@google.comb435bd72012-01-10 19:28:01 +000065 path2.addCircle(x + SkIntToScalar(120), y + SkIntToScalar(200), SkIntToScalar(50), SkPath::kCCW_Direction);
66 path2.addCircle(x + SkIntToScalar(120), y + SkIntToScalar(200), SkIntToScalar(40), SkPath::kCW_Direction);
reed@google.comd1ab9322012-01-10 18:40:03 +000067 canvas->drawPath(path2, paint);
rmistry@google.comae933ce2012-08-23 18:19:56 +000068
reed@google.comd1ab9322012-01-10 18:40:03 +000069 path2.reset();
reed@google.comb435bd72012-01-10 19:28:01 +000070 path2.addCircle(x + SkIntToScalar(240), y + SkIntToScalar(200), SkIntToScalar(50), SkPath::kCCW_Direction);
reed@google.comd1ab9322012-01-10 18:40:03 +000071 canvas->drawPath(path2, paint);
72 SkASSERT(path2.cheapIsDirection(SkPath::kCCW_Direction));
rmistry@google.comae933ce2012-08-23 18:19:56 +000073
reed@google.comd1ab9322012-01-10 18:40:03 +000074 path2.reset();
75 SkASSERT(!path2.cheapComputeDirection(NULL));
reed@google.comb435bd72012-01-10 19:28:01 +000076 path2.addCircle(x + SkIntToScalar(360), y + SkIntToScalar(200), SkIntToScalar(50), SkPath::kCW_Direction);
reed@google.comd1ab9322012-01-10 18:40:03 +000077 SkASSERT(path2.cheapIsDirection(SkPath::kCW_Direction));
78 canvas->drawPath(path2, paint);
robertphillips4f662e62014-12-29 14:06:51 -080079
80 SkRect r = SkRect::MakeXYWH(x - SkIntToScalar(50), y + SkIntToScalar(280),
81 SkIntToScalar(100), SkIntToScalar(100));
82 SkPath path3;
83 path3.setFillType(SkPath::kWinding_FillType);
84 path3.addRect(r, SkPath::kCW_Direction);
85 r.inset(SkIntToScalar(10), SkIntToScalar(10));
86 path3.addRect(r, SkPath::kCCW_Direction);
87 canvas->drawPath(path3, paint);
88
89 r = SkRect::MakeXYWH(x + SkIntToScalar(70), y + SkIntToScalar(280),
90 SkIntToScalar(100), SkIntToScalar(100));
91 SkPath path4;
92 path4.setFillType(SkPath::kWinding_FillType);
93 path4.addRect(r, SkPath::kCCW_Direction);
94 r.inset(SkIntToScalar(10), SkIntToScalar(10));
95 path4.addRect(r, SkPath::kCW_Direction);
96 canvas->drawPath(path4, paint);
97
98 r = SkRect::MakeXYWH(x + SkIntToScalar(190), y + SkIntToScalar(280),
99 SkIntToScalar(100), SkIntToScalar(100));
100 path4.reset();
101 SkASSERT(!path4.cheapComputeDirection(NULL));
102 path4.addRect(r, SkPath::kCCW_Direction);
103 SkASSERT(path4.cheapIsDirection(SkPath::kCCW_Direction));
104 path4.moveTo(0, 0); // test for crbug.com/247770
105 canvas->drawPath(path4, paint);
106
107 r = SkRect::MakeXYWH(x + SkIntToScalar(310), y + SkIntToScalar(280),
108 SkIntToScalar(100), SkIntToScalar(100));
109 path4.reset();
110 SkASSERT(!path4.cheapComputeDirection(NULL));
111 path4.addRect(r, SkPath::kCW_Direction);
112 SkASSERT(path4.cheapIsDirection(SkPath::kCW_Direction));
113 path4.moveTo(0, 0); // test for crbug.com/247770
114 canvas->drawPath(path4, paint);
reed@google.com63d73742012-01-10 15:33:12 +0000115 }
116
117private:
118 typedef GM INHERITED;
119};
120
121//////////////////////////////////////////////////////////////////////////////
122
robertphillips4f662e62014-12-29 14:06:51 -0800123DEF_GM(return SkNEW(StrokeFillGM);)
reed@google.com63d73742012-01-10 15:33:12 +0000124
125}