Flutter Engine
The Flutter Engine
pathinterior.cpp
Go to the documentation of this file.
1/*
2 * Copyright 2012 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"
12#include "include/core/SkPath.h"
13#include "include/core/SkRect.h"
15#include "include/core/SkSize.h"
17#include "tools/ToolUtils.h"
18
19static SkRect inset(const SkRect& r) {
20 SkRect rect = r;
21 rect.inset(r.width() / 8, r.height() / 8);
22 return rect;
23}
24
25class PathInteriorGM : public skiagm::GM {
26public:
28 this->setBGColor(0xFFDDDDDD);
29 }
30
31protected:
32 SkISize getISize() override { return SkISize::Make(770, 770); }
33
34 SkString getName() const override { return SkString("pathinterior"); }
35
36 void show(SkCanvas* canvas, const SkPath& path) {
38 paint.setAntiAlias(true);
39
41#if 0
42 bool hasInterior = path.hasRectangularInterior(&rect);
43#else
44 bool hasInterior = false;
45#endif
46
47 paint.setColor(hasInterior ? ToolUtils::color_to_565(0xFF8888FF) : SK_ColorGRAY);
48 canvas->drawPath(path, paint);
50 paint.setColor(SK_ColorRED);
51 canvas->drawPath(path, paint);
52
53 if (hasInterior) {
55 paint.setColor(0x8800FF00);
56 canvas->drawRect(rect, paint);
57 }
58 }
59
60 void onDraw(SkCanvas* canvas) override {
61 canvas->translate(8.5f, 8.5f);
62
63 const SkRect rect = { 0, 0, 80, 80 };
64 const SkScalar RAD = rect.width()/8;
65
66 int i = 0;
67 for (int insetFirst = 0; insetFirst <= 1; ++insetFirst) {
68 for (int doEvenOdd = 0; doEvenOdd <= 1; ++doEvenOdd) {
69 for (int outerRR = 0; outerRR <= 1; ++outerRR) {
70 for (int innerRR = 0; innerRR <= 1; ++innerRR) {
71 for (int outerCW = 0; outerCW <= 1; ++outerCW) {
72 for (int innerCW = 0; innerCW <= 1; ++innerCW) {
77
78 SkRect r = insetFirst ? inset(rect) : rect;
79 if (outerRR) {
80 path.addRoundRect(r, RAD, RAD, outerDir);
81 } else {
82 path.addRect(r, outerDir);
83 }
84 r = insetFirst ? rect : inset(rect);
85 if (innerRR) {
86 path.addRoundRect(r, RAD, RAD, innerDir);
87 } else {
88 path.addRect(r, innerDir);
89 }
90
91 SkScalar dx = (i / 8) * rect.width() * 6 / 5;
92 SkScalar dy = (i % 8) * rect.height() * 6 / 5;
93 i++;
94 path.offset(dx, dy);
95
96 this->show(canvas, path);
97 }
98 }
99 }
100 }
101 }
102 }
103 }
104
105private:
106
107 using INHERITED = GM;
108};
109
110//////////////////////////////////////////////////////////////////////////////
111
112DEF_GM( return new PathInteriorGM; )
constexpr SkColor SK_ColorGRAY
Definition: SkColor.h:113
constexpr SkColor SK_ColorRED
Definition: SkColor.h:126
SkPathDirection
Definition: SkPathTypes.h:34
SkString getName() const override
void show(SkCanvas *canvas, const SkPath &path)
SkISize getISize() override
void onDraw(SkCanvas *canvas) override
void drawRect(const SkRect &rect, const SkPaint &paint)
Definition: SkCanvas.cpp:1673
void translate(SkScalar dx, SkScalar dy)
Definition: SkCanvas.cpp:1278
void drawPath(const SkPath &path, const SkPaint &paint)
Definition: SkCanvas.cpp:1747
@ kStroke_Style
set to stroke geometry
Definition: SkPaint.h:194
@ kFill_Style
set to fill geometry
Definition: SkPaint.h:193
Definition: SkPath.h:59
Definition: gm.h:110
GM(SkColor backgroundColor=SK_ColorWHITE)
Definition: gm.cpp:81
void setBGColor(SkColor)
Definition: gm.cpp:159
const Paint & paint
Definition: color_source.cc:38
float SkScalar
Definition: extension.cpp:12
#define DEF_GM(CODE)
Definition: gm.h:40
sk_sp< SkBlender > blender SkRect rect
Definition: SkRecords.h:350
skia_private::AutoTArray< sk_sp< SkImageFilter > > filters TypedMatrix matrix TypedMatrix matrix SkScalar dx
Definition: SkRecords.h:208
SkColor color_to_565(SkColor color)
Definition: ToolUtils.cpp:139
DEF_SWITCHES_START aot vmservice shared library Name of the *so containing AOT compiled Dart assets for launching the service isolate vm snapshot The VM snapshot data that will be memory mapped as read only SnapshotAssetPath must be present isolate snapshot The isolate snapshot data that will be memory mapped as read only SnapshotAssetPath must be present cache dir path
Definition: switches.h:57
static SkRect inset(const SkRect &r)
Definition: SkSize.h:16
static constexpr SkISize Make(int32_t w, int32_t h)
Definition: SkSize.h:20
constexpr float height() const
Definition: SkRect.h:769
constexpr float width() const
Definition: SkRect.h:762