SkSGMaskEffect.h 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  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. #ifndef SkSGMaskEffect_DEFINED
  8. #define SkSGMaskEffect_DEFINED
  9. #include "modules/sksg/include/SkSGEffectNode.h"
  10. namespace sksg {
  11. /**
  12. * Concrete Effect node, applying a mask to its descendants.
  13. *
  14. */
  15. class MaskEffect final : public EffectNode {
  16. public:
  17. enum class Mode {
  18. kNormal,
  19. kInvert
  20. };
  21. static sk_sp<MaskEffect> Make(sk_sp<RenderNode> child, sk_sp<RenderNode> mask,
  22. Mode mode = Mode::kNormal) {
  23. return (child && mask)
  24. ? sk_sp<MaskEffect>(new MaskEffect(std::move(child), std::move(mask), mode))
  25. : nullptr;
  26. }
  27. ~MaskEffect() override;
  28. protected:
  29. MaskEffect(sk_sp<RenderNode>, sk_sp<RenderNode> mask, Mode);
  30. void onRender(SkCanvas*, const RenderContext*) const override;
  31. const RenderNode* onNodeAt(const SkPoint&) const override;
  32. SkRect onRevalidate(InvalidationController*, const SkMatrix&) override;
  33. private:
  34. const sk_sp<RenderNode> fMaskNode;
  35. const Mode fMaskMode;
  36. typedef EffectNode INHERITED;
  37. };
  38. } // namespace sksg
  39. #endif // SkSGMaskEffect_DEFINED