/* * 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 SkSGClipEffect_DEFINED #define SkSGClipEffect_DEFINED #include "modules/sksg/include/SkSGEffectNode.h" namespace sksg { class GeometryNode; /** * Concrete Effect node, applying a clip to its descendants. * */ class ClipEffect final : public EffectNode { public: static sk_sp Make(sk_sp child, sk_sp clip, bool aa = false) { return (child && clip) ? sk_sp(new ClipEffect(std::move(child), std::move(clip), aa)) : nullptr; } ~ClipEffect() override; protected: ClipEffect(sk_sp, sk_sp, bool aa); void onRender(SkCanvas*, const RenderContext*) const override; const RenderNode* onNodeAt(const SkPoint&) const override; SkRect onRevalidate(InvalidationController*, const SkMatrix&) override; private: const sk_sp fClipNode; const bool fAntiAlias; bool fNoop = false; using INHERITED = EffectNode; }; } // namespace sksg #endif // SkSGClipEffect_DEFINED