diff options
Diffstat (limited to 'experimental/sksg/effects/SkSGMaskEffect.h')
-rw-r--r-- | experimental/sksg/effects/SkSGMaskEffect.h | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/experimental/sksg/effects/SkSGMaskEffect.h b/experimental/sksg/effects/SkSGMaskEffect.h new file mode 100644 index 0000000000..aef82b4ef6 --- /dev/null +++ b/experimental/sksg/effects/SkSGMaskEffect.h @@ -0,0 +1,44 @@ +/* + * 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 SkSGMaskEffect_DEFINED +#define SkSGMaskEffect_DEFINED + +#include "SkSGEffectNode.h" + +namespace sksg { + +/** + * Concrete Effect node, applying a mask to its descendants. + * + */ +class MaskEffect final : public EffectNode { +public: + static sk_sp<MaskEffect> Make(sk_sp<RenderNode> child, sk_sp<RenderNode> mask) { + return (child && mask) + ? sk_sp<MaskEffect>(new MaskEffect(std::move(child), std::move(mask))) + : nullptr; + } + + ~MaskEffect() override; + +protected: + MaskEffect(sk_sp<RenderNode>, sk_sp<RenderNode> mask); + + void onRender(SkCanvas*) const override; + + SkRect onRevalidate(InvalidationController*, const SkMatrix&) override; + +private: + sk_sp<RenderNode> fMaskNode; + + typedef EffectNode INHERITED; +}; + +} // namespace sksg + +#endif // SkSGMaskEffect_DEFINED |