/* * Copyright 2018 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef SkSGRoundEffect_DEFINED #define SkSGRoundEffect_DEFINED #include "SkSGGeometryNode.h" #include "SkPath.h" namespace sksg { /** * Concrete Geometry node, applying a rounded-corner effect to its child. */ class RoundEffect final : public GeometryNode { public: static sk_sp<RoundEffect> Make(sk_sp<GeometryNode> child) { return child ? sk_sp<RoundEffect>(new RoundEffect(std::move(child))) : nullptr; } ~RoundEffect() override; SG_ATTRIBUTE(Radius, SkScalar, fRadius) protected: void onClip(SkCanvas*, bool antiAlias) const override; void onDraw(SkCanvas*, const SkPaint&) const override; bool onContains(const SkPoint&) const override; SkRect onRevalidate(InvalidationController*, const SkMatrix&) override; SkPath onAsPath() const override; private: explicit RoundEffect(sk_sp<GeometryNode>); const sk_sp<GeometryNode> fChild; SkPath fRoundedPath; SkScalar fRadius = 0; using INHERITED = GeometryNode; }; } // namespace sksg #endif // SkSGRoundEffect_DEFINED