xref: /aosp_15_r20/external/skia/include/utils/SkNWayCanvas.h (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Worker 
2*c8dee2aaSAndroid Build Coastguard Worker /*
3*c8dee2aaSAndroid Build Coastguard Worker  * Copyright 2011 Google Inc.
4*c8dee2aaSAndroid Build Coastguard Worker  *
5*c8dee2aaSAndroid Build Coastguard Worker  * Use of this source code is governed by a BSD-style license that can be
6*c8dee2aaSAndroid Build Coastguard Worker  * found in the LICENSE file.
7*c8dee2aaSAndroid Build Coastguard Worker  */
8*c8dee2aaSAndroid Build Coastguard Worker 
9*c8dee2aaSAndroid Build Coastguard Worker #ifndef SkNWayCanvas_DEFINED
10*c8dee2aaSAndroid Build Coastguard Worker #define SkNWayCanvas_DEFINED
11*c8dee2aaSAndroid Build Coastguard Worker 
12*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkCanvasVirtualEnforcer.h"
13*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkColor.h"
14*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkM44.h"
15*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkRefCnt.h"
16*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkSamplingOptions.h"
17*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkScalar.h"
18*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkTypes.h"
19*c8dee2aaSAndroid Build Coastguard Worker #include "include/private/base/SkTDArray.h"
20*c8dee2aaSAndroid Build Coastguard Worker #include "include/utils/SkNoDrawCanvas.h"
21*c8dee2aaSAndroid Build Coastguard Worker 
22*c8dee2aaSAndroid Build Coastguard Worker #include <cstddef>
23*c8dee2aaSAndroid Build Coastguard Worker 
24*c8dee2aaSAndroid Build Coastguard Worker namespace sktext {
25*c8dee2aaSAndroid Build Coastguard Worker class GlyphRunList;
26*c8dee2aaSAndroid Build Coastguard Worker }
27*c8dee2aaSAndroid Build Coastguard Worker 
28*c8dee2aaSAndroid Build Coastguard Worker class SkCanvas;
29*c8dee2aaSAndroid Build Coastguard Worker class SkData;
30*c8dee2aaSAndroid Build Coastguard Worker class SkDrawable;
31*c8dee2aaSAndroid Build Coastguard Worker class SkImage;
32*c8dee2aaSAndroid Build Coastguard Worker class SkMatrix;
33*c8dee2aaSAndroid Build Coastguard Worker class SkPaint;
34*c8dee2aaSAndroid Build Coastguard Worker class SkPath;
35*c8dee2aaSAndroid Build Coastguard Worker class SkPicture;
36*c8dee2aaSAndroid Build Coastguard Worker class SkRRect;
37*c8dee2aaSAndroid Build Coastguard Worker class SkRegion;
38*c8dee2aaSAndroid Build Coastguard Worker class SkShader;
39*c8dee2aaSAndroid Build Coastguard Worker class SkTextBlob;
40*c8dee2aaSAndroid Build Coastguard Worker class SkVertices;
41*c8dee2aaSAndroid Build Coastguard Worker enum class SkBlendMode;
42*c8dee2aaSAndroid Build Coastguard Worker enum class SkClipOp;
43*c8dee2aaSAndroid Build Coastguard Worker struct SkDrawShadowRec;
44*c8dee2aaSAndroid Build Coastguard Worker struct SkPoint;
45*c8dee2aaSAndroid Build Coastguard Worker struct SkRSXform;
46*c8dee2aaSAndroid Build Coastguard Worker struct SkRect;
47*c8dee2aaSAndroid Build Coastguard Worker 
48*c8dee2aaSAndroid Build Coastguard Worker namespace sktext::gpu { class Slug; }
49*c8dee2aaSAndroid Build Coastguard Worker 
50*c8dee2aaSAndroid Build Coastguard Worker class SK_API SkNWayCanvas : public SkCanvasVirtualEnforcer<SkNoDrawCanvas> {
51*c8dee2aaSAndroid Build Coastguard Worker public:
52*c8dee2aaSAndroid Build Coastguard Worker     SkNWayCanvas(int width, int height);
53*c8dee2aaSAndroid Build Coastguard Worker     ~SkNWayCanvas() override;
54*c8dee2aaSAndroid Build Coastguard Worker 
55*c8dee2aaSAndroid Build Coastguard Worker     virtual void addCanvas(SkCanvas*);
56*c8dee2aaSAndroid Build Coastguard Worker     virtual void removeCanvas(SkCanvas*);
57*c8dee2aaSAndroid Build Coastguard Worker     virtual void removeAll();
58*c8dee2aaSAndroid Build Coastguard Worker 
59*c8dee2aaSAndroid Build Coastguard Worker protected:
60*c8dee2aaSAndroid Build Coastguard Worker     SkTDArray<SkCanvas*> fList;
61*c8dee2aaSAndroid Build Coastguard Worker 
62*c8dee2aaSAndroid Build Coastguard Worker     void willSave() override;
63*c8dee2aaSAndroid Build Coastguard Worker     SaveLayerStrategy getSaveLayerStrategy(const SaveLayerRec&) override;
64*c8dee2aaSAndroid Build Coastguard Worker     bool onDoSaveBehind(const SkRect*) override;
65*c8dee2aaSAndroid Build Coastguard Worker     void willRestore() override;
66*c8dee2aaSAndroid Build Coastguard Worker 
67*c8dee2aaSAndroid Build Coastguard Worker     void didConcat44(const SkM44&) override;
68*c8dee2aaSAndroid Build Coastguard Worker     void didSetM44(const SkM44&) override;
69*c8dee2aaSAndroid Build Coastguard Worker     void didScale(SkScalar, SkScalar) override;
70*c8dee2aaSAndroid Build Coastguard Worker     void didTranslate(SkScalar, SkScalar) override;
71*c8dee2aaSAndroid Build Coastguard Worker 
72*c8dee2aaSAndroid Build Coastguard Worker     void onDrawDRRect(const SkRRect&, const SkRRect&, const SkPaint&) override;
73*c8dee2aaSAndroid Build Coastguard Worker     void onDrawGlyphRunList(const sktext::GlyphRunList&, const SkPaint&) override;
74*c8dee2aaSAndroid Build Coastguard Worker     void onDrawTextBlob(const SkTextBlob* blob, SkScalar x, SkScalar y,
75*c8dee2aaSAndroid Build Coastguard Worker                         const SkPaint& paint) override;
76*c8dee2aaSAndroid Build Coastguard Worker     void onDrawSlug(const sktext::gpu::Slug* slug, const SkPaint& paint) override;
77*c8dee2aaSAndroid Build Coastguard Worker     void onDrawPatch(const SkPoint cubics[12], const SkColor colors[4],
78*c8dee2aaSAndroid Build Coastguard Worker                      const SkPoint texCoords[4], SkBlendMode, const SkPaint& paint) override;
79*c8dee2aaSAndroid Build Coastguard Worker 
80*c8dee2aaSAndroid Build Coastguard Worker     void onDrawPaint(const SkPaint&) override;
81*c8dee2aaSAndroid Build Coastguard Worker     void onDrawBehind(const SkPaint&) override;
82*c8dee2aaSAndroid Build Coastguard Worker     void onDrawPoints(PointMode, size_t count, const SkPoint pts[], const SkPaint&) override;
83*c8dee2aaSAndroid Build Coastguard Worker     void onDrawRect(const SkRect&, const SkPaint&) override;
84*c8dee2aaSAndroid Build Coastguard Worker     void onDrawRegion(const SkRegion&, const SkPaint&) override;
85*c8dee2aaSAndroid Build Coastguard Worker     void onDrawOval(const SkRect&, const SkPaint&) override;
86*c8dee2aaSAndroid Build Coastguard Worker     void onDrawArc(const SkRect&, SkScalar, SkScalar, bool, const SkPaint&) override;
87*c8dee2aaSAndroid Build Coastguard Worker     void onDrawRRect(const SkRRect&, const SkPaint&) override;
88*c8dee2aaSAndroid Build Coastguard Worker     void onDrawPath(const SkPath&, const SkPaint&) override;
89*c8dee2aaSAndroid Build Coastguard Worker 
90*c8dee2aaSAndroid Build Coastguard Worker     void onDrawImage2(const SkImage*, SkScalar, SkScalar, const SkSamplingOptions&,
91*c8dee2aaSAndroid Build Coastguard Worker                       const SkPaint*) override;
92*c8dee2aaSAndroid Build Coastguard Worker     void onDrawImageRect2(const SkImage*, const SkRect&, const SkRect&, const SkSamplingOptions&,
93*c8dee2aaSAndroid Build Coastguard Worker                           const SkPaint*, SrcRectConstraint) override;
94*c8dee2aaSAndroid Build Coastguard Worker     void onDrawImageLattice2(const SkImage*, const Lattice&, const SkRect&, SkFilterMode,
95*c8dee2aaSAndroid Build Coastguard Worker                              const SkPaint*) override;
96*c8dee2aaSAndroid Build Coastguard Worker     void onDrawAtlas2(const SkImage*, const SkRSXform[], const SkRect[], const SkColor[], int,
97*c8dee2aaSAndroid Build Coastguard Worker                   SkBlendMode, const SkSamplingOptions&, const SkRect*, const SkPaint*) override;
98*c8dee2aaSAndroid Build Coastguard Worker 
99*c8dee2aaSAndroid Build Coastguard Worker     void onDrawVerticesObject(const SkVertices*, SkBlendMode, const SkPaint&) override;
100*c8dee2aaSAndroid Build Coastguard Worker     void onDrawShadowRec(const SkPath&, const SkDrawShadowRec&) override;
101*c8dee2aaSAndroid Build Coastguard Worker 
102*c8dee2aaSAndroid Build Coastguard Worker     void onClipRect(const SkRect&, SkClipOp, ClipEdgeStyle) override;
103*c8dee2aaSAndroid Build Coastguard Worker     void onClipRRect(const SkRRect&, SkClipOp, ClipEdgeStyle) override;
104*c8dee2aaSAndroid Build Coastguard Worker     void onClipPath(const SkPath&, SkClipOp, ClipEdgeStyle) override;
105*c8dee2aaSAndroid Build Coastguard Worker     void onClipShader(sk_sp<SkShader>, SkClipOp) override;
106*c8dee2aaSAndroid Build Coastguard Worker     void onClipRegion(const SkRegion&, SkClipOp) override;
107*c8dee2aaSAndroid Build Coastguard Worker     void onResetClip() override;
108*c8dee2aaSAndroid Build Coastguard Worker 
109*c8dee2aaSAndroid Build Coastguard Worker     void onDrawPicture(const SkPicture*, const SkMatrix*, const SkPaint*) override;
110*c8dee2aaSAndroid Build Coastguard Worker     void onDrawDrawable(SkDrawable*, const SkMatrix*) override;
111*c8dee2aaSAndroid Build Coastguard Worker     void onDrawAnnotation(const SkRect&, const char[], SkData*) override;
112*c8dee2aaSAndroid Build Coastguard Worker 
113*c8dee2aaSAndroid Build Coastguard Worker     void onDrawEdgeAAQuad(const SkRect&, const SkPoint[4], QuadAAFlags, const SkColor4f&,
114*c8dee2aaSAndroid Build Coastguard Worker                           SkBlendMode) override;
115*c8dee2aaSAndroid Build Coastguard Worker     void onDrawEdgeAAImageSet2(const ImageSetEntry[], int count, const SkPoint[], const SkMatrix[],
116*c8dee2aaSAndroid Build Coastguard Worker                                const SkSamplingOptions&,const SkPaint*, SrcRectConstraint) override;
117*c8dee2aaSAndroid Build Coastguard Worker     class Iter;
118*c8dee2aaSAndroid Build Coastguard Worker private:
119*c8dee2aaSAndroid Build Coastguard Worker     using INHERITED = SkCanvasVirtualEnforcer<SkNoDrawCanvas>;
120*c8dee2aaSAndroid Build Coastguard Worker };
121*c8dee2aaSAndroid Build Coastguard Worker 
122*c8dee2aaSAndroid Build Coastguard Worker 
123*c8dee2aaSAndroid Build Coastguard Worker #endif
124