• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-2023 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef CORECANVASIMPL_H
17 #define CORECANVASIMPL_H
18 #include "base_impl.h"
19 #include "securec.h"
20 
21 #include "include/core/SkRefCnt.h"
22 
23 #include "draw/clip.h"
24 #include "draw/path.h"
25 #include "draw/paint.h"
26 #include "draw/shadow.h"
27 #include "effect/filter.h"
28 #include "image/bitmap.h"
29 #include "image/image_info.h"
30 #ifdef ACE_ENABLE_GPU
31 #include "image/gpu_context.h"
32 #endif
33 #include "image/image.h"
34 #include "image/picture.h"
35 #include "text/hm_symbol.h"
36 #include "text/text.h"
37 #include "text/text_blob.h"
38 #include "utils/matrix.h"
39 #include "utils/point.h"
40 #include "utils/point3.h"
41 #include "utils/rect.h"
42 #include "utils/region.h"
43 #include "utils/round_rect.h"
44 #include "utils/sampling_options.h"
45 #include "utils/scalar.h"
46 #include "utils/vertices.h"
47 
48 class SkSVGDOM;
49 
50 namespace OHOS {
51 namespace Media {
52 class PixelMap;
53 }
54 namespace Rosen {
55 namespace Drawing {
56 enum class SrcRectConstraint;
57 class SaveLayerOps;
58 enum class PointMode;
59 enum class QuadAAFlags;
60 struct Lattice;
61 class Canvas;
62 
63 class CoreCanvasImpl : public BaseImpl {
64 public:
CoreCanvasImpl()65     CoreCanvasImpl() {};
~CoreCanvasImpl()66     ~CoreCanvasImpl() override {};
67 
68     virtual void Bind(const Bitmap& bitmap) = 0;
69 
70     virtual Matrix GetTotalMatrix() const = 0;
71     virtual Rect GetLocalClipBounds() const = 0;
72     virtual RectI GetDeviceClipBounds() const = 0;
73 #ifdef ACE_ENABLE_GPU
74     virtual std::shared_ptr<GPUContext> GetGPUContext() const = 0;
75 #endif
76     virtual int32_t GetWidth() const = 0;
77     virtual int32_t GetHeight() const = 0;
78     virtual ImageInfo GetImageInfo() = 0;
79     virtual bool ReadPixels(const ImageInfo& dstInfo, void* dstPixels, size_t dstRowBytes,
80         int srcX, int srcY) = 0;
81     virtual bool ReadPixels(const Bitmap& dstBitmap, int srcX, int srcY) = 0;
82     // shapes
83     virtual void DrawPoint(const Point& point) = 0;
84     virtual void DrawPoints(PointMode mode, size_t count, const Point pts[]) = 0;
85     virtual void DrawLine(const Point& startPt, const Point& endPt) = 0;
86     virtual void DrawRect(const Rect& rect) = 0;
87     virtual void DrawRoundRect(const RoundRect& roundRect) = 0;
88     virtual void DrawNestedRoundRect(const RoundRect& outer, const RoundRect& inner) = 0;
89     virtual void DrawArc(const Rect& oval, scalar startAngle, scalar sweepAngle) = 0;
90     virtual void DrawPie(const Rect& oval, scalar startAngle, scalar sweepAngle) = 0;
91     virtual void DrawOval(const Rect& oval) = 0;
92     virtual void DrawCircle(const Point& centerPt, scalar radius) = 0;
93     virtual void DrawPath(const Path& path) = 0;
94     virtual void DrawBackground(const Brush& brush) = 0;
95     virtual void DrawShadow(const Path& path, const Point3& planeParams, const Point3& devLightPos, scalar lightRadius,
96         Color ambientColor, Color spotColor, ShadowFlags flag) = 0;
97     virtual void DrawRegion(const Region& region) = 0;
98     virtual void DrawPatch(const Point cubics[12], const ColorQuad colors[4],
99         const Point texCoords[4], BlendMode mode) = 0;
100     virtual void DrawVertices(const Vertices& vertices, BlendMode mode) = 0;
101 
102     virtual void DrawImageNine(const Image* image, const RectI& center, const Rect& dst,
103         FilterMode filter, const Brush* brush = nullptr) = 0;
104     virtual void DrawImageLattice(const Image* image, const Lattice& lattice, const Rect& dst,
105         FilterMode filter, const Brush* brush = nullptr) = 0;
106 
107     // color
108     virtual void DrawColor(ColorQuad color, BlendMode mode) = 0;
109 
110     // image
111     virtual void DrawBitmap(const Bitmap& bitmap, const scalar px, const scalar py) = 0;
112     virtual void DrawBitmap(Media::PixelMap& pixelMap, const scalar px, const scalar py) = 0;
113     virtual void DrawImage(const Image& image, const scalar px, const scalar p, const SamplingOptions& sampling) = 0;
114     virtual void DrawImageRect(const Image& image, const Rect& src, const Rect& dst, const SamplingOptions& sampling,
115         SrcRectConstraint constraint) = 0;
116     virtual void DrawImageRect(const Image& image, const Rect& dst, const SamplingOptions& sampling) = 0;
117     virtual void DrawPicture(const Picture& picture) = 0;
118 
119     // temporary interface. Support drawing of SkSVGDOM
120     virtual void DrawSVGDOM(const sk_sp<SkSVGDOM>& svgDom) = 0;
121 
122     // text
123     virtual void DrawTextBlob(const TextBlob* blob, const scalar x, const scalar y) = 0;
124 
125     // symbol
126     virtual void DrawSymbol(const DrawingHMSymbolData& symbol, Point locate) = 0;
127 
128     // clip
129     virtual void ClipRect(const Rect& rect, ClipOp op, bool doAntiAlias = false) = 0;
130     virtual void ClipIRect(const RectI& rect, ClipOp op = ClipOp::INTERSECT) = 0;
131     virtual void ClipRoundRect(const RoundRect& roundRect, ClipOp op, bool doAntiAlias = false) = 0;
132     virtual void ClipRoundRect(const Rect& rect, std::vector<Point>& pts, bool doAntiAlias = false) = 0;
133     virtual void ClipPath(const Path& path, ClipOp op, bool doAntiAlias = false) = 0;
134     virtual void ClipRegion(const Region& region, ClipOp op = ClipOp::INTERSECT) = 0;
135     virtual bool IsClipEmpty() = 0;
136     virtual bool IsClipRect() = 0;
137     virtual bool QuickReject(const Rect& rect) = 0;
138 
139     // transform
140     virtual void SetMatrix(const Matrix& matrix) = 0;
141     virtual void ResetMatrix() = 0;
142     virtual void ConcatMatrix(const Matrix& matrix) = 0;
143     virtual void Translate(scalar dx, scalar dy) = 0;
144     virtual void Scale(scalar sx, scalar sy) = 0;
145     virtual void Rotate(scalar deg, scalar sx, scalar sy) = 0;
146     virtual void Shear(scalar sx, scalar sy) = 0;
147 
148     // state
149     virtual void Flush() = 0;
150     virtual void Clear(ColorQuad color) = 0;
151     virtual uint32_t Save() = 0;
152     virtual void SaveLayer(const SaveLayerOps& saveLayerOption) = 0;
153     virtual void Restore() = 0;
154     virtual uint32_t  GetSaveCount() const = 0;
155     virtual void Discard() = 0;
156 
157     // paint
158     virtual void AttachPaint(const Paint& paint) = 0;
159 
160     virtual void BuildOverDraw(std::shared_ptr<Canvas> canvas) = 0;
161 };
162 } // namespace Drawing
163 } // namespace Rosen
164 } // namespace OHOS
165 #endif
166