Coverage Report

Created: 2024-05-20 07:14

/src/skia/modules/sksg/include/SkSGClipEffect.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 SkSGClipEffect_DEFINED
9
#define SkSGClipEffect_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/SkSGGeometryNode.h"
15
#include "modules/sksg/include/SkSGRenderNode.h"
16
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 clip to its descendants.
28
 *
29
 */
30
class ClipEffect final : public EffectNode {
31
public:
32
    static sk_sp<ClipEffect> Make(sk_sp<RenderNode> child, sk_sp<GeometryNode> clip,
33
83.1k
                                  bool aa = false, bool force_clip = false) {
34
83.1k
        return (child && clip)
35
83.1k
            ? sk_sp<ClipEffect>(new ClipEffect(std::move(child), std::move(clip), aa, force_clip))
36
83.1k
            : nullptr;
37
83.1k
    }
38
39
    ~ClipEffect() override;
40
41
protected:
42
    ClipEffect(sk_sp<RenderNode>, sk_sp<GeometryNode>, bool aa, bool force_clip);
43
44
    void onRender(SkCanvas*, const RenderContext*) const override;
45
    const RenderNode* onNodeAt(const SkPoint&)     const override;
46
47
    SkRect onRevalidate(InvalidationController*, const SkMatrix&) override;
48
49
private:
50
    const sk_sp<GeometryNode> fClipNode;
51
    const bool                fAntiAlias,
52
                              fForceClip;
53
54
    bool                      fNoop = false;
55
56
    using INHERITED = EffectNode;
57
};
58
59
}  // namespace sksg
60
61
#endif // SkSGClipEffect_DEFINED