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
15namespace sksg {
16
17/**
18 * Concrete Geometry node, applying a rounded-corner effect to its child.
19 */
20class RoundEffect final : public GeometryNode {
21public:
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
30protected:
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
38private:
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