Coverage Report

Created: 2024-05-20 07:14

/src/skia/modules/sksg/include/SkSGMaskEffect.h
Line
Count
Source
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 SkSGMaskEffect_DEFINED
9
#define SkSGMaskEffect_DEFINED
10
11
#include "include/core/SkRect.h"
12
#include "include/core/SkRefCnt.h"
13
#include "modules/sksg/include/SkSGEffectNode.h"
14
#include "modules/sksg/include/SkSGRenderNode.h"
15
16
#include <cstdint>
17
#include <utility>
18
19
class SkCanvas;
20
class SkMatrix;
21
struct SkPoint;
22
23
namespace sksg {
24
class InvalidationController;
25
26
/**
27
 * Concrete Effect node, applying a mask to its descendants.
28
 *
29
 */
30
class MaskEffect final : public EffectNode {
31
public:
32
    enum class Mode : uint32_t {
33
        kAlphaNormal,
34
        kAlphaInvert,
35
        kLumaNormal,
36
        kLumaInvert,
37
    };
38
39
    static sk_sp<MaskEffect> Make(sk_sp<RenderNode> child, sk_sp<RenderNode> mask,
40
35.3k
                                  Mode mode = Mode::kAlphaNormal) {
41
35.3k
        return (child && mask)
42
35.3k
            ? sk_sp<MaskEffect>(new MaskEffect(std::move(child), std::move(mask), mode))
43
35.3k
            : nullptr;
44
35.3k
    }
45
46
    ~MaskEffect() override;
47
48
protected:
49
    MaskEffect(sk_sp<RenderNode>, sk_sp<RenderNode> mask, Mode);
50
51
    void onRender(SkCanvas*, const RenderContext*) const override;
52
    const RenderNode* onNodeAt(const SkPoint&)     const override;
53
54
    SkRect onRevalidate(InvalidationController*, const SkMatrix&) override;
55
56
private:
57
    const sk_sp<RenderNode> fMaskNode;
58
    const Mode              fMaskMode;
59
60
    using INHERITED = EffectNode;
61
};
62
63
} // namespace sksg
64
65
#endif // SkSGMaskEffect_DEFINED