1 /*
2 * Copyright (c) 2021-2025 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 #include "skia_impl_factory.h"
17
18 #include "skia_adapter/skia_bitmap.h"
19 #include "skia_adapter/skia_blender.h"
20 #include "skia_adapter/skia_pixmap.h"
21 #include "skia_adapter/skia_camera.h"
22 #include "skia_adapter/skia_canvas.h"
23 #include "skia_adapter/skia_color_filter.h"
24 #include "skia_adapter/skia_color_space.h"
25 #include "skia_adapter/skia_data.h"
26 #include "skia_adapter/skia_document.h"
27 #ifdef RS_ENABLE_GPU
28 #include "skia_adapter/skia_gpu_context.h"
29 #endif
30 #include "skia_adapter/skia_file_w_stream.h"
31 #include "skia_adapter/skia_font.h"
32 #include "skia_adapter/skia_font_mgr.h"
33 #include "skia_adapter/skia_image.h"
34 #include "skia_adapter/skia_image_filter.h"
35 #include "skia_adapter/skia_mask_filter.h"
36 #include "skia_adapter/skia_matrix.h"
37 #include "skia_adapter/skia_matrix44.h"
38 #include "skia_adapter/skia_path.h"
39 #include "skia_adapter/skia_path_effect.h"
40 #include "skia_adapter/skia_path_iterator.h"
41 #include "skia_adapter/skia_picture.h"
42 #include "skia_adapter/skia_picture_recorder.h"
43 #include "skia_adapter/skia_region.h"
44 #include "skia_adapter/skia_resource_holder.h"
45 #include "skia_adapter/skia_serial_procs.h"
46 #include "skia_adapter/skia_shader_effect.h"
47 #include "skia_adapter/skia_sharing_serial_context.h"
48 #include "skia_adapter/skia_runtime_blender_builder.h"
49 #include "skia_adapter/skia_runtime_effect.h"
50 #include "skia_adapter/skia_runtime_shader_builder.h"
51 #include "skia_adapter/skia_surface.h"
52 #include "skia_adapter/skia_text_blob_builder.h"
53 #include "skia_adapter/skia_trace_memory_dump.h"
54 #include "skia_adapter/skia_memory_stream.h"
55 #include "skia_adapter/skia_oplist_handle.h"
56
57 namespace OHOS {
58 namespace Rosen {
59 namespace Drawing {
CreateCoreCanvas()60 std::unique_ptr<CoreCanvasImpl> SkiaImplFactory::CreateCoreCanvas()
61 {
62 return std::make_unique<SkiaCanvas>();
63 }
64
CreateCoreCanvas(DrawingType type)65 std::unique_ptr<CoreCanvasImpl> SkiaImplFactory::CreateCoreCanvas(DrawingType type)
66 {
67 return std::make_unique<SkiaCanvas>(type);
68 }
69
CreateCoreCanvas(int32_t width,int32_t height)70 std::unique_ptr<CoreCanvasImpl> SkiaImplFactory::CreateCoreCanvas(int32_t width, int32_t height)
71 {
72 return std::make_unique<SkiaCanvas>(width, height);
73 }
74
CreateData()75 std::unique_ptr<DataImpl> SkiaImplFactory::CreateData()
76 {
77 return std::make_unique<SkiaData>();
78 }
79
80 #ifdef RS_ENABLE_GPU
CreateGPUContext()81 std::unique_ptr<GPUContextImpl> SkiaImplFactory::CreateGPUContext()
82 {
83 return std::make_unique<SkiaGPUContext>();
84 }
85 #endif
86
CreateTraceMemoryDump(const char * categoryKey,bool itemizeType)87 std::unique_ptr<TraceMemoryDumpImpl> SkiaImplFactory::CreateTraceMemoryDump(const char* categoryKey, bool itemizeType)
88 {
89 return std::make_unique<SkiaTraceMemoryDump>(categoryKey, itemizeType);
90 }
91
CreateBitmap()92 std::unique_ptr<BitmapImpl> SkiaImplFactory::CreateBitmap()
93 {
94 return std::make_unique<SkiaBitmap>();
95 }
96
CreatePixmap()97 std::unique_ptr<PixmapImpl> SkiaImplFactory::CreatePixmap()
98 {
99 return std::make_unique<SkiaPixmap>();
100 }
101
CreatePixmap(const ImageInfo & imageInfo,const void * addr,size_t rowBytes)102 std::unique_ptr<PixmapImpl> SkiaImplFactory::CreatePixmap(const ImageInfo& imageInfo, const void* addr, size_t rowBytes)
103 {
104 return std::make_unique<SkiaPixmap>(imageInfo, addr, rowBytes);
105 }
106
CreateImage()107 std::unique_ptr<ImageImpl> SkiaImplFactory::CreateImage()
108 {
109 return std::make_unique<SkiaImage>();
110 }
111
CreateImage(void * rawImg)112 std::unique_ptr<ImageImpl> SkiaImplFactory::CreateImage(void* rawImg)
113 {
114 auto skImg = reinterpret_cast<sk_sp<SkImage>*>(rawImg);
115 return std::make_unique<SkiaImage>(*skImg);
116 }
117
CreatePicture()118 std::unique_ptr<PictureImpl> SkiaImplFactory::CreatePicture()
119 {
120 return std::make_unique<SkiaPicture>();
121 }
122
CreatePictureRecorder()123 std::unique_ptr<PictureRecorderImpl> SkiaImplFactory::CreatePictureRecorder()
124 {
125 return std::make_unique<SkiaPictureRecorder>();
126 }
127
CreateSerialProcs()128 std::unique_ptr<SerialProcsImpl> SkiaImplFactory::CreateSerialProcs()
129 {
130 return std::make_unique<SkiaSerialProcs>();
131 }
132
CreateSharingSerialContext()133 std::unique_ptr<SharingSerialContextImpl> SkiaImplFactory::CreateSharingSerialContext()
134 {
135 return std::make_unique<SkiaSharingSerialContext>();
136 }
137
CreateFileWStream(const char path[])138 std::unique_ptr<FileWStreamImpl> SkiaImplFactory::CreateFileWStream(const char path[])
139 {
140 return std::make_unique<SkiaFileWStream>(path);
141 }
142
CreatePath()143 std::unique_ptr<PathImpl> SkiaImplFactory::CreatePath()
144 {
145 return std::make_unique<SkiaPath>();
146 }
147
CreatePathIter(const Path & path,bool forceClose)148 std::unique_ptr<PathIterImpl> SkiaImplFactory::CreatePathIter(const Path& path, bool forceClose)
149 {
150 return std::make_unique<SkiaPathIter>(path, forceClose);
151 }
152
CreatePathIterator(const Path & path)153 std::unique_ptr<PathIteratorImpl> SkiaImplFactory::CreatePathIterator(const Path& path)
154 {
155 return std::make_unique<SkiaPathIterator>(path);
156 }
157
CreateColorFilter()158 std::unique_ptr<ColorFilterImpl> SkiaImplFactory::CreateColorFilter()
159 {
160 return std::make_unique<SkiaColorFilter>();
161 }
162
CreateMaskFilter()163 std::unique_ptr<MaskFilterImpl> SkiaImplFactory::CreateMaskFilter()
164 {
165 return std::make_unique<SkiaMaskFilter>();
166 }
167
CreateImageFilter()168 std::unique_ptr<ImageFilterImpl> SkiaImplFactory::CreateImageFilter()
169 {
170 return std::make_unique<SkiaImageFilter>();
171 }
172
CreateShaderEffect()173 std::unique_ptr<ShaderEffectImpl> SkiaImplFactory::CreateShaderEffect()
174 {
175 return std::make_unique<SkiaShaderEffect>();
176 }
177
CreateBlender()178 std::unique_ptr<BlenderImpl> SkiaImplFactory::CreateBlender()
179 {
180 return std::make_unique<SkiaBlender>();
181 }
182
CreateRuntimeEffect()183 std::unique_ptr<RuntimeEffectImpl> SkiaImplFactory::CreateRuntimeEffect()
184 {
185 return std::make_unique<SkiaRuntimeEffect>();
186 }
187
CreateRuntimeShaderBuilder(std::shared_ptr<RuntimeEffect> runtimeEffect)188 std::unique_ptr<RuntimeShaderBuilderImpl> SkiaImplFactory::CreateRuntimeShaderBuilder(
189 std::shared_ptr<RuntimeEffect> runtimeEffect)
190 {
191 return std::make_unique<SkiaRuntimeShaderBuilder>(runtimeEffect);
192 }
193
CreateRuntimeBlenderBuilder(std::shared_ptr<RuntimeEffect> runtimeEffect)194 std::unique_ptr<RuntimeBlenderBuilderImpl> SkiaImplFactory::CreateRuntimeBlenderBuilder(
195 std::shared_ptr<RuntimeEffect> runtimeEffect)
196 {
197 return std::make_unique<SkiaRuntimeBlenderBuilder>(runtimeEffect);
198 }
199
CreateSurface()200 std::unique_ptr<SurfaceImpl> SkiaImplFactory::CreateSurface()
201 {
202 return std::make_unique<SkiaSurface>();
203 }
204
CreateOplistHandle()205 std::unique_ptr<OpListHandleImpl> SkiaImplFactory::CreateOplistHandle()
206 {
207 return std::make_unique<SkiaOpListHandle>();
208 }
209
CreatePathEffect()210 std::unique_ptr<PathEffectImpl> SkiaImplFactory::CreatePathEffect()
211 {
212 return std::make_unique<SkiaPathEffect>();
213 }
214
CreateColorSpace()215 std::unique_ptr<ColorSpaceImpl> SkiaImplFactory::CreateColorSpace()
216 {
217 return std::make_unique<SkiaColorSpace>();
218 }
219
CreateMatrix()220 std::unique_ptr<MatrixImpl> SkiaImplFactory::CreateMatrix()
221 {
222 return std::make_unique<SkiaMatrix>();
223 }
224
CreateMatrix(const Matrix & other)225 std::unique_ptr<MatrixImpl> SkiaImplFactory::CreateMatrix(const Matrix& other)
226 {
227 return std::make_unique<SkiaMatrix>(other);
228 }
229
CreateMatrix44()230 std::unique_ptr<Matrix44Impl> SkiaImplFactory::CreateMatrix44()
231 {
232 return std::make_unique<SkiaMatrix44>();
233 }
234
CreateCamera()235 std::unique_ptr<CameraImpl> SkiaImplFactory::CreateCamera()
236 {
237 return std::make_unique<SkiaCamera>();
238 }
239
CreateRegion()240 std::unique_ptr<RegionImpl> SkiaImplFactory::CreateRegion()
241 {
242 return std::make_unique<SkiaRegion>();
243 }
244
CreateFont()245 std::unique_ptr<FontImpl> SkiaImplFactory::CreateFont()
246 {
247 return std::make_unique<SkiaFont>();
248 }
249
CreateFont(std::shared_ptr<Typeface> typeface,scalar size,scalar scaleX,scalar skewX)250 std::unique_ptr<FontImpl> SkiaImplFactory::CreateFont(std::shared_ptr<Typeface> typeface,
251 scalar size, scalar scaleX, scalar skewX)
252 {
253 return std::make_unique<SkiaFont>(typeface, size, scaleX, skewX);
254 }
255
CreateFont(const Font & font)256 std::unique_ptr<FontImpl> SkiaImplFactory::CreateFont(const Font& font)
257 {
258 return std::make_unique<SkiaFont>(font);
259 }
260
CreateTextBlobBuilder()261 std::unique_ptr<TextBlobBuilderImpl> SkiaImplFactory::CreateTextBlobBuilder()
262 {
263 return std::make_unique<SkiaTextBlobBuilder>();
264 }
265
CreateDefaultFontMgr()266 std::shared_ptr<FontMgrImpl> SkiaImplFactory::CreateDefaultFontMgr()
267 {
268 return SkiaFontMgr::CreateDefaultFontMgr();
269 }
270
CreateDynamicFontMgr()271 std::shared_ptr<FontMgrImpl> SkiaImplFactory::CreateDynamicFontMgr()
272 {
273 return SkiaFontMgr::CreateDynamicFontMgr();
274 }
275
CreateVertices()276 std::unique_ptr<VerticesImpl> SkiaImplFactory::CreateVertices()
277 {
278 return std::make_unique<SkiaVertices>();
279 }
280
CreateVerticesBuilder()281 std::unique_ptr<VerticesImpl::BuilderImpl> SkiaImplFactory::CreateVerticesBuilder()
282 {
283 return std::make_unique<SkiaVertices::SkiaBuilder>();
284 }
285
CreateMemoryStream()286 std::shared_ptr<MemoryStreamImpl> SkiaImplFactory::CreateMemoryStream()
287 {
288 return std::make_shared<SkiaMemoryStream>();
289 }
290
CreateMemoryStream(const void * data,size_t length,bool copyData)291 std::shared_ptr<MemoryStreamImpl> SkiaImplFactory::CreateMemoryStream(const void* data, size_t length, bool copyData)
292 {
293 return std::make_shared<SkiaMemoryStream>(data, length, copyData);
294 }
295
CreateResourceHolder()296 std::shared_ptr<ResourceHolderImpl> SkiaImplFactory::CreateResourceHolder()
297 {
298 return std::make_shared<SkiaResourceHolder>();
299 }
300 } // namespace Drawing
301 } // namespace Rosen
302 } // namespace OHOS