• 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 
19 #include "base_impl.h"
20 #include "securec.h"
21 
22 #include "include/core/SkRefCnt.h"
23 
24 #include "draw/brush.h"
25 #include "draw/clip.h"
26 #include "draw/path.h"
27 #include "draw/pen.h"
28 #include "draw/shadow.h"
29 #include "effect/filter.h"
30 #include "image/bitmap.h"
31 #ifdef ACE_ENABLE_GPU
32 #include "image/gpu_context.h"
33 #endif
34 #include "image/image.h"
35 #include "image/picture.h"
36 #include "text/text.h"
37 #include "utils/matrix.h"
38 #include "utils/point.h"
39 #include "utils/point3.h"
40 #include "utils/rect.h"
41 #include "utils/region.h"
42 #include "utils/round_rect.h"
43 #include "utils/sampling_options.h"
44 #include "utils/scalar.h"
45 
46 class SkSVGDOM;
47 
48 namespace OHOS {
49 namespace Media {
50 class PixelMap;
51 }
52 namespace Rosen {
53 namespace Drawing {
54 enum class SrcRectConstraint;
55 class SaveLayerOps;
56 
57 class CoreCanvasImpl : public BaseImpl {
58 public:
59     static inline constexpr AdapterType TYPE = AdapterType::BASE_INTERFACE;
CoreCanvasImpl()60     CoreCanvasImpl() {};
~CoreCanvasImpl()61     ~CoreCanvasImpl() override {};
GetType()62     AdapterType GetType() const override
63     {
64         return AdapterType::BASE_INTERFACE;
65     }
66 
67     virtual void Bind(const Bitmap& bitmap) = 0;
68 
69     virtual Matrix GetTotalMatrix() const = 0;
70     virtual Rect GetLocalClipBounds() const = 0;
71     virtual RectI GetDeviceClipBounds() const = 0;
72 #ifdef ACE_ENABLE_GPU
73     virtual std::shared_ptr<GPUContext> GetGPUContext() const = 0;
74 #endif
75     virtual int32_t GetWidth() const = 0;
76     virtual int32_t GetHeight() const = 0;
77 
78     // shapes
79     virtual void DrawPoint(const Point& point) = 0;
80     virtual void DrawLine(const Point& startPt, const Point& endPt) = 0;
81     virtual void DrawRect(const Rect& rect) = 0;
82     virtual void DrawRoundRect(const RoundRect& roundRect) = 0;
83     virtual void DrawNestedRoundRect(const RoundRect& outer, const RoundRect& inner) = 0;
84     virtual void DrawArc(const Rect& oval, scalar startAngle, scalar sweepAngle) = 0;
85     virtual void DrawPie(const Rect& oval, scalar startAngle, scalar sweepAngle) = 0;
86     virtual void DrawOval(const Rect& oval) = 0;
87     virtual void DrawCircle(const Point& centerPt, scalar radius) = 0;
88     virtual void DrawPath(const Path& path) = 0;
89     virtual void DrawBackground(const Brush& brush) = 0;
90     virtual void DrawShadow(const Path& path, const Point3& planeParams, const Point3& devLightPos, scalar lightRadius,
91         Color ambientColor, Color spotColor, ShadowFlags flag) = 0;
92     virtual void DrawRegion(const Region& region) = 0;
93 
94     // image
95     virtual void DrawBitmap(const Bitmap& bitmap, const scalar px, const scalar py) = 0;
96     virtual void DrawBitmap(Media::PixelMap& pixelMap, const scalar px, const scalar py) = 0;
97     virtual void DrawImage(const Image& image, const scalar px, const scalar p, const SamplingOptions& sampling) = 0;
98     virtual void DrawImageRect(const Image& image, const Rect& src, const Rect& dst, const SamplingOptions& sampling,
99         SrcRectConstraint constraint) = 0;
100     virtual void DrawImageRect(const Image& image, const Rect& dst, const SamplingOptions& sampling) = 0;
101     virtual void DrawPicture(const Picture& picture) = 0;
102 
103     // temporary interface. Support drawing of SkSVGDOM
104     virtual void DrawSVGDOM(const sk_sp<SkSVGDOM>& svgDom) = 0;
105 
106     // clip
107     virtual void ClipRect(const Rect& rect, ClipOp op, bool doAntiAlias = false) = 0;
108     virtual void ClipRoundRect(const RoundRect& roundRect, ClipOp op, bool doAntiAlias = false) = 0;
109     virtual void ClipPath(const Path& path, ClipOp op, bool doAntiAlias = false) = 0;
110 
111     // transform
112     virtual void SetMatrix(const Matrix& matrix) = 0;
113     virtual void ResetMatrix() = 0;
114     virtual void ConcatMatrix(const Matrix& matrix) = 0;
115     virtual void Translate(scalar dx, scalar dy) = 0;
116     virtual void Scale(scalar sx, scalar sy) = 0;
117     virtual void Rotate(scalar deg, scalar sx, scalar sy) = 0;
118     virtual void Shear(scalar sx, scalar sy) = 0;
119 
120     // state
121     virtual void Flush() = 0;
122     virtual void Clear(ColorQuad color) = 0;
123     virtual void Save() = 0;
124     virtual void SaveLayer(const SaveLayerOps& saveLayerOption) = 0;
125     virtual void Restore() = 0;
126     virtual uint32_t  GetSaveCount() const = 0;
127 
128     // paint
129     virtual void AttachPen(const Pen& pen) = 0;
130     virtual void AttachBrush(const Brush& brush) = 0;
131     virtual void DetachPen() = 0;
132     virtual void DetachBrush() = 0;
133 };
134 } // namespace Drawing
135 } // namespace Rosen
136 } // namespace OHOS
137 #endif
138