1 | /* |
---|---|
2 | * Copyright 2018 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 | #ifndef SkSGRoundEffect_DEFINED |
9 | #define SkSGRoundEffect_DEFINED |
10 | |
11 | #include "modules/sksg/include/SkSGGeometryNode.h" |
12 | |
13 | #include "include/core/SkPath.h" |
14 | |
15 | namespace sksg { |
16 | |
17 | /** |
18 | * Concrete Geometry node, applying a rounded-corner effect to its child. |
19 | */ |
20 | class RoundEffect final : public GeometryNode { |
21 | public: |
22 | static sk_sp<RoundEffect> Make(sk_sp<GeometryNode> child) { |
23 | return child ? sk_sp<RoundEffect>(new RoundEffect(std::move(child))) : nullptr; |
24 | } |
25 | |
26 | ~RoundEffect() override; |
27 | |
28 | SG_ATTRIBUTE(Radius, SkScalar, fRadius) |
29 | |
30 | protected: |
31 | void onClip(SkCanvas*, bool antiAlias) const override; |
32 | void onDraw(SkCanvas*, const SkPaint&) const override; |
33 | bool onContains(const SkPoint&) const override; |
34 | |
35 | SkRect onRevalidate(InvalidationController*, const SkMatrix&) override; |
36 | SkPath onAsPath() const override; |
37 | |
38 | private: |
39 | explicit RoundEffect(sk_sp<GeometryNode>); |
40 | |
41 | const sk_sp<GeometryNode> fChild; |
42 | |
43 | SkPath fRoundedPath; |
44 | SkScalar fRadius = 0; |
45 | |
46 | using INHERITED = GeometryNode; |
47 | }; |
48 | |
49 | } // namespace sksg |
50 | |
51 | #endif // SkSGRoundEffect_DEFINED |
52 |