1 /*
2 * Copyright (c) 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 #include "core/interfaces/native/node/node_image_modifier.h"
16
17 #include <cstdint>
18
19 #include "base/utils/utils.h"
20 #include "base/image/drawing_color_filter.h"
21 #include "core/components/common/properties/alignment.h"
22 #include "core/components/image/image_component.h"
23 #include "core/components/image/image_theme.h"
24 #include "core/components_ng/base/frame_node.h"
25 #include "core/components_ng/base/view_abstract.h"
26 #include "core/components_ng/pattern/image/image_model_ng.h"
27 #include "core/pipeline/base/element_register.h"
28 #include "frameworks/core/components/common/layout/constants.h"
29
30 #include "effect/color_filter.h"
31
32 namespace OHOS::Ace::NG {
33 namespace {
34 constexpr int NUM_0 = 1;
35 constexpr int NUM_1 = 1;
36 constexpr int NUM_2 = 2;
37 constexpr int NUM_3 = 3;
38 constexpr int NUM_12 = 8;
39 constexpr int DEFAULT_LENGTH = 4;
40 constexpr int RESIZEABLE_VEC_LENGTH = 12;
41 constexpr CopyOptions DEFAULT_IMAGE_COPYOPTION = CopyOptions::None;
42 constexpr bool DEFAULT_SYNC_LOAD_VALUE = false;
43 constexpr ImageFit DEFAULT_OBJECT_FIT_VALUE = ImageFit::COVER;
44 constexpr bool DEFAULT_FIT_ORIGINAL_SIZE = false;
45 constexpr bool DEFAULT_DRAGGABLE = false;
46 constexpr bool DEFAULT_IMAGE_SENSITIVE = false;
47 constexpr ArkUI_Float32 DEFAULT_IMAGE_EDGE_ANTIALIASING = 0;
48 constexpr ImageResizableSlice DEFAULT_IMAGE_SLICE;
49 const std::vector<float> DEFAULT_COLOR_FILTER = { 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0 };
50 constexpr int32_t LOAD_ERROR_CODE = 401;
51 constexpr int32_t IMAGE_LOAD_STATUS_INDEX = 0;
52 constexpr int32_t IMAGE_WIDTH_INDEX = 1;
53 constexpr int32_t IMAGE_HEIGHT_INDEX = 2;
54 constexpr int32_t IMAGE_COMPONENT_WIDTH_INDEX = 3;
55 constexpr int32_t IMAGE_COMPONENT_HEIGHT_INDEX = 4;
56 constexpr int32_t IMAGE_CONTENT_OFFSET_X_INDEX = 5;
57 constexpr int32_t IMAGE_CONTENT_OFFSET_Y_INDEX = 6;
58 constexpr int32_t IMAGE_CONTENT_WIDTH_INDEX = 7;
59 constexpr int32_t IMAGE_CONTENT_HEIGHT_INDEX = 8;
60 constexpr uint32_t MAX_COLOR_FILTER_SIZE = 20;
61 constexpr uint32_t ERROR_UINT_CODE = -1;
62 constexpr int32_t DEFAULT_FALSE = 0;
63 const std::vector<ResizableOption> directions = { ResizableOption::TOP, ResizableOption::RIGHT,
64 ResizableOption::BOTTOM, ResizableOption::LEFT };
65 std::string g_strValue;
66
SetOptionalBorder(std::optional<Dimension> & optionalDimension,const ArkUI_Float32 * values,ArkUI_Int32 valuesSize,ArkUI_Int32 & offset)67 void SetOptionalBorder(std::optional<Dimension>& optionalDimension, const ArkUI_Float32* values, ArkUI_Int32 valuesSize,
68 ArkUI_Int32& offset)
69 {
70 bool hasValue = static_cast<bool>(values[offset]);
71 if (hasValue) {
72 optionalDimension =
73 Dimension(values[offset + NUM_1], static_cast<OHOS::Ace::DimensionUnit>(values[offset + NUM_2]));
74 }
75 offset = offset + NUM_3;
76 }
77
SetCalcDimension(std::optional<CalcDimension> & optDimension,const ArkUIStringAndFloat * options,ArkUI_Int32 optionsLength,ArkUI_Int32 offset)78 bool SetCalcDimension(std::optional<CalcDimension>& optDimension, const ArkUIStringAndFloat* options,
79 ArkUI_Int32 optionsLength, ArkUI_Int32 offset)
80 {
81 if ((options == nullptr) || (offset < 0) || ((offset + NUM_3) > optionsLength)) {
82 return false;
83 }
84 auto hasValue = options[offset];
85 auto value = options[offset + NUM_1];
86 auto unit = options[offset + NUM_2];
87 if (static_cast<bool>(hasValue.value)) {
88 auto unitValue = static_cast<DimensionUnit>(unit.value);
89 if (unitValue == DimensionUnit::CALC) {
90 std::string str;
91 if (value.valueStr != nullptr) {
92 str = value.valueStr;
93 }
94 CalcDimension calcDimension(str, unitValue);
95 optDimension = calcDimension;
96 } else {
97 CalcDimension calcDimension(value.value, unitValue);
98 optDimension = calcDimension;
99 }
100 }
101 return true;
102 }
103
SetResizableFromVec(ImageResizableSlice & resizable,const ArkUIStringAndFloat * options)104 void SetResizableFromVec(ImageResizableSlice& resizable, const ArkUIStringAndFloat* options)
105 {
106 for (unsigned int index = 0; index < RESIZEABLE_VEC_LENGTH; index += NUM_3) {
107 std::optional<CalcDimension> optDimension;
108 SetCalcDimension(optDimension, options, RESIZEABLE_VEC_LENGTH, index);
109 if (optDimension.has_value()) {
110 auto direction = directions[index / NUM_3];
111 resizable.SetEdgeSlice(direction, optDimension.value());
112 }
113 }
114 }
115
SetImageSrc(ArkUINodeHandle node,const char * value)116 void SetImageSrc(ArkUINodeHandle node, const char* value)
117 {
118 auto* frameNode = reinterpret_cast<FrameNode*>(node);
119 CHECK_NULL_VOID(frameNode);
120 std::string src(value);
121 ImageModelNG::InitImage(frameNode, src);
122 }
123
GetImageSrc(ArkUINodeHandle node)124 const char* GetImageSrc(ArkUINodeHandle node)
125 {
126 auto* frameNode = reinterpret_cast<FrameNode*>(node);
127 CHECK_NULL_RETURN(frameNode, nullptr);
128 g_strValue = ImageModelNG::GetSrc(frameNode).GetSrc();
129 return g_strValue.c_str();
130 }
131
SetCopyOption(ArkUINodeHandle node,ArkUI_Int32 copyOption)132 void SetCopyOption(ArkUINodeHandle node, ArkUI_Int32 copyOption)
133 {
134 auto* frameNode = reinterpret_cast<FrameNode*>(node);
135 CHECK_NULL_VOID(frameNode);
136 auto copyOptions = static_cast<CopyOptions>(copyOption);
137 if (copyOptions < CopyOptions::None || copyOptions > CopyOptions::Distributed) {
138 copyOptions = DEFAULT_IMAGE_COPYOPTION;
139 }
140 ImageModelNG::SetCopyOption(frameNode, copyOptions);
141 }
142
SetImageShowSrc(ArkUINodeHandle node,ArkUI_CharPtr src,ArkUI_CharPtr bundleName,ArkUI_CharPtr moduleName,ArkUI_Bool isUriPureNumber)143 void SetImageShowSrc(ArkUINodeHandle node, ArkUI_CharPtr src, ArkUI_CharPtr bundleName, ArkUI_CharPtr moduleName,
144 ArkUI_Bool isUriPureNumber)
145 {
146 auto* frameNode = reinterpret_cast<FrameNode*>(node);
147 CHECK_NULL_VOID(frameNode);
148 ImageModelNG::SetInitialSrc(frameNode, src, bundleName, moduleName, isUriPureNumber);
149 }
150
ResetCopyOption(ArkUINodeHandle node)151 void ResetCopyOption(ArkUINodeHandle node)
152 {
153 auto* frameNode = reinterpret_cast<FrameNode*>(node);
154 CHECK_NULL_VOID(frameNode);
155 ImageModelNG::SetCopyOption(frameNode, DEFAULT_IMAGE_COPYOPTION);
156 }
157
SetAutoResize(ArkUINodeHandle node,ArkUI_Bool autoResize)158 void SetAutoResize(ArkUINodeHandle node, ArkUI_Bool autoResize)
159 {
160 auto* frameNode = reinterpret_cast<FrameNode*>(node);
161 CHECK_NULL_VOID(frameNode);
162 ImageModelNG::SetAutoResize(frameNode, autoResize);
163 }
164
GetAutoResize(ArkUINodeHandle node)165 int32_t GetAutoResize(ArkUINodeHandle node)
166 {
167 auto* frameNode = reinterpret_cast<FrameNode*>(node);
168 CHECK_NULL_RETURN(frameNode, true);
169 return ImageModelNG::GetAutoResize(frameNode);
170 }
171
ResetAutoResize(ArkUINodeHandle node)172 void ResetAutoResize(ArkUINodeHandle node)
173 {
174 auto* frameNode = reinterpret_cast<FrameNode*>(node);
175 CHECK_NULL_VOID(frameNode);
176 ImageModelNG::ResetAutoResize(frameNode);
177 }
178
SetObjectRepeat(ArkUINodeHandle node,ArkUI_Int32 imageRepeat)179 void SetObjectRepeat(ArkUINodeHandle node, ArkUI_Int32 imageRepeat)
180 {
181 auto* frameNode = reinterpret_cast<FrameNode*>(node);
182 CHECK_NULL_VOID(frameNode);
183 auto repeat = static_cast<ImageRepeat>(imageRepeat);
184 if (repeat < ImageRepeat::NO_REPEAT || repeat > ImageRepeat::REPEAT) {
185 repeat = ImageRepeat::NO_REPEAT;
186 }
187 ImageModelNG::SetImageRepeat(frameNode, repeat);
188 }
189
GetObjectRepeat(ArkUINodeHandle node)190 int32_t GetObjectRepeat(ArkUINodeHandle node)
191 {
192 int32_t defaultObjectRepeat = static_cast<int32_t>(ImageRepeat::NO_REPEAT);
193 auto* frameNode = reinterpret_cast<FrameNode*>(node);
194 CHECK_NULL_RETURN(frameNode, defaultObjectRepeat);
195 return static_cast<int32_t>(ImageModelNG::GetObjectRepeat(frameNode));
196 }
197
ResetObjectRepeat(ArkUINodeHandle node)198 void ResetObjectRepeat(ArkUINodeHandle node)
199 {
200 auto* frameNode = reinterpret_cast<FrameNode*>(node);
201 CHECK_NULL_VOID(frameNode);
202 ImageModelNG::SetImageRepeat(frameNode, ImageRepeat::NO_REPEAT);
203 }
204
SetRenderMode(ArkUINodeHandle node,ArkUI_Int32 imageRenderMode)205 void SetRenderMode(ArkUINodeHandle node, ArkUI_Int32 imageRenderMode)
206 {
207 auto* frameNode = reinterpret_cast<FrameNode*>(node);
208 CHECK_NULL_VOID(frameNode);
209 auto renderMode = static_cast<ImageRenderMode>(imageRenderMode);
210 if (renderMode < ImageRenderMode::ORIGINAL || renderMode > ImageRenderMode::TEMPLATE) {
211 renderMode = ImageRenderMode::ORIGINAL;
212 }
213 ImageModelNG::SetImageRenderMode(frameNode, renderMode);
214 }
215
ResetRenderMode(ArkUINodeHandle node)216 void ResetRenderMode(ArkUINodeHandle node)
217 {
218 auto* frameNode = reinterpret_cast<FrameNode*>(node);
219 CHECK_NULL_VOID(frameNode);
220 ImageModelNG::SetImageRenderMode(frameNode, ImageRenderMode::ORIGINAL);
221 }
222
GetRenderMode(ArkUINodeHandle node)223 int32_t GetRenderMode(ArkUINodeHandle node)
224 {
225 int32_t defaultRenderMode = static_cast<int32_t>(ImageRenderMode::ORIGINAL);
226 auto* frameNode = reinterpret_cast<FrameNode*>(node);
227 CHECK_NULL_RETURN(frameNode, defaultRenderMode);
228 return static_cast<int32_t>(ImageModelNG::GetImageRenderMode(frameNode));
229 }
230
SetSyncLoad(ArkUINodeHandle node,ArkUI_Bool syncLoadValue)231 void SetSyncLoad(ArkUINodeHandle node, ArkUI_Bool syncLoadValue)
232 {
233 auto* frameNode = reinterpret_cast<FrameNode*>(node);
234 CHECK_NULL_VOID(frameNode);
235 ImageModelNG::SetSyncMode(frameNode, syncLoadValue);
236 }
237
ResetSyncLoad(ArkUINodeHandle node)238 void ResetSyncLoad(ArkUINodeHandle node)
239 {
240 auto* frameNode = reinterpret_cast<FrameNode*>(node);
241 CHECK_NULL_VOID(frameNode);
242 ImageModelNG::SetSyncMode(frameNode, DEFAULT_SYNC_LOAD_VALUE);
243 }
244
SetObjectFit(ArkUINodeHandle node,ArkUI_Int32 objectFitNumber)245 void SetObjectFit(ArkUINodeHandle node, ArkUI_Int32 objectFitNumber)
246 {
247 auto* frameNode = reinterpret_cast<FrameNode*>(node);
248 CHECK_NULL_VOID(frameNode);
249 ImageFit objectFitValue = static_cast<ImageFit>(objectFitNumber);
250 ImageModelNG::SetImageFit(frameNode, objectFitValue);
251 }
252
GetObjectFit(ArkUINodeHandle node)253 int32_t GetObjectFit(ArkUINodeHandle node)
254 {
255 int32_t defaultObjectFit = static_cast<int32_t>(ImageFit::COVER);
256 auto* frameNode = reinterpret_cast<FrameNode*>(node);
257 CHECK_NULL_RETURN(frameNode, defaultObjectFit);
258 return static_cast<int32_t>(ImageModelNG::GetObjectFit(frameNode));
259 }
260
ResetObjectFit(ArkUINodeHandle node)261 void ResetObjectFit(ArkUINodeHandle node)
262 {
263 auto* frameNode = reinterpret_cast<FrameNode*>(node);
264 CHECK_NULL_VOID(frameNode);
265 ImageModelNG::SetImageFit(frameNode, DEFAULT_OBJECT_FIT_VALUE);
266 }
267
SetFitOriginalSize(ArkUINodeHandle node,ArkUI_Bool fitOriginalSizeValue)268 void SetFitOriginalSize(ArkUINodeHandle node, ArkUI_Bool fitOriginalSizeValue)
269 {
270 auto* frameNode = reinterpret_cast<FrameNode*>(node);
271 CHECK_NULL_VOID(frameNode);
272 ImageModelNG::SetFitOriginSize(frameNode, fitOriginalSizeValue);
273 }
274
ResetFitOriginalSize(ArkUINodeHandle node)275 void ResetFitOriginalSize(ArkUINodeHandle node)
276 {
277 auto* frameNode = reinterpret_cast<FrameNode*>(node);
278 CHECK_NULL_VOID(frameNode);
279 ImageModelNG::SetFitOriginSize(frameNode, DEFAULT_FIT_ORIGINAL_SIZE);
280 }
281
SetSourceSize(ArkUINodeHandle node,ArkUI_Float32 width,ArkUI_Float32 height)282 void SetSourceSize(ArkUINodeHandle node, ArkUI_Float32 width, ArkUI_Float32 height)
283 {
284 auto* frameNode = reinterpret_cast<FrameNode*>(node);
285 CHECK_NULL_VOID(frameNode);
286 CalcDimension widthObj(width, DimensionUnit::VP);
287 CalcDimension heightObj(height, DimensionUnit::VP);
288 ImageModelNG::SetImageSourceSize(frameNode, std::pair<CalcDimension, CalcDimension>(widthObj, heightObj));
289 }
290
ResetSourceSize(ArkUINodeHandle node)291 void ResetSourceSize(ArkUINodeHandle node)
292 {
293 auto* frameNode = reinterpret_cast<FrameNode*>(node);
294 CHECK_NULL_VOID(frameNode);
295 ImageModelNG::SetImageSourceSize(frameNode, std::pair<CalcDimension, CalcDimension>());
296 }
297
SetMatchTextDirection(ArkUINodeHandle node,ArkUI_Uint32 value)298 void SetMatchTextDirection(ArkUINodeHandle node, ArkUI_Uint32 value)
299 {
300 auto* frameNode = reinterpret_cast<FrameNode*>(node);
301 CHECK_NULL_VOID(frameNode);
302 ImageModelNG::SetMatchTextDirection(frameNode, static_cast<bool>(value));
303 }
304
ResetMatchTextDirection(ArkUINodeHandle node)305 void ResetMatchTextDirection(ArkUINodeHandle node)
306 {
307 auto* frameNode = reinterpret_cast<FrameNode*>(node);
308 CHECK_NULL_VOID(frameNode);
309 ImageModelNG::SetMatchTextDirection(frameNode, false);
310 }
311
SetFillColor(ArkUINodeHandle node,ArkUI_Uint32 value)312 void SetFillColor(ArkUINodeHandle node, ArkUI_Uint32 value)
313 {
314 auto* frameNode = reinterpret_cast<FrameNode*>(node);
315 CHECK_NULL_VOID(frameNode);
316 ImageModelNG::SetImageFill(frameNode, Color(value));
317 }
318
ResetFillColor(ArkUINodeHandle node)319 void ResetFillColor(ArkUINodeHandle node)
320 {
321 auto* frameNode = reinterpret_cast<FrameNode*>(node);
322 CHECK_NULL_VOID(frameNode);
323 auto pipelineContext = frameNode->GetContext();
324 CHECK_NULL_VOID(pipelineContext);
325 auto theme = pipelineContext->GetTheme<ImageTheme>();
326 CHECK_NULL_VOID(theme);
327 ImageModelNG::SetImageFill(frameNode, theme->GetFillColor());
328 }
329
SetAlt(ArkUINodeHandle node,const char * src,const char * bundleName,const char * moduleName)330 void SetAlt(ArkUINodeHandle node, const char* src, const char* bundleName, const char* moduleName)
331 {
332 if (ImageSourceInfo::ResolveURIType(src) == SrcType::NETWORK) {
333 return;
334 }
335
336 auto* frameNode = reinterpret_cast<FrameNode*>(node);
337 CHECK_NULL_VOID(frameNode);
338 ImageModelNG::SetAlt(frameNode, ImageSourceInfo { src, bundleName, moduleName });
339 }
340
GetAlt(ArkUINodeHandle node)341 const char* GetAlt(ArkUINodeHandle node)
342 {
343 auto* frameNode = reinterpret_cast<FrameNode*>(node);
344 CHECK_NULL_RETURN(frameNode, nullptr);
345 g_strValue = ImageModelNG::GetAlt(frameNode).GetSrc();
346 return g_strValue.c_str();
347 }
348
ResetAlt(ArkUINodeHandle node)349 void ResetAlt(ArkUINodeHandle node)
350 {
351 auto* frameNode = reinterpret_cast<FrameNode*>(node);
352 CHECK_NULL_VOID(frameNode);
353 ImageModelNG::ResetImageAlt(frameNode);
354 }
355
SetImageInterpolation(ArkUINodeHandle node,ArkUI_Int32 value)356 void SetImageInterpolation(ArkUINodeHandle node, ArkUI_Int32 value)
357 {
358 auto* frameNode = reinterpret_cast<FrameNode*>(node);
359 CHECK_NULL_VOID(frameNode);
360 auto interpolation = static_cast<Ace::ImageInterpolation>(value);
361 if (interpolation < Ace::ImageInterpolation::NONE || interpolation > Ace::ImageInterpolation::HIGH) {
362 interpolation = Ace::ImageInterpolation::NONE;
363 }
364 ImageModelNG::SetImageInterpolation(frameNode, interpolation);
365 }
366
GetImageInterpolation(ArkUINodeHandle node)367 int32_t GetImageInterpolation(ArkUINodeHandle node)
368 {
369 int32_t defaultInterpolation = static_cast<int32_t>(ImageInterpolation::NONE);
370 auto* frameNode = reinterpret_cast<FrameNode*>(node);
371 CHECK_NULL_RETURN(frameNode, defaultInterpolation);
372 return static_cast<int32_t>(ImageModelNG::GetInterpolation(frameNode));
373 }
374
ResetImageInterpolation(ArkUINodeHandle node)375 void ResetImageInterpolation(ArkUINodeHandle node)
376 {
377 auto* frameNode = reinterpret_cast<FrameNode*>(node);
378 CHECK_NULL_VOID(frameNode);
379 ImageModelNG::ResetImageInterpolation(frameNode);
380 }
381
SetColorFilter(ArkUINodeHandle node,const ArkUI_Float32 * array,int length)382 void SetColorFilter(ArkUINodeHandle node, const ArkUI_Float32* array, int length)
383 {
384 CHECK_NULL_VOID(array);
385 if (length != COLOR_FILTER_MATRIX_SIZE) {
386 return;
387 }
388 auto* frameNode = reinterpret_cast<FrameNode*>(node);
389 CHECK_NULL_VOID(frameNode);
390 ImageModelNG::SetColorFilterMatrix(frameNode, std::vector<float>(array, array + length));
391 }
392
GetColorFilter(ArkUINodeHandle node,ArkUIFilterColorType * colorFilter)393 void GetColorFilter(ArkUINodeHandle node, ArkUIFilterColorType* colorFilter)
394 {
395 CHECK_NULL_VOID(colorFilter);
396 auto* frameNode = reinterpret_cast<FrameNode*>(node);
397 CHECK_NULL_VOID(frameNode);
398 auto filterFloatArray = ImageModelNG::GetColorFilter(frameNode);
399 colorFilter->filterSize = filterFloatArray.size() < MAX_COLOR_FILTER_SIZE
400 ? static_cast<int32_t>(filterFloatArray.size())
401 : static_cast<int32_t>(MAX_COLOR_FILTER_SIZE);
402 for (size_t i = 0; i < static_cast<size_t>(colorFilter->filterSize) && i < MAX_COLOR_FILTER_SIZE; i++) {
403 *(colorFilter->filterArray+i) = filterFloatArray[i];
404 }
405 }
406
ResetColorFilter(ArkUINodeHandle node)407 void ResetColorFilter(ArkUINodeHandle node)
408 {
409 auto* frameNode = reinterpret_cast<FrameNode*>(node);
410 CHECK_NULL_VOID(frameNode);
411 ImageModelNG::SetColorFilterMatrix(frameNode, DEFAULT_COLOR_FILTER);
412 }
413
SetDrawingColorFilter(ArkUINodeHandle node,void * colorFilter)414 void SetDrawingColorFilter(ArkUINodeHandle node, void* colorFilter)
415 {
416 auto* frameNode = reinterpret_cast<FrameNode*>(node);
417 CHECK_NULL_VOID(frameNode);
418 auto filter = reinterpret_cast<OHOS::Rosen::Drawing::ColorFilter*>(colorFilter);
419 auto filterPtr = std::make_shared<OHOS::Rosen::Drawing::ColorFilter>(*filter);
420 auto drawingColorFilter = DrawingColorFilter::CreateDrawingColorFilterFromNative(static_cast<void*>(&filterPtr));
421 ImageModelNG::SetDrawingColorFilter(frameNode, drawingColorFilter);
422 }
423
GetDrawingColorFilter(ArkUINodeHandle node)424 void* GetDrawingColorFilter(ArkUINodeHandle node)
425 {
426 auto* frameNode = reinterpret_cast<FrameNode*>(node);
427 CHECK_NULL_RETURN(frameNode, nullptr);
428 auto drawingColorFilter = ImageModelNG::GetDrawingColorFilter(frameNode);
429 CHECK_NULL_RETURN(drawingColorFilter, nullptr);
430 auto filterSptr = reinterpret_cast<std::shared_ptr<OHOS::Rosen::Drawing::ColorFilter>*>(
431 drawingColorFilter->GetDrawingColorFilterSptrAddr());
432 CHECK_NULL_RETURN(filterSptr, nullptr);
433 return (*filterSptr).get();
434 }
435
SetImageSyncLoad(ArkUINodeHandle node,ArkUI_Bool syncLoadValue)436 void SetImageSyncLoad(ArkUINodeHandle node, ArkUI_Bool syncLoadValue)
437 {
438 auto* frameNode = reinterpret_cast<FrameNode*>(node);
439 CHECK_NULL_VOID(frameNode);
440 ImageModelNG::SetSyncMode(frameNode, syncLoadValue);
441 }
442
ResetImageSyncLoad(ArkUINodeHandle node)443 void ResetImageSyncLoad(ArkUINodeHandle node)
444 {
445 auto* frameNode = reinterpret_cast<FrameNode*>(node);
446 CHECK_NULL_VOID(frameNode);
447 ImageModelNG::SetSyncMode(frameNode, DEFAULT_SYNC_LOAD_VALUE);
448 }
449
SetImageObjectFit(ArkUINodeHandle node,ArkUI_Int32 objectFitNumber)450 void SetImageObjectFit(ArkUINodeHandle node, ArkUI_Int32 objectFitNumber)
451 {
452 auto* frameNode = reinterpret_cast<FrameNode*>(node);
453 CHECK_NULL_VOID(frameNode);
454 ImageFit objectFitValue = static_cast<ImageFit>(objectFitNumber);
455 ImageModelNG::SetImageFit(frameNode, objectFitValue);
456 }
457
ResetImageObjectFit(ArkUINodeHandle node)458 void ResetImageObjectFit(ArkUINodeHandle node)
459 {
460 auto* frameNode = reinterpret_cast<FrameNode*>(node);
461 CHECK_NULL_VOID(frameNode);
462 ImageModelNG::SetImageFit(frameNode, DEFAULT_OBJECT_FIT_VALUE);
463 }
464
SetImageFitOriginalSize(ArkUINodeHandle node,ArkUI_Bool fitOriginalSizeValue)465 void SetImageFitOriginalSize(ArkUINodeHandle node, ArkUI_Bool fitOriginalSizeValue)
466 {
467 auto* frameNode = reinterpret_cast<FrameNode*>(node);
468 CHECK_NULL_VOID(frameNode);
469 ImageModelNG::SetFitOriginSize(frameNode, fitOriginalSizeValue);
470 }
471
ResetImageFitOriginalSize(ArkUINodeHandle node)472 void ResetImageFitOriginalSize(ArkUINodeHandle node)
473 {
474 auto* frameNode = reinterpret_cast<FrameNode*>(node);
475 CHECK_NULL_VOID(frameNode);
476 ImageModelNG::SetFitOriginSize(frameNode, DEFAULT_FIT_ORIGINAL_SIZE);
477 }
478
SetImageDraggable(ArkUINodeHandle node,ArkUI_Bool value)479 void SetImageDraggable(ArkUINodeHandle node, ArkUI_Bool value)
480 {
481 auto* frameNode = reinterpret_cast<FrameNode*>(node);
482 CHECK_NULL_VOID(frameNode);
483 ImageModelNG::SetDraggable(frameNode, value);
484 }
485
ResetImageDraggable(ArkUINodeHandle node)486 void ResetImageDraggable(ArkUINodeHandle node)
487 {
488 auto* frameNode = reinterpret_cast<FrameNode*>(node);
489 CHECK_NULL_VOID(frameNode);
490 ImageModelNG::SetDraggable(frameNode, DEFAULT_DRAGGABLE);
491 }
492
GetImageDraggable(ArkUINodeHandle node)493 int32_t GetImageDraggable(ArkUINodeHandle node)
494 {
495 auto* frameNode = reinterpret_cast<FrameNode*>(node);
496 CHECK_NULL_RETURN(frameNode, DEFAULT_DRAGGABLE);
497 return ImageModelNG::GetDraggable(frameNode);
498 }
499
500 /**
501 * @param values radius values
502 * value[0] : radius value for TopLeft,value[1] : radius value for TopRight
503 * value[2] : radius value for BottomLeft,value[3] : radius value for BottomRight
504 * @param units radius units
505 * units[0]: radius unit for TopLeft ,units[1] : radius unit for TopRight
506 * units[2]: radius unit for BottomLeft, units[3] : radius unit for TopRight
507 */
SetImageBorderRadius(ArkUINodeHandle node,const ArkUI_Float32 * values,const int * units,ArkUI_Int32 length)508 void SetImageBorderRadius(ArkUINodeHandle node, const ArkUI_Float32* values, const int* units, ArkUI_Int32 length)
509 {
510 GetArkUINodeModifiers()->getCommonModifier()->setBorderRadius(node, values, units, length);
511 auto* frameNode = reinterpret_cast<FrameNode*>(node);
512 CHECK_NULL_VOID(frameNode);
513 if (!Container::GreatOrEqualAPITargetVersion(PlatformVersion::VERSION_FOURTEEN)) {
514 ImageModelNG::SetBackBorder(frameNode);
515 return;
516 }
517 if (length != DEFAULT_LENGTH) {
518 return;
519 }
520 NG::BorderRadiusProperty borderRadius;
521 borderRadius.radiusTopLeft = Dimension(values[NUM_0], static_cast<OHOS::Ace::DimensionUnit>(units[NUM_0]));
522 borderRadius.radiusTopRight = Dimension(values[NUM_1], static_cast<OHOS::Ace::DimensionUnit>(units[NUM_1]));
523 borderRadius.radiusBottomLeft = Dimension(values[NUM_2], static_cast<OHOS::Ace::DimensionUnit>(units[NUM_2]));
524 borderRadius.radiusBottomRight = Dimension(values[NUM_3], static_cast<OHOS::Ace::DimensionUnit>(units[NUM_3]));
525 borderRadius.multiValued = true;
526 ImageModelNG::SetBorderRadius(frameNode, borderRadius);
527 }
528
529
ResetImageBorderRadius(ArkUINodeHandle node)530 void ResetImageBorderRadius(ArkUINodeHandle node)
531 {
532 GetArkUINodeModifiers()->getCommonModifier()->resetBorderRadius(node);
533 auto* frameNode = reinterpret_cast<FrameNode*>(node);
534 CHECK_NULL_VOID(frameNode);
535 if (!Container::GreatOrEqualAPITargetVersion(PlatformVersion::VERSION_FOURTEEN)) {
536 ImageModelNG::SetBackBorder(frameNode);
537 return;
538 }
539 OHOS::Ace::CalcDimension reset;
540 ImageModelNG::SetBorderRadius(frameNode, reset);
541 }
542
SetImageBorderWithValues(ArkUINodeHandle node,const ArkUI_Float32 * values,ArkUI_Int32 valuesSize)543 void SetImageBorderWithValues(ArkUINodeHandle node, const ArkUI_Float32* values, ArkUI_Int32 valuesSize)
544 {
545 auto* frameNode = reinterpret_cast<FrameNode*>(node);
546 CHECK_NULL_VOID(frameNode);
547 if ((values == nullptr) || (valuesSize != NUM_12)) {
548 return;
549 }
550
551 int32_t offset = NUM_0;
552 NG::BorderRadiusProperty borderRadius;
553 SetOptionalBorder(borderRadius.radiusTopLeft, values, valuesSize, offset);
554 SetOptionalBorder(borderRadius.radiusTopRight, values, valuesSize, offset);
555 SetOptionalBorder(borderRadius.radiusBottomLeft, values, valuesSize, offset);
556 SetOptionalBorder(borderRadius.radiusBottomRight, values, valuesSize, offset);
557
558 borderRadius.multiValued = true;
559 if (borderRadius.radiusTopLeft.has_value() || borderRadius.radiusTopRight.has_value() ||
560 borderRadius.radiusBottomLeft.has_value() || borderRadius.radiusBottomRight.has_value()) {
561 ImageModelNG::SetBorderRadius(frameNode, borderRadius);
562 }
563 }
564
SetImageBorder(ArkUINodeHandle node)565 void SetImageBorder(ArkUINodeHandle node)
566 {
567 auto* frameNode = reinterpret_cast<FrameNode*>(node);
568 CHECK_NULL_VOID(frameNode);
569 ImageModelNG::SetBackBorder(frameNode);
570 }
571
ResetImageBorder(ArkUINodeHandle node)572 void ResetImageBorder(ArkUINodeHandle node)
573 {
574 auto* frameNode = reinterpret_cast<FrameNode*>(node);
575 CHECK_NULL_VOID(frameNode);
576 if (!Container::GreatOrEqualAPITargetVersion(PlatformVersion::VERSION_FOURTEEN)) {
577 ImageModelNG::SetBackBorder(frameNode);
578 return;
579 }
580 GetArkUINodeModifiers()->getCommonModifier()->resetBorder(node);
581 CalcDimension borderRadius;
582 ImageModelNG::SetBorderRadius(frameNode, borderRadius);
583 }
584
SetImageOpacity(ArkUINodeHandle node,ArkUI_Float32 opacity)585 void SetImageOpacity(ArkUINodeHandle node, ArkUI_Float32 opacity)
586 {
587 auto* frameNode = reinterpret_cast<FrameNode*>(node);
588 CHECK_NULL_VOID(frameNode);
589 auto opacityValue = static_cast<float>(opacity);
590 if ((LessNotEqual(opacityValue, 0.0)) || GreatNotEqual(opacityValue, 1.0)) {
591 opacityValue = 0.0f;
592 }
593 ViewAbstract::SetOpacity(frameNode, opacityValue);
594 }
595
ResetImageOpacity(ArkUINodeHandle node)596 void ResetImageOpacity(ArkUINodeHandle node)
597 {
598 auto* frameNode = reinterpret_cast<FrameNode*>(node);
599 CHECK_NULL_VOID(frameNode);
600 ViewAbstract::SetOpacity(frameNode, 0.0f);
601 }
602
SetEdgeAntialiasing(ArkUINodeHandle node,ArkUI_Float32 edgeAntialiasing)603 void SetEdgeAntialiasing(ArkUINodeHandle node, ArkUI_Float32 edgeAntialiasing)
604 {
605 auto* frameNode = reinterpret_cast<FrameNode*>(node);
606 CHECK_NULL_VOID(frameNode);
607 ImageModelNG::SetSmoothEdge(frameNode, edgeAntialiasing);
608 }
609
ResetEdgeAntialiasing(ArkUINodeHandle node)610 void ResetEdgeAntialiasing(ArkUINodeHandle node)
611 {
612 auto* frameNode = reinterpret_cast<FrameNode*>(node);
613 CHECK_NULL_VOID(frameNode);
614 ImageModelNG::SetSmoothEdge(frameNode, DEFAULT_IMAGE_EDGE_ANTIALIASING);
615 }
616
SetResizable(ArkUINodeHandle node,const ArkUIStringAndFloat * options)617 void SetResizable(ArkUINodeHandle node, const ArkUIStringAndFloat* options)
618 {
619 auto* frameNode = reinterpret_cast<FrameNode*>(node);
620 CHECK_NULL_VOID(frameNode);
621 ImageResizableSlice resizable;
622 SetResizableFromVec(resizable, options);
623 ImageModelNG::SetResizableSlice(frameNode, resizable);
624 }
625
ResetResizable(ArkUINodeHandle node)626 void ResetResizable(ArkUINodeHandle node)
627 {
628 auto* frameNode = reinterpret_cast<FrameNode*>(node);
629 CHECK_NULL_VOID(frameNode);
630 ImageModelNG::SetResizableSlice(frameNode, DEFAULT_IMAGE_SLICE);
631 }
632
GetFitOriginalSize(ArkUINodeHandle node)633 int32_t GetFitOriginalSize(ArkUINodeHandle node)
634 {
635 auto* frameNode = reinterpret_cast<FrameNode*>(node);
636 CHECK_NULL_RETURN(frameNode, DEFAULT_FALSE);
637 return ImageModelNG::GetFitOriginalSize(frameNode);
638 }
639
GetFillColor(ArkUINodeHandle node)640 uint32_t GetFillColor(ArkUINodeHandle node)
641 {
642 auto* frameNode = reinterpret_cast<FrameNode*>(node);
643 CHECK_NULL_RETURN(frameNode, ERROR_UINT_CODE);
644 return ImageModelNG::GetFillColor(frameNode);
645 }
646
SetPixelMap(ArkUINodeHandle node,void * drawableDescriptor)647 void SetPixelMap(ArkUINodeHandle node, void* drawableDescriptor)
648 {
649 auto* frameNode = reinterpret_cast<FrameNode*>(node);
650 CHECK_NULL_VOID(frameNode);
651 ImageModelNG::SetPixelMap(frameNode, drawableDescriptor);
652 }
653
SetPixelMapArray(ArkUINodeHandle node,void * animatedDrawableDescriptor)654 void SetPixelMapArray(ArkUINodeHandle node, void* animatedDrawableDescriptor)
655 {
656 auto* frameNode = reinterpret_cast<FrameNode*>(node);
657 CHECK_NULL_VOID(frameNode);
658 ImageModelNG::SetPixelMapArray(frameNode, animatedDrawableDescriptor);
659 }
660
SetResourceSrc(ArkUINodeHandle node,void * resource)661 void SetResourceSrc(ArkUINodeHandle node, void* resource)
662 {
663 auto* frameNode = reinterpret_cast<FrameNode*>(node);
664 CHECK_NULL_VOID(frameNode);
665 ImageModelNG::SetResource(frameNode, resource);
666 }
667
SetImageResizable(ArkUINodeHandle node,ArkUI_Float32 left,ArkUI_Float32 top,ArkUI_Float32 right,ArkUI_Float32 bottom)668 void SetImageResizable(ArkUINodeHandle node, ArkUI_Float32 left, ArkUI_Float32 top,
669 ArkUI_Float32 right, ArkUI_Float32 bottom)
670 {
671 auto* frameNode = reinterpret_cast<FrameNode*>(node);
672 CHECK_NULL_VOID(frameNode);
673 ImageResizableSlice resizable;
674 Dimension leftDimension(left, DimensionUnit::VP);
675 resizable.SetEdgeSlice(ResizableOption::LEFT, leftDimension);
676 Dimension topDimension(top, DimensionUnit::VP);
677 resizable.SetEdgeSlice(ResizableOption::TOP, topDimension);
678 Dimension rightDimension(right, DimensionUnit::VP);
679 resizable.SetEdgeSlice(ResizableOption::RIGHT, rightDimension);
680 Dimension bottomDimension(bottom, DimensionUnit::VP);
681 resizable.SetEdgeSlice(ResizableOption::BOTTOM, bottomDimension);
682 ImageModelNG::SetResizableSlice(frameNode, resizable);
683 }
684
GetImageResizable(ArkUINodeHandle node,ArkUI_Float32 * arrayValue,ArkUI_Int32 size)685 void GetImageResizable(ArkUINodeHandle node, ArkUI_Float32* arrayValue, ArkUI_Int32 size)
686 {
687 auto* frameNode = reinterpret_cast<FrameNode*>(node);
688 CHECK_NULL_VOID(frameNode);
689 auto resizable = ImageModelNG::GetResizableSlice(frameNode);
690 if (0 < size) {
691 arrayValue[0] = resizable.left.Value();
692 }
693 if (NUM_1 < size) {
694 arrayValue[NUM_1] = resizable.top.Value();
695 }
696 if (NUM_2 < size) {
697 arrayValue[NUM_2] = resizable.right.Value();
698 }
699 if (NUM_3 < size) {
700 arrayValue[NUM_3] = resizable.bottom.Value();
701 }
702 }
703
SetDynamicRangeMode(ArkUINodeHandle node,ArkUI_Int32 dynamicRangeMode)704 void SetDynamicRangeMode(ArkUINodeHandle node, ArkUI_Int32 dynamicRangeMode)
705 {
706 auto* frameNode = reinterpret_cast<FrameNode*>(node);
707 CHECK_NULL_VOID(frameNode);
708 DynamicRangeMode dynamicRangeModeValue = static_cast<DynamicRangeMode>(dynamicRangeMode);
709 if (dynamicRangeModeValue < DynamicRangeMode::HIGH || dynamicRangeModeValue > DynamicRangeMode::STANDARD) {
710 dynamicRangeModeValue = DynamicRangeMode::STANDARD;
711 }
712 ImageModelNG::SetDynamicRangeMode(frameNode, dynamicRangeModeValue);
713 }
714
SetAltSourceInfo(ArkUINodeHandle node,const ArkUIImageSourceInfo * sourceInfo)715 void SetAltSourceInfo(ArkUINodeHandle node, const ArkUIImageSourceInfo* sourceInfo)
716 {
717 auto* frameNode = reinterpret_cast<FrameNode*>(node);
718 CHECK_NULL_VOID(frameNode);
719 CHECK_NULL_VOID(sourceInfo);
720 if (sourceInfo->url) {
721 if (ImageSourceInfo::ResolveURIType(sourceInfo->url) == SrcType::NETWORK) {
722 return;
723 }
724 ImageModelNG::SetAlt(frameNode, ImageSourceInfo { sourceInfo->url, "", "" });
725 return;
726 }
727 if (sourceInfo->resource) {
728 ImageModelNG::SetAltResource(frameNode, sourceInfo->resource);
729 return;
730 }
731 if (sourceInfo->pixelMap) {
732 ImageModelNG::SetAltPixelMap(frameNode, sourceInfo->pixelMap);
733 return;
734 }
735 }
736
ResetDynamicRangeMode(ArkUINodeHandle node)737 void ResetDynamicRangeMode(ArkUINodeHandle node)
738 {
739 auto* frameNode = reinterpret_cast<FrameNode*>(node);
740 CHECK_NULL_VOID(frameNode);
741 ImageModelNG::SetDynamicRangeMode(frameNode, DynamicRangeMode::STANDARD);
742 }
743
SetEnhancedImageQuality(ArkUINodeHandle node,ArkUI_Int32 imageQuality)744 void SetEnhancedImageQuality(ArkUINodeHandle node, ArkUI_Int32 imageQuality)
745 {
746 auto* frameNode = reinterpret_cast<FrameNode*>(node);
747 CHECK_NULL_VOID(frameNode);
748 AIImageQuality imageQualityValue = static_cast<AIImageQuality>(imageQuality);
749 if (imageQualityValue < AIImageQuality::NONE || imageQualityValue > AIImageQuality::HIGH) {
750 imageQualityValue = AIImageQuality::NONE;
751 }
752 ImageModelNG::SetEnhancedImageQuality(frameNode, imageQualityValue);
753 }
754
ResetEnhancedImageQuality(ArkUINodeHandle node)755 void ResetEnhancedImageQuality(ArkUINodeHandle node)
756 {
757 auto* frameNode = reinterpret_cast<FrameNode*>(node);
758 CHECK_NULL_VOID(frameNode);
759 ImageModelNG::SetEnhancedImageQuality(frameNode, AIImageQuality::NONE);
760 }
761
EnableAnalyzer(ArkUINodeHandle node,ArkUI_Bool enable)762 void EnableAnalyzer(ArkUINodeHandle node, ArkUI_Bool enable)
763 {
764 auto* frameNode = reinterpret_cast<FrameNode*>(node);
765 CHECK_NULL_VOID(frameNode);
766 ImageModelNG::EnableAnalyzer(frameNode, enable);
767 }
768
SetImagePrivacySensitve(ArkUINodeHandle node,ArkUI_Int32 sensitive)769 void SetImagePrivacySensitve(ArkUINodeHandle node, ArkUI_Int32 sensitive)
770 {
771 auto* frameNode = reinterpret_cast<FrameNode*>(node);
772 CHECK_NULL_VOID(frameNode);
773 frameNode->SetPrivacySensitive(static_cast<bool>(sensitive));
774 frameNode->MarkDirtyNode(PROPERTY_UPDATE_MEASURE);
775 }
776
ResetImagePrivacySensitve(ArkUINodeHandle node)777 void ResetImagePrivacySensitve(ArkUINodeHandle node)
778 {
779 auto* frameNode = reinterpret_cast<FrameNode*>(node);
780 CHECK_NULL_VOID(frameNode);
781 frameNode->SetPrivacySensitive(DEFAULT_IMAGE_SENSITIVE);
782 frameNode->MarkDirtyNode(PROPERTY_UPDATE_MEASURE);
783 }
784
AnalyzerConfig(ArkUINodeHandle node,void * config)785 void AnalyzerConfig(ArkUINodeHandle node, void* config)
786 {
787 auto* frameNode = reinterpret_cast<FrameNode*>(node);
788 CHECK_NULL_VOID(frameNode);
789 ImageModelNG::SetImageAnalyzerConfig(frameNode, config);
790 }
791
ResetImageContent(ArkUINodeHandle node)792 void ResetImageContent(ArkUINodeHandle node)
793 {
794 auto* frameNode = reinterpret_cast<FrameNode*>(node);
795 CHECK_NULL_VOID(frameNode);
796 ImageModelNG::ResetImage(frameNode);
797 }
798
ResetImageSrc(ArkUINodeHandle node)799 void ResetImageSrc(ArkUINodeHandle node)
800 {
801 auto* frameNode = reinterpret_cast<FrameNode*>(node);
802 CHECK_NULL_VOID(frameNode);
803 ImageModelNG::ResetImageSrc(frameNode);
804 }
805
SetInitialPixelMap(ArkUINodeHandle node,ArkUI_Int64 pixelMap)806 void SetInitialPixelMap(ArkUINodeHandle node, ArkUI_Int64 pixelMap)
807 {
808 auto* frameNode = reinterpret_cast<FrameNode*>(node);
809 CHECK_NULL_VOID(frameNode);
810 void* rawPtr = reinterpret_cast<void*>(pixelMap);
811 CHECK_NULL_VOID(rawPtr);
812 RefPtr<PixelMap> pixelMapRef = PixelMap::CreatePixelMap(rawPtr);
813 ImageModelNG::SetInitialPixelMap(frameNode, pixelMapRef);
814 }
815
SetOnComplete(ArkUINodeHandle node,void * callback)816 void SetOnComplete(ArkUINodeHandle node, void* callback)
817 {
818 auto* frameNode = reinterpret_cast<FrameNode*>(node);
819 CHECK_NULL_VOID(frameNode);
820 if (callback) {
821 auto onComplete = reinterpret_cast<std::function<void(const LoadImageSuccessEvent&)>*>(callback);
822 ImageModelNG::SetOnComplete(frameNode, std::move(*onComplete));
823 } else {
824 ImageModelNG::SetOnComplete(frameNode, nullptr);
825 }
826 }
827
SetOnError(ArkUINodeHandle node,void * callback)828 void SetOnError(ArkUINodeHandle node, void* callback)
829 {
830 auto* frameNode = reinterpret_cast<FrameNode*>(node);
831 CHECK_NULL_VOID(frameNode);
832 if (callback) {
833 auto onError = reinterpret_cast<std::function<void(const LoadImageFailEvent&)>*>(callback);
834 ImageModelNG::SetOnError(frameNode, std::move(*onError));
835 } else {
836 ImageModelNG::SetOnError(frameNode, nullptr);
837 }
838 }
839
ResetOnError(ArkUINodeHandle node)840 void ResetOnError(ArkUINodeHandle node)
841 {
842 auto* frameNode = reinterpret_cast<FrameNode*>(node);
843 CHECK_NULL_VOID(frameNode);
844 ImageModelNG::SetOnError(frameNode, nullptr);
845 }
846
SetImageOnFinish(ArkUINodeHandle node,void * callback)847 void SetImageOnFinish(ArkUINodeHandle node, void* callback)
848 {
849 auto* frameNode = reinterpret_cast<FrameNode*>(node);
850 CHECK_NULL_VOID(frameNode);
851 if (callback) {
852 auto onFinish = reinterpret_cast<std::function<void()>*>(callback);
853 ImageModelNG::SetOnSvgPlayFinish(frameNode, std::move(*onFinish));
854 } else {
855 ImageModelNG::SetOnSvgPlayFinish(frameNode, nullptr);
856 }
857 }
858
ResetImageOnFinish(ArkUINodeHandle node)859 void ResetImageOnFinish(ArkUINodeHandle node)
860 {
861 auto* frameNode = reinterpret_cast<FrameNode*>(node);
862 CHECK_NULL_VOID(frameNode);
863 ImageModelNG::SetOnSvgPlayFinish(frameNode, nullptr);
864 }
865
SetImageRotateOrientation(ArkUINodeHandle node,ArkUI_Int32 orientation)866 void SetImageRotateOrientation(ArkUINodeHandle node, ArkUI_Int32 orientation)
867 {
868 auto* frameNode = reinterpret_cast<FrameNode*>(node);
869 CHECK_NULL_VOID(frameNode);
870 auto orientationValue = static_cast<ImageRotateOrientation>(orientation);
871 if (orientationValue < ImageRotateOrientation::AUTO || orientationValue > ImageRotateOrientation::LEFT) {
872 orientationValue = ImageRotateOrientation::UP;
873 }
874 ImageModelNG::SetOrientation(frameNode, orientationValue);
875 }
876
ResetImageRotateOrientation(ArkUINodeHandle node)877 void ResetImageRotateOrientation(ArkUINodeHandle node)
878 {
879 auto* frameNode = reinterpret_cast<FrameNode*>(node);
880 CHECK_NULL_VOID(frameNode);
881 ImageModelNG::SetOrientation(frameNode, ImageRotateOrientation::UP);
882 }
883 } // namespace
884
885 namespace NodeModifier {
GetImageModifier()886 const ArkUIImageModifier* GetImageModifier()
887 {
888 static const ArkUIImageModifier modifier = { SetImageSrc, SetImageShowSrc, SetCopyOption, ResetCopyOption,
889 SetAutoResize, ResetAutoResize, SetObjectRepeat, ResetObjectRepeat, SetRenderMode, ResetRenderMode, SetSyncLoad,
890 ResetSyncLoad, SetObjectFit, ResetObjectFit, SetFitOriginalSize, ResetFitOriginalSize, SetSourceSize,
891 ResetSourceSize, SetMatchTextDirection, ResetMatchTextDirection, SetFillColor, ResetFillColor, SetAlt, ResetAlt,
892 SetImageInterpolation, ResetImageInterpolation, SetColorFilter, ResetColorFilter, SetImageSyncLoad,
893 ResetImageSyncLoad, SetImageObjectFit, ResetImageObjectFit, SetImageFitOriginalSize, ResetImageFitOriginalSize,
894 SetImageDraggable, ResetImageDraggable, SetImageBorderRadius, ResetImageBorderRadius, SetImageBorder,
895 SetImageBorderWithValues, ResetImageBorder, SetImageOpacity, ResetImageOpacity, SetEdgeAntialiasing,
896 ResetEdgeAntialiasing, SetResizable, ResetResizable, SetDynamicRangeMode, ResetDynamicRangeMode,
897 SetImageRotateOrientation, ResetImageRotateOrientation, SetEnhancedImageQuality, ResetEnhancedImageQuality,
898 GetImageSrc, GetAutoResize, GetObjectRepeat, GetObjectFit, GetImageInterpolation, GetColorFilter, GetAlt,
899 GetImageDraggable, GetRenderMode, SetImageResizable, GetImageResizable, GetFitOriginalSize, GetFillColor,
900 SetPixelMap, SetPixelMapArray, SetResourceSrc, EnableAnalyzer, SetImagePrivacySensitve,
901 ResetImagePrivacySensitve, AnalyzerConfig, SetDrawingColorFilter, GetDrawingColorFilter, ResetImageContent,
902 ResetImageSrc, SetInitialPixelMap, SetAltSourceInfo, SetOnComplete, SetOnError, ResetOnError, SetImageOnFinish,
903 ResetImageOnFinish };
904 return &modifier;
905 }
906
GetCJUIImageModifier()907 const CJUIImageModifier* GetCJUIImageModifier()
908 {
909 static const CJUIImageModifier modifier = {
910 SetImageSrc, SetImageShowSrc, SetCopyOption, ResetCopyOption, SetAutoResize,
911 ResetAutoResize, SetObjectRepeat, ResetObjectRepeat, SetRenderMode, ResetRenderMode, SetSyncLoad, ResetSyncLoad,
912 SetObjectFit, ResetObjectFit, SetFitOriginalSize, ResetFitOriginalSize, SetSourceSize, ResetSourceSize,
913 SetMatchTextDirection, ResetMatchTextDirection, SetFillColor, ResetFillColor, SetAlt, ResetAlt,
914 SetImageInterpolation, ResetImageInterpolation, SetColorFilter, ResetColorFilter, SetImageSyncLoad,
915 ResetImageSyncLoad, SetImageObjectFit, ResetImageObjectFit, SetImageFitOriginalSize, ResetImageFitOriginalSize,
916 SetImageDraggable, ResetImageDraggable, SetImageBorderRadius, ResetImageBorderRadius, SetImageBorder,
917 ResetImageBorder, SetImageOpacity, ResetImageOpacity, SetEdgeAntialiasing, ResetEdgeAntialiasing, SetResizable,
918 ResetResizable, SetDynamicRangeMode, ResetDynamicRangeMode, SetEnhancedImageQuality,
919 ResetEnhancedImageQuality, GetImageSrc, GetAutoResize, GetObjectRepeat, GetObjectFit,
920 GetImageInterpolation, GetColorFilter, GetAlt, GetImageDraggable, GetRenderMode, SetImageResizable,
921 GetImageResizable, GetFitOriginalSize, GetFillColor, SetPixelMap, SetPixelMapArray, SetResourceSrc,
922 EnableAnalyzer, SetImagePrivacySensitve, ResetImagePrivacySensitve, AnalyzerConfig, SetDrawingColorFilter,
923 GetDrawingColorFilter, ResetImageSrc, SetInitialPixelMap, SetOnComplete, SetOnError,
924 ResetOnError, SetImageOnFinish, ResetImageOnFinish };
925 return &modifier;
926 }
927
SetImageOnComplete(ArkUINodeHandle node,void * extraParam)928 void SetImageOnComplete(ArkUINodeHandle node, void* extraParam)
929 {
930 auto* frameNode = reinterpret_cast<FrameNode*>(node);
931 CHECK_NULL_VOID(frameNode);
932 auto onEvent = [node, extraParam](const LoadImageSuccessEvent& info) {
933 ArkUINodeEvent event;
934 event.kind = COMPONENT_ASYNC_EVENT;
935 event.extraParam = reinterpret_cast<intptr_t>(extraParam);
936 event.componentAsyncEvent.subKind = ON_IMAGE_COMPLETE;
937 event.componentAsyncEvent.data[IMAGE_LOAD_STATUS_INDEX].i32 = info.GetLoadingStatus();
938 event.componentAsyncEvent.data[IMAGE_WIDTH_INDEX].f32 = info.GetWidth();
939 event.componentAsyncEvent.data[IMAGE_HEIGHT_INDEX].f32 = info.GetHeight();
940 event.componentAsyncEvent.data[IMAGE_COMPONENT_WIDTH_INDEX].f32 = info.GetComponentWidth();
941 event.componentAsyncEvent.data[IMAGE_COMPONENT_HEIGHT_INDEX].f32 = info.GetComponentHeight();
942 event.componentAsyncEvent.data[IMAGE_CONTENT_OFFSET_X_INDEX].f32 = info.GetContentOffsetX();
943 event.componentAsyncEvent.data[IMAGE_CONTENT_OFFSET_Y_INDEX].f32 = info.GetContentOffsetY();
944 event.componentAsyncEvent.data[IMAGE_CONTENT_WIDTH_INDEX].f32 = info.GetContentWidth();
945 event.componentAsyncEvent.data[IMAGE_CONTENT_HEIGHT_INDEX].f32 = info.GetContentHeight();
946 SendArkUIAsyncEvent(&event);
947 };
948 ImageModelNG::SetOnComplete(frameNode, std::move(onEvent));
949 }
950
SetImageOnError(ArkUINodeHandle node,void * extraParam)951 void SetImageOnError(ArkUINodeHandle node, void* extraParam)
952 {
953 auto* frameNode = reinterpret_cast<FrameNode*>(node);
954 CHECK_NULL_VOID(frameNode);
955 auto onEvent = [node, extraParam](const LoadImageFailEvent& info) {
956 ArkUINodeEvent event;
957 event.kind = COMPONENT_ASYNC_EVENT;
958 event.extraParam = reinterpret_cast<intptr_t>(extraParam);
959 event.componentAsyncEvent.subKind = ON_IMAGE_ERROR;
960 event.componentAsyncEvent.data[0].i32 = LOAD_ERROR_CODE;
961 SendArkUIAsyncEvent(&event);
962 };
963 ImageModelNG::SetOnError(frameNode, std::move(onEvent));
964 }
965
SetImageOnSvgPlayFinish(ArkUINodeHandle node,void * extraParam)966 void SetImageOnSvgPlayFinish(ArkUINodeHandle node, void* extraParam)
967 {
968 auto* frameNode = reinterpret_cast<FrameNode*>(node);
969 CHECK_NULL_VOID(frameNode);
970 auto onSvgPlayFinishEvent = [node, extraParam]() {
971 ArkUINodeEvent event;
972 event.kind = COMPONENT_ASYNC_EVENT;
973 event.extraParam = reinterpret_cast<intptr_t>(extraParam);
974 event.componentAsyncEvent.subKind = ON_IMAGE_SVG_PLAY_FINISH;
975 SendArkUIAsyncEvent(&event);
976 };
977 ImageModelNG::SetOnSvgPlayFinish(frameNode, std::move(onSvgPlayFinishEvent));
978 }
979
SetImageOnDownloadProgress(ArkUINodeHandle node,void * extraParam)980 void SetImageOnDownloadProgress(ArkUINodeHandle node, void* extraParam)
981 {
982 auto* frameNode = reinterpret_cast<FrameNode*>(node);
983 CHECK_NULL_VOID(frameNode);
984 auto onDownloadProgress = [node, extraParam](const uint32_t& dlNow, const uint32_t& dlTotal) {
985 ArkUINodeEvent event;
986 event.kind = COMPONENT_ASYNC_EVENT;
987 event.extraParam = reinterpret_cast<intptr_t>(extraParam);
988 event.componentAsyncEvent.subKind = ON_IMAGE_DOWNLOAD_PROGRESS;
989 event.componentAsyncEvent.data[0].u32 = dlNow;
990 event.componentAsyncEvent.data[1].u32 = dlTotal;
991 SendArkUIAsyncEvent(&event);
992 };
993 ImageModelNG::SetOnDownloadProgress(frameNode, std::move(onDownloadProgress));
994 }
995
ResetImageOnComplete(ArkUINodeHandle node)996 void ResetImageOnComplete(ArkUINodeHandle node)
997 {
998 auto* frameNode = reinterpret_cast<FrameNode*>(node);
999 CHECK_NULL_VOID(frameNode);
1000 ImageModelNG::SetOnComplete(frameNode, nullptr);
1001 }
ResetImageOnError(ArkUINodeHandle node)1002 void ResetImageOnError(ArkUINodeHandle node)
1003 {
1004 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1005 CHECK_NULL_VOID(frameNode);
1006 ImageModelNG::SetOnError(frameNode, nullptr);
1007 }
ResetImageOnSvgPlayFinish(ArkUINodeHandle node)1008 void ResetImageOnSvgPlayFinish(ArkUINodeHandle node)
1009 {
1010 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1011 CHECK_NULL_VOID(frameNode);
1012 ImageModelNG::SetOnSvgPlayFinish(frameNode, nullptr);
1013 }
ResetImageOnDownloadProgress(ArkUINodeHandle node)1014 void ResetImageOnDownloadProgress(ArkUINodeHandle node)
1015 {
1016 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1017 CHECK_NULL_VOID(frameNode);
1018 ImageModelNG::SetOnDownloadProgress(frameNode, nullptr);
1019 }
1020 } // namespace NodeModifier
1021 } // namespace OHOS::Ace::NG
1022