Coverage Report

Created: 2024-05-20 07:14

/src/skia/modules/sksg/include/SkSGMerge.h
Line
Count
Source
1
/*
2
 * Copyright 2017 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 SkSGMerge_DEFINED
9
#define SkSGMerge_DEFINED
10
11
#include "include/core/SkPath.h"
12
#include "include/core/SkRect.h"
13
#include "include/core/SkRefCnt.h"
14
#include "modules/sksg/include/SkSGGeometryNode.h"
15
16
#include <utility>
17
#include <vector>
18
19
class SkCanvas;
20
class SkMatrix;
21
class SkPaint;
22
struct SkPoint;
23
24
namespace sksg {
25
class InvalidationController;
26
27
/**
28
 * Concrete Geometry node, combining other geometries based on Mode.
29
 */
30
class Merge final : public GeometryNode {
31
public:
32
    enum class Mode {
33
        // Append path mode.
34
        kMerge,
35
36
        // SkPathOp ops.
37
        kUnion,
38
        kIntersect,
39
        kDifference,
40
        kReverseDifference,
41
        kXOR,
42
    };
43
44
    struct Rec {
45
        sk_sp<GeometryNode> fGeo;
46
        Mode                fMode;
47
    };
48
49
242k
    static sk_sp<Merge> Make(std::vector<Rec>&& recs) {
50
242k
        return sk_sp<Merge>(new Merge(std::move(recs)));
51
242k
    }
52
53
    ~Merge() override;
54
55
protected:
56
    void onClip(SkCanvas*, bool antiAlias) const override;
57
    void onDraw(SkCanvas*, const SkPaint&) const override;
58
    bool onContains(const SkPoint&)        const override;
59
60
    SkRect onRevalidate(InvalidationController*, const SkMatrix&) override;
61
    SkPath onAsPath() const override;
62
63
private:
64
    Merge(std::vector<Rec>&& recs);
65
66
    const std::vector<Rec> fRecs;
67
    SkPath                 fMerged;
68
69
    using INHERITED = GeometryNode;
70
};
71
72
} // namespace sksg
73
74
#endif // SkSGMerge_DEFINED