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 "effect/color_filter.h"
18
19 #include "core/common/card_scope.h"
20 #include "core/common/resource/resource_parse_utils.h"
21 #include "core/components/image/image_component.h"
22 #include "core/components/image/image_theme.h"
23 #include "core/components_ng/base/view_abstract.h"
24 #include "core/components_ng/pattern/image/image_model_ng.h"
25 #include "core/pipeline_ng/pipeline_context.h"
26
27 namespace OHOS::Ace::NG {
28 namespace {
29 constexpr int NUM_0 = 1;
30 constexpr int NUM_1 = 1;
31 constexpr int NUM_2 = 2;
32 constexpr int NUM_3 = 3;
33 constexpr int NUM_12 = 12;
34 constexpr int DEFAULT_LENGTH = 4;
35 constexpr int RESIZEABLE_VEC_LENGTH = 12;
36 constexpr CopyOptions DEFAULT_IMAGE_COPYOPTION = CopyOptions::None;
37 constexpr bool DEFAULT_SYNC_LOAD_VALUE = false;
38 constexpr ImageFit DEFAULT_OBJECT_FIT_VALUE = ImageFit::COVER;
39 constexpr bool DEFAULT_FIT_ORIGINAL_SIZE = false;
40 constexpr bool DEFAULT_DRAGGABLE = false;
41 constexpr bool DEFAULT_IMAGE_SENSITIVE = false;
42 constexpr ArkUI_Float32 DEFAULT_IMAGE_EDGE_ANTIALIASING = 0;
43 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 };
44 constexpr int32_t LOAD_ERROR_CODE = 401;
45 constexpr int32_t IMAGE_LOAD_STATUS_INDEX = 0;
46 constexpr int32_t IMAGE_WIDTH_INDEX = 1;
47 constexpr int32_t IMAGE_HEIGHT_INDEX = 2;
48 constexpr int32_t IMAGE_COMPONENT_WIDTH_INDEX = 3;
49 constexpr int32_t IMAGE_COMPONENT_HEIGHT_INDEX = 4;
50 constexpr int32_t IMAGE_CONTENT_OFFSET_X_INDEX = 5;
51 constexpr int32_t IMAGE_CONTENT_OFFSET_Y_INDEX = 6;
52 constexpr int32_t IMAGE_CONTENT_WIDTH_INDEX = 7;
53 constexpr int32_t IMAGE_CONTENT_HEIGHT_INDEX = 8;
54 constexpr uint32_t MAX_COLOR_FILTER_SIZE = 20;
55 constexpr uint32_t ERROR_UINT_CODE = -1;
56 constexpr int32_t DEFAULT_FALSE = 0;
57 constexpr float HDR_BRIGHTNESS_MIN = 0.0f;
58 constexpr float HDR_BRIGHTNESS_MAX = 1.0f;
59 constexpr float DEFAULT_HDR_BRIGHTNESS = 1.0f;
60 const std::vector<ResizableOption> directions = { ResizableOption::TOP, ResizableOption::RIGHT,
61 ResizableOption::BOTTOM, ResizableOption::LEFT };
62 thread_local std::string g_strValue;
63
64 enum class ResourceType : uint32_t {
65 COLOR = 10001,
66 FLOAT,
67 STRING,
68 PLURAL,
69 BOOLEAN,
70 INTARRAY,
71 INTEGER,
72 PATTERN,
73 STRARRAY,
74 MEDIA = 20000,
75 RAWFILE = 30000
76 };
77
SetOptionalBorder(std::optional<Dimension> & optionalDimension,const ArkUI_Float32 * values,ArkUI_Int32 valuesSize,ArkUI_Int32 & offset)78 void SetOptionalBorder(std::optional<Dimension>& optionalDimension, const ArkUI_Float32* values, ArkUI_Int32 valuesSize,
79 ArkUI_Int32& offset)
80 {
81 bool hasValue = static_cast<bool>(values[offset]);
82 if (hasValue) {
83 optionalDimension =
84 Dimension(values[offset + NUM_1], static_cast<OHOS::Ace::DimensionUnit>(values[offset + NUM_2]));
85 }
86 offset = offset + NUM_3;
87 }
88
SetCalcDimension(std::optional<CalcDimension> & optDimension,const ArkUIStringAndFloat * options,ArkUI_Int32 optionsLength,ArkUI_Int32 offset)89 bool SetCalcDimension(std::optional<CalcDimension>& optDimension, const ArkUIStringAndFloat* options,
90 ArkUI_Int32 optionsLength, ArkUI_Int32 offset)
91 {
92 if ((options == nullptr) || (offset < 0) || ((offset + NUM_3) > optionsLength)) {
93 return false;
94 }
95 auto hasValue = options[offset];
96 auto value = options[offset + NUM_1];
97 auto unit = options[offset + NUM_2];
98 if (static_cast<bool>(hasValue.value)) {
99 auto unitValue = static_cast<DimensionUnit>(unit.value);
100 if (unitValue == DimensionUnit::CALC) {
101 std::string str;
102 if (value.valueStr != nullptr) {
103 str = value.valueStr;
104 }
105 CalcDimension calcDimension(str, unitValue);
106 optDimension = calcDimension;
107 } else {
108 CalcDimension calcDimension(value.value, unitValue);
109 optDimension = calcDimension;
110 }
111 }
112 return true;
113 }
114
SetImageResizableUpdateFunc(ImageResizableSlice & resizable,const RefPtr<ResourceObject> resObj,ResizableOption direction)115 void SetImageResizableUpdateFunc(
116 ImageResizableSlice& resizable, const RefPtr<ResourceObject> resObj, ResizableOption direction)
117 {
118 CHECK_NULL_VOID(resObj);
119 auto&& updateFunc = [direction](const RefPtr<ResourceObject>& currentResObj, ImageResizableSlice& slice) {
120 CalcDimension dim;
121 ResizableOption resizableOption;
122 switch (direction) {
123 case ResizableOption::LEFT:
124 resizableOption = ResizableOption::LEFT;
125 break;
126 case ResizableOption::RIGHT:
127 resizableOption = ResizableOption::RIGHT;
128 break;
129 case ResizableOption::TOP:
130 resizableOption = ResizableOption::TOP;
131 break;
132 case ResizableOption::BOTTOM:
133 resizableOption = ResizableOption::BOTTOM;
134 break;
135 default:
136 return;
137 }
138 if (ResourceParseUtils::ParseResDimensionVpNG(currentResObj, dim) && dim.IsValid()) {
139 slice.SetEdgeSlice(resizableOption, dim);
140 }
141 };
142 switch (direction) {
143 case ResizableOption::LEFT:
144 resizable.AddResource("image.left", resObj, std::move(updateFunc));
145 break;
146 case ResizableOption::RIGHT:
147 resizable.AddResource("image.right", resObj, std::move(updateFunc));
148 break;
149 case ResizableOption::TOP:
150 resizable.AddResource("image.top", resObj, std::move(updateFunc));
151 break;
152 case ResizableOption::BOTTOM:
153 resizable.AddResource("image.bottom", resObj, std::move(updateFunc));
154 break;
155 default:
156 break;
157 }
158 }
159
SetResizableFromVec(ImageResizableSlice & resizable,const ArkUIStringAndFloat * options,std::vector<RefPtr<ResourceObject>> & imageResizableResArray)160 void SetResizableFromVec(ImageResizableSlice& resizable, const ArkUIStringAndFloat* options,
161 std::vector<RefPtr<ResourceObject>>& imageResizableResArray)
162 {
163 for (unsigned int index = 0; index < RESIZEABLE_VEC_LENGTH; index += NUM_3) {
164 std::optional<CalcDimension> optDimension;
165 SetCalcDimension(optDimension, options, RESIZEABLE_VEC_LENGTH, index);
166 if (optDimension.has_value()) {
167 auto direction = directions[index / NUM_3];
168 if ((index / NUM_3) < imageResizableResArray.size()) {
169 SetImageResizableUpdateFunc(resizable, imageResizableResArray[index / NUM_3], direction);
170 }
171 resizable.SetEdgeSlice(direction, optDimension.value());
172 }
173 }
174 }
175
SetImageSrc(ArkUINodeHandle node,const char * value)176 void SetImageSrc(ArkUINodeHandle node, const char* value)
177 {
178 auto* frameNode = reinterpret_cast<FrameNode*>(node);
179 CHECK_NULL_VOID(frameNode);
180 std::string src(value);
181 ImageModelNG::InitImage(frameNode, src);
182 }
183
GetImageSrc(ArkUINodeHandle node)184 const char* GetImageSrc(ArkUINodeHandle node)
185 {
186 auto* frameNode = reinterpret_cast<FrameNode*>(node);
187 CHECK_NULL_RETURN(frameNode, nullptr);
188 g_strValue = ImageModelNG::GetSrc(frameNode).GetSrc();
189 return g_strValue.c_str();
190 }
191
GetThemeConstants(const char * bundleName,const char * moduleName)192 RefPtr<ThemeConstants> GetThemeConstants(const char* bundleName, const char* moduleName)
193 {
194 auto cardId = CardScope::CurrentId();
195 if (cardId != INVALID_CARD_ID) {
196 auto container = Container::Current();
197 auto weak = container->GetCardPipeline(cardId);
198 auto cardPipelineContext = weak.Upgrade();
199 CHECK_NULL_RETURN(cardPipelineContext, nullptr);
200 auto cardThemeManager = cardPipelineContext->GetThemeManager();
201 CHECK_NULL_RETURN(cardThemeManager, nullptr);
202 return cardThemeManager->GetThemeConstants(bundleName, moduleName);
203 }
204 auto container = Container::Current();
205 CHECK_NULL_RETURN(container, nullptr);
206 auto pipelineContext = container->GetPipelineContext();
207 CHECK_NULL_RETURN(pipelineContext, nullptr);
208 auto themeManager = pipelineContext->GetThemeManager();
209 CHECK_NULL_RETURN(themeManager, nullptr);
210 return themeManager->GetThemeConstants(bundleName, moduleName);
211 }
212
SetImageResource(ArkUINodeHandle node,int id,int type,const char * name,const char * bundleName,const char * moduleName)213 void SetImageResource(
214 ArkUINodeHandle node, int id, int type, const char* name, const char* bundleName, const char* moduleName)
215 {
216 auto themeConstants = GetThemeConstants(bundleName, moduleName);
217 auto* frameNode = reinterpret_cast<FrameNode*>(node);
218 CHECK_NULL_VOID(frameNode);
219 if (!themeConstants) {
220 return;
221 }
222 std::optional<std::string> src;
223 if (type == static_cast<int32_t>(ResourceType::RAWFILE)) {
224 src = themeConstants->GetRawfile(name);
225 }
226 if (type == static_cast<int32_t>(ResourceType::MEDIA)) {
227 if (id == -1) {
228 src = themeConstants->GetMediaPathByName(name);
229 } else {
230 src = themeConstants->GetMediaPath(id);
231 }
232 }
233 if (!src.has_value()) {
234 return;
235 }
236
237 ImageModelNG::InitImage(frameNode, src.value());
238 }
239
SetCopyOption(ArkUINodeHandle node,ArkUI_Int32 copyOption)240 void SetCopyOption(ArkUINodeHandle node, ArkUI_Int32 copyOption)
241 {
242 auto* frameNode = reinterpret_cast<FrameNode*>(node);
243 CHECK_NULL_VOID(frameNode);
244 auto copyOptions = static_cast<CopyOptions>(copyOption);
245 if (copyOptions < CopyOptions::None || copyOptions > CopyOptions::Distributed) {
246 copyOptions = DEFAULT_IMAGE_COPYOPTION;
247 }
248 ImageModelNG::SetCopyOption(frameNode, copyOptions);
249 }
250
GetCopyOption(ArkUINodeHandle node)251 int32_t GetCopyOption(ArkUINodeHandle node)
252 {
253 int32_t defaultCopyOption = static_cast<int32_t>(CopyOptions::None);
254 auto* frameNode = reinterpret_cast<FrameNode*>(node);
255 CHECK_NULL_RETURN(frameNode, defaultCopyOption);
256 return static_cast<int32_t>(ImageModelNG::GetCopyOption(frameNode));
257 }
258
SetImageShowSrc(ArkUINodeHandle node,ArkUI_CharPtr src,ArkUI_CharPtr bundleName,ArkUI_CharPtr moduleName,ArkUI_Bool isUriPureNumber)259 void SetImageShowSrc(ArkUINodeHandle node, ArkUI_CharPtr src, ArkUI_CharPtr bundleName, ArkUI_CharPtr moduleName,
260 ArkUI_Bool isUriPureNumber)
261 {
262 auto* frameNode = reinterpret_cast<FrameNode*>(node);
263 CHECK_NULL_VOID(frameNode);
264 ImageModelNG::SetInitialSrc(frameNode, src, bundleName, moduleName, isUriPureNumber);
265 }
266
SetImageShowSrcRes(ArkUINodeHandle node,ArkUI_CharPtr src,ArkUI_CharPtr bundleName,ArkUI_CharPtr moduleName,ArkUI_Bool isUriPureNumber,void * srcRawPtr)267 void SetImageShowSrcRes(ArkUINodeHandle node, ArkUI_CharPtr src, ArkUI_CharPtr bundleName, ArkUI_CharPtr moduleName,
268 ArkUI_Bool isUriPureNumber, void* srcRawPtr)
269 {
270 auto* frameNode = reinterpret_cast<FrameNode*>(node);
271 CHECK_NULL_VOID(frameNode);
272 ImageModelNG::SetInitialSrc(frameNode, src, bundleName, moduleName, isUriPureNumber);
273 if (SystemProperties::ConfigChangePerform() && srcRawPtr) {
274 auto* src = reinterpret_cast<ResourceObject*>(srcRawPtr);
275 auto srcResObj = AceType::Claim(src);
276 ImageModelNG::CreateWithResourceObj(frameNode, ImageResourceType::SRC, srcResObj);
277 }
278 }
279
ResetCopyOption(ArkUINodeHandle node)280 void ResetCopyOption(ArkUINodeHandle node)
281 {
282 auto* frameNode = reinterpret_cast<FrameNode*>(node);
283 CHECK_NULL_VOID(frameNode);
284 ImageModelNG::SetCopyOption(frameNode, DEFAULT_IMAGE_COPYOPTION);
285 }
286
SetAutoResize(ArkUINodeHandle node,ArkUI_Bool autoResize)287 void SetAutoResize(ArkUINodeHandle node, ArkUI_Bool autoResize)
288 {
289 auto* frameNode = reinterpret_cast<FrameNode*>(node);
290 CHECK_NULL_VOID(frameNode);
291 ImageModelNG::SetAutoResize(frameNode, autoResize);
292 }
293
GetAutoResize(ArkUINodeHandle node)294 int32_t GetAutoResize(ArkUINodeHandle node)
295 {
296 auto* frameNode = reinterpret_cast<FrameNode*>(node);
297 CHECK_NULL_RETURN(frameNode, true);
298 return ImageModelNG::GetAutoResize(frameNode);
299 }
300
ResetAutoResize(ArkUINodeHandle node)301 void ResetAutoResize(ArkUINodeHandle node)
302 {
303 auto* frameNode = reinterpret_cast<FrameNode*>(node);
304 CHECK_NULL_VOID(frameNode);
305 ImageModelNG::ResetAutoResize(frameNode);
306 }
307
SetObjectRepeat(ArkUINodeHandle node,ArkUI_Int32 imageRepeat)308 void SetObjectRepeat(ArkUINodeHandle node, ArkUI_Int32 imageRepeat)
309 {
310 auto* frameNode = reinterpret_cast<FrameNode*>(node);
311 CHECK_NULL_VOID(frameNode);
312 auto repeat = static_cast<ImageRepeat>(imageRepeat);
313 if (repeat < ImageRepeat::NO_REPEAT || repeat > ImageRepeat::REPEAT) {
314 repeat = ImageRepeat::NO_REPEAT;
315 }
316 ImageModelNG::SetImageRepeat(frameNode, repeat);
317 }
318
GetObjectRepeat(ArkUINodeHandle node)319 int32_t GetObjectRepeat(ArkUINodeHandle node)
320 {
321 int32_t defaultObjectRepeat = static_cast<int32_t>(ImageRepeat::NO_REPEAT);
322 auto* frameNode = reinterpret_cast<FrameNode*>(node);
323 CHECK_NULL_RETURN(frameNode, defaultObjectRepeat);
324 return static_cast<int32_t>(ImageModelNG::GetObjectRepeat(frameNode));
325 }
326
ResetObjectRepeat(ArkUINodeHandle node)327 void ResetObjectRepeat(ArkUINodeHandle node)
328 {
329 auto* frameNode = reinterpret_cast<FrameNode*>(node);
330 CHECK_NULL_VOID(frameNode);
331 ImageModelNG::SetImageRepeat(frameNode, ImageRepeat::NO_REPEAT);
332 }
333
SetRenderMode(ArkUINodeHandle node,ArkUI_Int32 imageRenderMode)334 void SetRenderMode(ArkUINodeHandle node, ArkUI_Int32 imageRenderMode)
335 {
336 auto* frameNode = reinterpret_cast<FrameNode*>(node);
337 CHECK_NULL_VOID(frameNode);
338 auto renderMode = static_cast<ImageRenderMode>(imageRenderMode);
339 if (renderMode < ImageRenderMode::ORIGINAL || renderMode > ImageRenderMode::TEMPLATE) {
340 renderMode = ImageRenderMode::ORIGINAL;
341 }
342 ImageModelNG::SetImageRenderMode(frameNode, renderMode);
343 }
344
ResetRenderMode(ArkUINodeHandle node)345 void ResetRenderMode(ArkUINodeHandle node)
346 {
347 auto* frameNode = reinterpret_cast<FrameNode*>(node);
348 CHECK_NULL_VOID(frameNode);
349 ImageModelNG::SetImageRenderMode(frameNode, ImageRenderMode::ORIGINAL);
350 }
351
GetRenderMode(ArkUINodeHandle node)352 int32_t GetRenderMode(ArkUINodeHandle node)
353 {
354 int32_t defaultRenderMode = static_cast<int32_t>(ImageRenderMode::ORIGINAL);
355 auto* frameNode = reinterpret_cast<FrameNode*>(node);
356 CHECK_NULL_RETURN(frameNode, defaultRenderMode);
357 return static_cast<int32_t>(ImageModelNG::GetImageRenderMode(frameNode));
358 }
359
SetSyncLoad(ArkUINodeHandle node,ArkUI_Bool syncLoadValue)360 void SetSyncLoad(ArkUINodeHandle node, ArkUI_Bool syncLoadValue)
361 {
362 auto* frameNode = reinterpret_cast<FrameNode*>(node);
363 CHECK_NULL_VOID(frameNode);
364 ImageModelNG::SetSyncMode(frameNode, syncLoadValue);
365 }
366
ResetSyncLoad(ArkUINodeHandle node)367 void ResetSyncLoad(ArkUINodeHandle node)
368 {
369 auto* frameNode = reinterpret_cast<FrameNode*>(node);
370 CHECK_NULL_VOID(frameNode);
371 ImageModelNG::SetSyncMode(frameNode, DEFAULT_SYNC_LOAD_VALUE);
372 }
373
GetSyncLoad(ArkUINodeHandle node)374 int32_t GetSyncLoad(ArkUINodeHandle node)
375 {
376 auto* frameNode = reinterpret_cast<FrameNode*>(node);
377 CHECK_NULL_RETURN(frameNode, true);
378 return ImageModelNG::GetSyncLoad(frameNode);
379 }
380
SetImageMatrix(ArkUINodeHandle node,const ArkUI_Float32 * matrix)381 void SetImageMatrix(ArkUINodeHandle node, const ArkUI_Float32* matrix)
382 {
383 auto* frameNode = reinterpret_cast<FrameNode*>(node);
384 CHECK_NULL_VOID(frameNode);
385 Matrix4 matrix4Value = Matrix4(
386 matrix[0], matrix[4], matrix[8], matrix[12],
387 matrix[1], matrix[5], matrix[9], matrix[13],
388 matrix[2], matrix[6], matrix[10], matrix[14],
389 matrix[3], matrix[7], matrix[11], matrix[15]);
390 ImageModelNG::SetImageMatrix(frameNode, matrix4Value);
391 }
392
GetImageMatrix(ArkUINodeHandle node,ArkUI_Float32 * arrayValue,ArkUI_Int32 size)393 void GetImageMatrix(ArkUINodeHandle node, ArkUI_Float32* arrayValue, ArkUI_Int32 size)
394 {
395 auto* frameNode = reinterpret_cast<FrameNode*>(node);
396 CHECK_NULL_VOID(frameNode);
397 auto resizable = ImageModelNG::GetImageMatrix(frameNode);
398 for (int32_t i = 0; i < size && i < resizable.Count(); ++i) {
399 arrayValue[i] = resizable[i];
400 }
401 }
402
ResetImageMatrix(ArkUINodeHandle node)403 void ResetImageMatrix(ArkUINodeHandle node)
404 {
405 auto* frameNode = reinterpret_cast<FrameNode*>(node);
406 CHECK_NULL_VOID(frameNode);
407 const auto matrix4Len = Matrix4::DIMENSION * Matrix4::DIMENSION;
408 std::vector<float> matrix(matrix4Len);
409 const int32_t initPosition = 5;
410 for (int32_t i = 0; i < matrix4Len; i = i + initPosition) {
411 matrix[i] = 1.0f;
412 }
413 Matrix4 defaultValue = Matrix4(
414 matrix[0], matrix[4], matrix[8], matrix[12],
415 matrix[1], matrix[5], matrix[9], matrix[13],
416 matrix[2], matrix[6], matrix[10], matrix[14],
417 matrix[3], matrix[7], matrix[11], matrix[15]);
418 ImageModelNG::SetImageMatrix(frameNode, defaultValue);
419 }
420
SetObjectFit(ArkUINodeHandle node,ArkUI_Int32 objectFitNumber)421 void SetObjectFit(ArkUINodeHandle node, ArkUI_Int32 objectFitNumber)
422 {
423 auto* frameNode = reinterpret_cast<FrameNode*>(node);
424 CHECK_NULL_VOID(frameNode);
425 ImageFit objectFitValue = static_cast<ImageFit>(objectFitNumber);
426 ImageModelNG::SetImageFit(frameNode, objectFitValue);
427 }
428
GetObjectFit(ArkUINodeHandle node)429 int32_t GetObjectFit(ArkUINodeHandle node)
430 {
431 int32_t defaultObjectFit = static_cast<int32_t>(ImageFit::COVER);
432 auto* frameNode = reinterpret_cast<FrameNode*>(node);
433 CHECK_NULL_RETURN(frameNode, defaultObjectFit);
434 return static_cast<int32_t>(ImageModelNG::GetObjectFit(frameNode));
435 }
436
ResetObjectFit(ArkUINodeHandle node)437 void ResetObjectFit(ArkUINodeHandle node)
438 {
439 auto* frameNode = reinterpret_cast<FrameNode*>(node);
440 CHECK_NULL_VOID(frameNode);
441 ImageModelNG::SetImageFit(frameNode, DEFAULT_OBJECT_FIT_VALUE);
442 }
443
SetFitOriginalSize(ArkUINodeHandle node,ArkUI_Bool fitOriginalSizeValue)444 void SetFitOriginalSize(ArkUINodeHandle node, ArkUI_Bool fitOriginalSizeValue)
445 {
446 auto* frameNode = reinterpret_cast<FrameNode*>(node);
447 CHECK_NULL_VOID(frameNode);
448 ImageModelNG::SetFitOriginSize(frameNode, fitOriginalSizeValue);
449 }
450
ResetFitOriginalSize(ArkUINodeHandle node)451 void ResetFitOriginalSize(ArkUINodeHandle node)
452 {
453 auto* frameNode = reinterpret_cast<FrameNode*>(node);
454 CHECK_NULL_VOID(frameNode);
455 ImageModelNG::SetFitOriginSize(frameNode, DEFAULT_FIT_ORIGINAL_SIZE);
456 }
457
SetSourceSize(ArkUINodeHandle node,ArkUI_Float32 width,ArkUI_Float32 height)458 void SetSourceSize(ArkUINodeHandle node, ArkUI_Float32 width, ArkUI_Float32 height)
459 {
460 auto* frameNode = reinterpret_cast<FrameNode*>(node);
461 CHECK_NULL_VOID(frameNode);
462 CalcDimension widthObj(width, DimensionUnit::VP);
463 CalcDimension heightObj(height, DimensionUnit::VP);
464 ImageModelNG::SetImageSourceSize(frameNode, std::pair<CalcDimension, CalcDimension>(widthObj, heightObj));
465 }
466
SetSourceSizeWithPX(ArkUINodeHandle node,ArkUI_Int32 width,ArkUI_Int32 height)467 void SetSourceSizeWithPX(ArkUINodeHandle node, ArkUI_Int32 width, ArkUI_Int32 height)
468 {
469 auto* frameNode = reinterpret_cast<FrameNode*>(node);
470 CHECK_NULL_VOID(frameNode);
471 CalcDimension widthObj(width, DimensionUnit::PX);
472 CalcDimension heightObj(height, DimensionUnit::PX);
473 ImageModelNG::SetImageSourceSize(frameNode, std::pair<CalcDimension, CalcDimension>(widthObj, heightObj));
474 }
475
ResetSourceSize(ArkUINodeHandle node)476 void ResetSourceSize(ArkUINodeHandle node)
477 {
478 auto* frameNode = reinterpret_cast<FrameNode*>(node);
479 CHECK_NULL_VOID(frameNode);
480 ImageModelNG::SetImageSourceSize(frameNode, std::pair<CalcDimension, CalcDimension>());
481 }
482
GetSourceSize(ArkUINodeHandle node,ArkUI_Int32 * arrayValue,ArkUI_Int32 size)483 void GetSourceSize(ArkUINodeHandle node, ArkUI_Int32* arrayValue, ArkUI_Int32 size)
484 {
485 CHECK_NULL_VOID(arrayValue);
486 if (size != IMAGE_SOURCE_SIZE) {
487 return;
488 }
489 auto* frameNode = reinterpret_cast<FrameNode*>(node);
490 CHECK_NULL_VOID(frameNode);
491 auto sourceSize = ImageModelNG::GetImageSourceSize(frameNode);
492 arrayValue[0] = static_cast<int32_t>(sourceSize.first.ConvertToPx());
493 arrayValue[1] = static_cast<int32_t>(sourceSize.second.ConvertToPx());
494 }
495
SetMatchTextDirection(ArkUINodeHandle node,ArkUI_Uint32 value)496 void SetMatchTextDirection(ArkUINodeHandle node, ArkUI_Uint32 value)
497 {
498 auto* frameNode = reinterpret_cast<FrameNode*>(node);
499 CHECK_NULL_VOID(frameNode);
500 ImageModelNG::SetMatchTextDirection(frameNode, static_cast<bool>(value));
501 }
502
GetMatchTextDirection(ArkUINodeHandle node)503 int32_t GetMatchTextDirection(ArkUINodeHandle node)
504 {
505 auto* frameNode = reinterpret_cast<FrameNode*>(node);
506 CHECK_NULL_RETURN(frameNode, false);
507 return ImageModelNG::GetMatchTextDirection(frameNode);
508 }
509
ResetMatchTextDirection(ArkUINodeHandle node)510 void ResetMatchTextDirection(ArkUINodeHandle node)
511 {
512 auto* frameNode = reinterpret_cast<FrameNode*>(node);
513 CHECK_NULL_VOID(frameNode);
514 ImageModelNG::SetMatchTextDirection(frameNode, false);
515 }
516
SetFillColor(ArkUINodeHandle node,ArkUI_Uint32 value)517 void SetFillColor(ArkUINodeHandle node, ArkUI_Uint32 value)
518 {
519 auto* frameNode = reinterpret_cast<FrameNode*>(node);
520 CHECK_NULL_VOID(frameNode);
521 ImageModelNG::SetImageFill(frameNode, Color(value));
522 }
523
SetFillColorWithColorSpace(ArkUINodeHandle node,ArkUI_Uint32 value,ArkUI_Uint32 colorSpace,void * colorRawPtr)524 void SetFillColorWithColorSpace(ArkUINodeHandle node, ArkUI_Uint32 value, ArkUI_Uint32 colorSpace, void* colorRawPtr)
525 {
526 auto* frameNode = reinterpret_cast<FrameNode*>(node);
527 CHECK_NULL_VOID(frameNode);
528 ImageModelNG::SetImageFill(frameNode, Color(value, static_cast<ColorSpace>(colorSpace)));
529 if (SystemProperties::ConfigChangePerform() && colorRawPtr) {
530 auto* color = reinterpret_cast<ResourceObject*>(colorRawPtr);
531 auto colorResObj = AceType::Claim(color);
532 ImageModelNG::CreateWithResourceObj(frameNode, ImageResourceType::FILL_COLOR, colorResObj);
533 }
534 }
535
ResetImageFill(ArkUINodeHandle node)536 void ResetImageFill(ArkUINodeHandle node)
537 {
538 auto* frameNode = reinterpret_cast<FrameNode*>(node);
539 CHECK_NULL_VOID(frameNode);
540 ImageModelNG::ResetImageFill(frameNode);
541 }
542
ResetFillColor(ArkUINodeHandle node)543 void ResetFillColor(ArkUINodeHandle node)
544 {
545 auto* frameNode = reinterpret_cast<FrameNode*>(node);
546 CHECK_NULL_VOID(frameNode);
547 auto pipelineContext = frameNode->GetContext();
548 CHECK_NULL_VOID(pipelineContext);
549 auto theme = pipelineContext->GetTheme<ImageTheme>();
550 CHECK_NULL_VOID(theme);
551 ImageModelNG::SetImageFill(frameNode, theme->GetFillColor());
552 }
553
SetAlt(ArkUINodeHandle node,const char * src,const char * bundleName,const char * moduleName)554 void SetAlt(ArkUINodeHandle node, const char* src, const char* bundleName, const char* moduleName)
555 {
556 if (ImageSourceInfo::ResolveURIType(src) == SrcType::NETWORK) {
557 return;
558 }
559
560 auto* frameNode = reinterpret_cast<FrameNode*>(node);
561 CHECK_NULL_VOID(frameNode);
562 ImageModelNG::SetAlt(frameNode, ImageSourceInfo { src, bundleName, moduleName });
563 }
564
SetAltRes(ArkUINodeHandle node,const char * src,const char * bundleName,const char * moduleName,void * srcRawPtr)565 void SetAltRes(ArkUINodeHandle node, const char* src, const char* bundleName, const char* moduleName, void* srcRawPtr)
566 {
567 if (ImageSourceInfo::ResolveURIType(src) == SrcType::NETWORK) {
568 return;
569 }
570
571 auto* frameNode = reinterpret_cast<FrameNode*>(node);
572 CHECK_NULL_VOID(frameNode);
573 ImageModelNG::SetAlt(frameNode, ImageSourceInfo { src, bundleName, moduleName });
574 if (SystemProperties::ConfigChangePerform() && srcRawPtr) {
575 auto* src = reinterpret_cast<ResourceObject*>(srcRawPtr);
576 auto srcResObj = AceType::Claim(src);
577 ImageModelNG::CreateWithResourceObj(frameNode, ImageResourceType::ALT, srcResObj);
578 }
579 }
580
GetAlt(ArkUINodeHandle node)581 const char* GetAlt(ArkUINodeHandle node)
582 {
583 auto* frameNode = reinterpret_cast<FrameNode*>(node);
584 CHECK_NULL_RETURN(frameNode, nullptr);
585 g_strValue = ImageModelNG::GetAlt(frameNode).GetSrc();
586 return g_strValue.c_str();
587 }
588
ResetAlt(ArkUINodeHandle node)589 void ResetAlt(ArkUINodeHandle node)
590 {
591 auto* frameNode = reinterpret_cast<FrameNode*>(node);
592 CHECK_NULL_VOID(frameNode);
593 ImageModelNG::ResetImageAlt(frameNode);
594 }
595
SetImageInterpolation(ArkUINodeHandle node,ArkUI_Int32 value)596 void SetImageInterpolation(ArkUINodeHandle node, ArkUI_Int32 value)
597 {
598 auto* frameNode = reinterpret_cast<FrameNode*>(node);
599 CHECK_NULL_VOID(frameNode);
600 auto interpolation = static_cast<Ace::ImageInterpolation>(value);
601 if (interpolation < Ace::ImageInterpolation::NONE || interpolation > Ace::ImageInterpolation::HIGH) {
602 interpolation = Ace::ImageInterpolation::NONE;
603 }
604 ImageModelNG::SetImageInterpolation(frameNode, interpolation);
605 }
606
GetImageInterpolation(ArkUINodeHandle node)607 int32_t GetImageInterpolation(ArkUINodeHandle node)
608 {
609 int32_t defaultInterpolation = static_cast<int32_t>(ImageInterpolation::NONE);
610 auto* frameNode = reinterpret_cast<FrameNode*>(node);
611 CHECK_NULL_RETURN(frameNode, defaultInterpolation);
612 return static_cast<int32_t>(ImageModelNG::GetInterpolation(frameNode));
613 }
614
ResetImageInterpolation(ArkUINodeHandle node)615 void ResetImageInterpolation(ArkUINodeHandle node)
616 {
617 auto* frameNode = reinterpret_cast<FrameNode*>(node);
618 CHECK_NULL_VOID(frameNode);
619 ImageModelNG::ResetImageInterpolation(frameNode);
620 }
621
SetColorFilter(ArkUINodeHandle node,const ArkUI_Float32 * array,int length)622 void SetColorFilter(ArkUINodeHandle node, const ArkUI_Float32* array, int length)
623 {
624 CHECK_NULL_VOID(array);
625 if (length != COLOR_FILTER_MATRIX_SIZE) {
626 return;
627 }
628 auto* frameNode = reinterpret_cast<FrameNode*>(node);
629 CHECK_NULL_VOID(frameNode);
630 ImageModelNG::SetColorFilterMatrix(frameNode, std::vector<float>(array, array + length));
631 }
632
GetColorFilter(ArkUINodeHandle node,ArkUIFilterColorType * colorFilter)633 void GetColorFilter(ArkUINodeHandle node, ArkUIFilterColorType* colorFilter)
634 {
635 CHECK_NULL_VOID(colorFilter);
636 auto* frameNode = reinterpret_cast<FrameNode*>(node);
637 CHECK_NULL_VOID(frameNode);
638 auto filterFloatArray = ImageModelNG::GetColorFilter(frameNode);
639 colorFilter->filterSize = filterFloatArray.size() < MAX_COLOR_FILTER_SIZE
640 ? static_cast<int32_t>(filterFloatArray.size())
641 : static_cast<int32_t>(MAX_COLOR_FILTER_SIZE);
642 for (size_t i = 0; i < static_cast<size_t>(colorFilter->filterSize) && i < MAX_COLOR_FILTER_SIZE; i++) {
643 *(colorFilter->filterArray+i) = filterFloatArray[i];
644 }
645 }
646
ResetColorFilter(ArkUINodeHandle node)647 void ResetColorFilter(ArkUINodeHandle node)
648 {
649 auto* frameNode = reinterpret_cast<FrameNode*>(node);
650 CHECK_NULL_VOID(frameNode);
651 ImageModelNG::SetColorFilterMatrix(frameNode, DEFAULT_COLOR_FILTER);
652 }
653
654 struct NativeHandle {
655 std::shared_ptr<OHOS::Rosen::Drawing::ColorFilter> value = nullptr;
656 };
657
658 // colorFilter must be OH_Drawing_ColorFilter NDK object
SetDrawingColorFilter(ArkUINodeHandle node,void * colorFilter)659 void SetDrawingColorFilter(ArkUINodeHandle node, void* colorFilter)
660 {
661 CHECK_NULL_VOID(colorFilter);
662 auto* frameNode = reinterpret_cast<FrameNode*>(node);
663 CHECK_NULL_VOID(frameNode);
664 auto handle = reinterpret_cast<NativeHandle*>(colorFilter);
665 auto filterPtr = handle->value;
666 CHECK_NULL_VOID(filterPtr);
667 auto drawingColorFilter = DrawingColorFilter::CreateDrawingColorFilterFromNative(static_cast<void*>(&filterPtr));
668 ImageModelNG::SetDrawingColorFilter(frameNode, drawingColorFilter);
669 }
670
671 // return must be OH_Drawing_ColorFilter NDK object
GetDrawingColorFilter(ArkUINodeHandle node)672 void* GetDrawingColorFilter(ArkUINodeHandle node)
673 {
674 auto* frameNode = reinterpret_cast<FrameNode*>(node);
675 CHECK_NULL_RETURN(frameNode, nullptr);
676 auto drawingColorFilter = ImageModelNG::GetDrawingColorFilter(frameNode);
677 CHECK_NULL_RETURN(drawingColorFilter, nullptr);
678 auto filterSptr = reinterpret_cast<std::shared_ptr<OHOS::Rosen::Drawing::ColorFilter>*>(
679 drawingColorFilter->GetDrawingColorFilterSptrAddr());
680 CHECK_NULL_RETURN(filterSptr, nullptr);
681 return reinterpret_cast<void*>(filterSptr);
682 }
683
SetImageSyncLoad(ArkUINodeHandle node,ArkUI_Bool syncLoadValue)684 void SetImageSyncLoad(ArkUINodeHandle node, ArkUI_Bool syncLoadValue)
685 {
686 auto* frameNode = reinterpret_cast<FrameNode*>(node);
687 CHECK_NULL_VOID(frameNode);
688 ImageModelNG::SetSyncMode(frameNode, syncLoadValue);
689 }
690
ResetImageSyncLoad(ArkUINodeHandle node)691 void ResetImageSyncLoad(ArkUINodeHandle node)
692 {
693 auto* frameNode = reinterpret_cast<FrameNode*>(node);
694 CHECK_NULL_VOID(frameNode);
695 ImageModelNG::SetSyncMode(frameNode, DEFAULT_SYNC_LOAD_VALUE);
696 }
697
SetImageObjectFit(ArkUINodeHandle node,ArkUI_Int32 objectFitNumber)698 void SetImageObjectFit(ArkUINodeHandle node, ArkUI_Int32 objectFitNumber)
699 {
700 auto* frameNode = reinterpret_cast<FrameNode*>(node);
701 CHECK_NULL_VOID(frameNode);
702 ImageFit objectFitValue = static_cast<ImageFit>(objectFitNumber);
703 ImageModelNG::SetImageFit(frameNode, objectFitValue);
704 }
705
ResetImageObjectFit(ArkUINodeHandle node)706 void ResetImageObjectFit(ArkUINodeHandle node)
707 {
708 auto* frameNode = reinterpret_cast<FrameNode*>(node);
709 CHECK_NULL_VOID(frameNode);
710 ImageModelNG::SetImageFit(frameNode, DEFAULT_OBJECT_FIT_VALUE);
711 }
712
SetImageFitOriginalSize(ArkUINodeHandle node,ArkUI_Bool fitOriginalSizeValue)713 void SetImageFitOriginalSize(ArkUINodeHandle node, ArkUI_Bool fitOriginalSizeValue)
714 {
715 auto* frameNode = reinterpret_cast<FrameNode*>(node);
716 CHECK_NULL_VOID(frameNode);
717 ImageModelNG::SetFitOriginSize(frameNode, fitOriginalSizeValue);
718 }
719
ResetImageFitOriginalSize(ArkUINodeHandle node)720 void ResetImageFitOriginalSize(ArkUINodeHandle node)
721 {
722 auto* frameNode = reinterpret_cast<FrameNode*>(node);
723 CHECK_NULL_VOID(frameNode);
724 ImageModelNG::SetFitOriginSize(frameNode, DEFAULT_FIT_ORIGINAL_SIZE);
725 }
726
SetImageDraggable(ArkUINodeHandle node,ArkUI_Bool value)727 void SetImageDraggable(ArkUINodeHandle node, ArkUI_Bool value)
728 {
729 auto* frameNode = reinterpret_cast<FrameNode*>(node);
730 CHECK_NULL_VOID(frameNode);
731 ImageModelNG::SetDraggable(frameNode, value);
732 }
733
ResetImageDraggable(ArkUINodeHandle node)734 void ResetImageDraggable(ArkUINodeHandle node)
735 {
736 auto* frameNode = reinterpret_cast<FrameNode*>(node);
737 CHECK_NULL_VOID(frameNode);
738 ImageModelNG::SetDraggable(frameNode, DEFAULT_DRAGGABLE);
739 }
740
GetImageDraggable(ArkUINodeHandle node)741 int32_t GetImageDraggable(ArkUINodeHandle node)
742 {
743 auto* frameNode = reinterpret_cast<FrameNode*>(node);
744 CHECK_NULL_RETURN(frameNode, DEFAULT_DRAGGABLE);
745 return ImageModelNG::GetDraggable(frameNode);
746 }
747
748 /**
749 * @param values radius values
750 * value[0] : radius value for TopLeft,value[1] : radius value for TopRight
751 * value[2] : radius value for BottomLeft,value[3] : radius value for BottomRight
752 * @param units radius units
753 * units[0]: radius unit for TopLeft ,units[1] : radius unit for TopRight
754 * units[2]: radius unit for BottomLeft, units[3] : radius unit for TopRight
755 */
SetImageBorderRadius(ArkUINodeHandle node,const ArkUI_Float32 * values,const int * units,ArkUI_Int32 length)756 void SetImageBorderRadius(ArkUINodeHandle node, const ArkUI_Float32* values, const int* units, ArkUI_Int32 length)
757 {
758 auto nodeModifiers = GetArkUINodeModifiers();
759 CHECK_NULL_VOID(nodeModifiers);
760 nodeModifiers->getCommonModifier()->setBorderRadius(node, values, units, length, nullptr);
761 auto* frameNode = reinterpret_cast<FrameNode*>(node);
762 CHECK_NULL_VOID(frameNode);
763 if (!Container::GreatOrEqualAPITargetVersion(PlatformVersion::VERSION_FOURTEEN)) {
764 ImageModelNG::SetBackBorder(frameNode);
765 return;
766 }
767 if (length != DEFAULT_LENGTH) {
768 return;
769 }
770 NG::BorderRadiusProperty borderRadius;
771 borderRadius.radiusTopLeft = Dimension(values[NUM_0], static_cast<OHOS::Ace::DimensionUnit>(units[NUM_0]));
772 borderRadius.radiusTopRight = Dimension(values[NUM_1], static_cast<OHOS::Ace::DimensionUnit>(units[NUM_1]));
773 borderRadius.radiusBottomLeft = Dimension(values[NUM_2], static_cast<OHOS::Ace::DimensionUnit>(units[NUM_2]));
774 borderRadius.radiusBottomRight = Dimension(values[NUM_3], static_cast<OHOS::Ace::DimensionUnit>(units[NUM_3]));
775 borderRadius.multiValued = true;
776 ImageModelNG::SetBorderRadius(frameNode, borderRadius);
777 }
778
779
ResetImageBorderRadius(ArkUINodeHandle node)780 void ResetImageBorderRadius(ArkUINodeHandle node)
781 {
782 auto nodeModifiers = GetArkUINodeModifiers();
783 CHECK_NULL_VOID(nodeModifiers);
784 nodeModifiers->getCommonModifier()->resetBorderRadius(node);
785 auto* frameNode = reinterpret_cast<FrameNode*>(node);
786 CHECK_NULL_VOID(frameNode);
787 if (!Container::GreatOrEqualAPITargetVersion(PlatformVersion::VERSION_FOURTEEN)) {
788 ImageModelNG::SetBackBorder(frameNode);
789 return;
790 }
791 OHOS::Ace::CalcDimension reset;
792 ImageModelNG::SetBorderRadius(frameNode, reset);
793 }
794
SetImageBorderWithValues(ArkUINodeHandle node,const ArkUI_Float32 * values,ArkUI_Int32 valuesSize)795 void SetImageBorderWithValues(ArkUINodeHandle node, const ArkUI_Float32* values, ArkUI_Int32 valuesSize)
796 {
797 auto* frameNode = reinterpret_cast<FrameNode*>(node);
798 CHECK_NULL_VOID(frameNode);
799 if ((values == nullptr) || (valuesSize != NUM_12)) {
800 return;
801 }
802
803 int32_t offset = NUM_0;
804 NG::BorderRadiusProperty borderRadius;
805 SetOptionalBorder(borderRadius.radiusTopLeft, values, valuesSize, offset);
806 SetOptionalBorder(borderRadius.radiusTopRight, values, valuesSize, offset);
807 SetOptionalBorder(borderRadius.radiusBottomLeft, values, valuesSize, offset);
808 SetOptionalBorder(borderRadius.radiusBottomRight, values, valuesSize, offset);
809
810 borderRadius.multiValued = true;
811 if (borderRadius.radiusTopLeft.has_value() || borderRadius.radiusTopRight.has_value() ||
812 borderRadius.radiusBottomLeft.has_value() || borderRadius.radiusBottomRight.has_value()) {
813 ImageModelNG::SetBorderRadius(frameNode, borderRadius);
814 }
815 }
816
SetImageBorder(ArkUINodeHandle node)817 void SetImageBorder(ArkUINodeHandle node)
818 {
819 auto* frameNode = reinterpret_cast<FrameNode*>(node);
820 CHECK_NULL_VOID(frameNode);
821 ImageModelNG::SetBackBorder(frameNode);
822 }
823
ResetImageBorder(ArkUINodeHandle node)824 void ResetImageBorder(ArkUINodeHandle node)
825 {
826 auto* frameNode = reinterpret_cast<FrameNode*>(node);
827 CHECK_NULL_VOID(frameNode);
828 if (!Container::GreatOrEqualAPITargetVersion(PlatformVersion::VERSION_FOURTEEN)) {
829 ImageModelNG::SetBackBorder(frameNode);
830 return;
831 }
832 auto nodeModifiers = GetArkUINodeModifiers();
833 CHECK_NULL_VOID(nodeModifiers);
834 nodeModifiers->getCommonModifier()->resetBorder(node);
835 CalcDimension borderRadius;
836 ImageModelNG::SetBorderRadius(frameNode, borderRadius);
837 }
838
SetImageOpacity(ArkUINodeHandle node,ArkUI_Float32 opacity)839 void SetImageOpacity(ArkUINodeHandle node, ArkUI_Float32 opacity)
840 {
841 auto* frameNode = reinterpret_cast<FrameNode*>(node);
842 CHECK_NULL_VOID(frameNode);
843 auto opacityValue = static_cast<float>(opacity);
844 if ((LessNotEqual(opacityValue, 0.0)) || GreatNotEqual(opacityValue, 1.0)) {
845 opacityValue = 1.0f;
846 }
847 ViewAbstract::SetOpacity(frameNode, opacityValue);
848 }
849
ResetImageOpacity(ArkUINodeHandle node)850 void ResetImageOpacity(ArkUINodeHandle node)
851 {
852 auto* frameNode = reinterpret_cast<FrameNode*>(node);
853 CHECK_NULL_VOID(frameNode);
854 ViewAbstract::SetOpacity(frameNode, 1.0f);
855 }
856
SetEdgeAntialiasing(ArkUINodeHandle node,ArkUI_Float32 edgeAntialiasing)857 void SetEdgeAntialiasing(ArkUINodeHandle node, ArkUI_Float32 edgeAntialiasing)
858 {
859 auto* frameNode = reinterpret_cast<FrameNode*>(node);
860 CHECK_NULL_VOID(frameNode);
861 ImageModelNG::SetSmoothEdge(frameNode, edgeAntialiasing);
862 }
863
ResetEdgeAntialiasing(ArkUINodeHandle node)864 void ResetEdgeAntialiasing(ArkUINodeHandle node)
865 {
866 auto* frameNode = reinterpret_cast<FrameNode*>(node);
867 CHECK_NULL_VOID(frameNode);
868 ImageModelNG::SetSmoothEdge(frameNode, DEFAULT_IMAGE_EDGE_ANTIALIASING);
869 }
870
SetResizablePtr(ArkUINodeHandle node,const ArkUIStringAndFloat * options,void * imageResizablePtr)871 void SetResizablePtr(ArkUINodeHandle node, const ArkUIStringAndFloat* options, void* imageResizablePtr)
872 {
873 auto* frameNode = reinterpret_cast<FrameNode*>(node);
874 CHECK_NULL_VOID(frameNode);
875 std::vector<RefPtr<ResourceObject>> imageResizableResArray;
876 if (imageResizablePtr != nullptr) {
877 imageResizableResArray = *(static_cast<std::vector<RefPtr<ResourceObject>>*>(imageResizablePtr));
878 }
879
880 ImageResizableSlice resizable;
881 SetResizableFromVec(resizable, options, imageResizableResArray);
882 ImageModelNG::SetResizableSlice(frameNode, resizable);
883 }
884
SetResizable(ArkUINodeHandle node,const ArkUIStringAndFloat * options)885 void SetResizable(ArkUINodeHandle node, const ArkUIStringAndFloat* options)
886 {
887 auto* frameNode = reinterpret_cast<FrameNode*>(node);
888 CHECK_NULL_VOID(frameNode);
889 SetResizablePtr(node, options, nullptr);
890 }
891
ResetResizable(ArkUINodeHandle node)892 void ResetResizable(ArkUINodeHandle node)
893 {
894 auto* frameNode = reinterpret_cast<FrameNode*>(node);
895 CHECK_NULL_VOID(frameNode);
896 ImageResizableSlice defaultImageSlice;
897 ImageModelNG::SetResizableSlice(frameNode, defaultImageSlice);
898 }
899
SetResizableLattice(ArkUINodeHandle node,void * lattice)900 void SetResizableLattice(ArkUINodeHandle node, void* lattice)
901 {
902 auto* frameNode = reinterpret_cast<FrameNode*>(node);
903 CHECK_NULL_VOID(frameNode);
904 auto drawingLattice = DrawingLattice::CreateDrawingLattice(lattice);
905 if (drawingLattice) {
906 ImageModelNG::SetResizableLattice(frameNode, drawingLattice);
907 } else {
908 ImageModelNG::ResetResizableLattice(frameNode);
909 }
910 }
911
ResetResizableLattice(ArkUINodeHandle node)912 void ResetResizableLattice(ArkUINodeHandle node)
913 {
914 auto* frameNode = reinterpret_cast<FrameNode*>(node);
915 CHECK_NULL_VOID(frameNode);
916 ImageModelNG::ResetResizableLattice(frameNode);
917 }
918
SetDynamicRangeMode(ArkUINodeHandle node,ArkUI_Int32 dynamicRangeMode)919 void SetDynamicRangeMode(ArkUINodeHandle node, ArkUI_Int32 dynamicRangeMode)
920 {
921 auto* frameNode = reinterpret_cast<FrameNode*>(node);
922 CHECK_NULL_VOID(frameNode);
923 DynamicRangeMode dynamicRangeModeValue = static_cast<DynamicRangeMode>(dynamicRangeMode);
924 if (dynamicRangeModeValue < DynamicRangeMode::HIGH || dynamicRangeModeValue > DynamicRangeMode::STANDARD) {
925 dynamicRangeModeValue = DynamicRangeMode::STANDARD;
926 }
927 ImageModelNG::SetDynamicRangeMode(frameNode, dynamicRangeModeValue);
928 }
929
GetDynamicRangeMode(ArkUINodeHandle node)930 int32_t GetDynamicRangeMode(ArkUINodeHandle node)
931 {
932 int32_t defaultDynamicRangeMode = static_cast<int32_t>(DynamicRangeMode::STANDARD);
933 auto* frameNode = reinterpret_cast<FrameNode*>(node);
934 CHECK_NULL_RETURN(frameNode, defaultDynamicRangeMode);
935 return static_cast<int32_t>(ImageModelNG::GetDynamicRangeMode(frameNode));
936 }
937
SetHdrBrightness(ArkUINodeHandle node,ArkUI_Float32 hdrBrightness)938 void SetHdrBrightness(ArkUINodeHandle node, ArkUI_Float32 hdrBrightness)
939 {
940 auto* frameNode = reinterpret_cast<FrameNode*>(node);
941 CHECK_NULL_VOID(frameNode);
942 if (LessNotEqual(hdrBrightness, HDR_BRIGHTNESS_MIN) || GreatNotEqual(hdrBrightness, HDR_BRIGHTNESS_MAX)) {
943 hdrBrightness = DEFAULT_HDR_BRIGHTNESS;
944 }
945 ImageModelNG::SetHdrBrightness(frameNode, hdrBrightness);
946 }
947
GetHdrBrightness(ArkUINodeHandle node)948 float GetHdrBrightness(ArkUINodeHandle node)
949 {
950 auto* frameNode = reinterpret_cast<FrameNode*>(node);
951 CHECK_NULL_RETURN(frameNode, DEFAULT_HDR_BRIGHTNESS);
952 return ImageModelNG::GetHdrBrightness(frameNode);
953 }
954
ResetHdrBrightness(ArkUINodeHandle node)955 void ResetHdrBrightness(ArkUINodeHandle node)
956 {
957 auto* frameNode = reinterpret_cast<FrameNode*>(node);
958 CHECK_NULL_VOID(frameNode);
959 ImageModelNG::SetHdrBrightness(frameNode, HDR_BRIGHTNESS_MAX);
960 }
961
GetFitOriginalSize(ArkUINodeHandle node)962 int32_t GetFitOriginalSize(ArkUINodeHandle node)
963 {
964 auto* frameNode = reinterpret_cast<FrameNode*>(node);
965 CHECK_NULL_RETURN(frameNode, DEFAULT_FALSE);
966 return ImageModelNG::GetFitOriginalSize(frameNode);
967 }
968
GetFillColor(ArkUINodeHandle node)969 uint32_t GetFillColor(ArkUINodeHandle node)
970 {
971 auto* frameNode = reinterpret_cast<FrameNode*>(node);
972 CHECK_NULL_RETURN(frameNode, ERROR_UINT_CODE);
973 return ImageModelNG::GetFillColor(frameNode);
974 }
975
SetPixelMap(ArkUINodeHandle node,void * drawableDescriptor)976 void SetPixelMap(ArkUINodeHandle node, void* drawableDescriptor)
977 {
978 auto* frameNode = reinterpret_cast<FrameNode*>(node);
979 CHECK_NULL_VOID(frameNode);
980 ImageModelNG::SetPixelMap(frameNode, drawableDescriptor);
981 }
982
SetPixelMapArray(ArkUINodeHandle node,void * animatedDrawableDescriptor)983 void SetPixelMapArray(ArkUINodeHandle node, void* animatedDrawableDescriptor)
984 {
985 auto* frameNode = reinterpret_cast<FrameNode*>(node);
986 CHECK_NULL_VOID(frameNode);
987 ImageModelNG::SetPixelMapArray(frameNode, animatedDrawableDescriptor);
988 }
989
SetResourceSrc(ArkUINodeHandle node,void * resource)990 void SetResourceSrc(ArkUINodeHandle node, void* resource)
991 {
992 auto* frameNode = reinterpret_cast<FrameNode*>(node);
993 CHECK_NULL_VOID(frameNode);
994 ImageModelNG::SetResource(frameNode, resource);
995 }
996
SetAltSourceInfo(ArkUINodeHandle node,const ArkUIImageSourceInfo * sourceInfo)997 void SetAltSourceInfo(ArkUINodeHandle node, const ArkUIImageSourceInfo* sourceInfo)
998 {
999 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1000 CHECK_NULL_VOID(frameNode);
1001 CHECK_NULL_VOID(sourceInfo);
1002 if (sourceInfo->url) {
1003 if (ImageSourceInfo::ResolveURIType(sourceInfo->url) == SrcType::NETWORK) {
1004 return;
1005 }
1006 ImageModelNG::SetAlt(frameNode, ImageSourceInfo { sourceInfo->url, "", "" });
1007 return;
1008 }
1009 if (sourceInfo->resource) {
1010 ImageModelNG::SetAltResource(frameNode, sourceInfo->resource);
1011 return;
1012 }
1013 if (sourceInfo->pixelMap) {
1014 ImageModelNG::SetAltPixelMap(frameNode, sourceInfo->pixelMap);
1015 return;
1016 }
1017 }
1018
ResetDynamicRangeMode(ArkUINodeHandle node)1019 void ResetDynamicRangeMode(ArkUINodeHandle node)
1020 {
1021 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1022 CHECK_NULL_VOID(frameNode);
1023 ImageModelNG::SetDynamicRangeMode(frameNode, DynamicRangeMode::STANDARD);
1024 }
1025
SetEnhancedImageQuality(ArkUINodeHandle node,ArkUI_Int32 imageQuality)1026 void SetEnhancedImageQuality(ArkUINodeHandle node, ArkUI_Int32 imageQuality)
1027 {
1028 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1029 CHECK_NULL_VOID(frameNode);
1030 AIImageQuality imageQualityValue = static_cast<AIImageQuality>(imageQuality);
1031 if (imageQualityValue < AIImageQuality::NONE || imageQualityValue > AIImageQuality::HIGH) {
1032 imageQualityValue = AIImageQuality::NONE;
1033 }
1034 ImageModelNG::SetEnhancedImageQuality(frameNode, imageQualityValue);
1035 }
1036
ResetEnhancedImageQuality(ArkUINodeHandle node)1037 void ResetEnhancedImageQuality(ArkUINodeHandle node)
1038 {
1039 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1040 CHECK_NULL_VOID(frameNode);
1041 ImageModelNG::SetEnhancedImageQuality(frameNode, AIImageQuality::NONE);
1042 }
1043
SetImageResizable(ArkUINodeHandle node,ArkUI_Float32 left,ArkUI_Float32 top,ArkUI_Float32 right,ArkUI_Float32 bottom)1044 void SetImageResizable(ArkUINodeHandle node, ArkUI_Float32 left, ArkUI_Float32 top,
1045 ArkUI_Float32 right, ArkUI_Float32 bottom)
1046 {
1047 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1048 CHECK_NULL_VOID(frameNode);
1049 ImageResizableSlice resizable;
1050 Dimension leftDimension(left, DimensionUnit::VP);
1051 resizable.SetEdgeSlice(ResizableOption::LEFT, leftDimension);
1052 Dimension topDimension(top, DimensionUnit::VP);
1053 resizable.SetEdgeSlice(ResizableOption::TOP, topDimension);
1054 Dimension rightDimension(right, DimensionUnit::VP);
1055 resizable.SetEdgeSlice(ResizableOption::RIGHT, rightDimension);
1056 Dimension bottomDimension(bottom, DimensionUnit::VP);
1057 resizable.SetEdgeSlice(ResizableOption::BOTTOM, bottomDimension);
1058 ImageModelNG::SetResizableSlice(frameNode, resizable);
1059 }
1060
GetImageResizable(ArkUINodeHandle node,ArkUI_Float32 * arrayValue,ArkUI_Int32 size)1061 void GetImageResizable(ArkUINodeHandle node, ArkUI_Float32* arrayValue, ArkUI_Int32 size)
1062 {
1063 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1064 CHECK_NULL_VOID(frameNode);
1065 auto resizable = ImageModelNG::GetResizableSlice(frameNode);
1066 if (0 < size) {
1067 arrayValue[0] = resizable.left.Value();
1068 }
1069 if (NUM_1 < size) {
1070 arrayValue[NUM_1] = resizable.top.Value();
1071 }
1072 if (NUM_2 < size) {
1073 arrayValue[NUM_2] = resizable.right.Value();
1074 }
1075 if (NUM_3 < size) {
1076 arrayValue[NUM_3] = resizable.bottom.Value();
1077 }
1078 }
1079
EnableAnalyzer(ArkUINodeHandle node,ArkUI_Bool enable)1080 void EnableAnalyzer(ArkUINodeHandle node, ArkUI_Bool enable)
1081 {
1082 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1083 CHECK_NULL_VOID(frameNode);
1084 ImageModelNG::EnableAnalyzer(frameNode, enable);
1085 }
1086
GetEnableAnalyzer(ArkUINodeHandle node)1087 int32_t GetEnableAnalyzer(ArkUINodeHandle node)
1088 {
1089 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1090 CHECK_NULL_RETURN(frameNode, false);
1091 return ImageModelNG::GetEnableAnalyzer(frameNode);
1092 }
1093
ResetEnableAnalyzer(ArkUINodeHandle node)1094 void ResetEnableAnalyzer(ArkUINodeHandle node)
1095 {
1096 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1097 CHECK_NULL_VOID(frameNode);
1098 ImageModelNG::EnableAnalyzer(frameNode, false);
1099 }
1100
SetImagePrivacySensitve(ArkUINodeHandle node,ArkUI_Int32 sensitive)1101 void SetImagePrivacySensitve(ArkUINodeHandle node, ArkUI_Int32 sensitive)
1102 {
1103 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1104 CHECK_NULL_VOID(frameNode);
1105 frameNode->SetPrivacySensitive(static_cast<bool>(sensitive));
1106 frameNode->MarkDirtyNode(PROPERTY_UPDATE_MEASURE);
1107 }
1108
ResetImagePrivacySensitve(ArkUINodeHandle node)1109 void ResetImagePrivacySensitve(ArkUINodeHandle node)
1110 {
1111 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1112 CHECK_NULL_VOID(frameNode);
1113 frameNode->SetPrivacySensitive(DEFAULT_IMAGE_SENSITIVE);
1114 frameNode->MarkDirtyNode(PROPERTY_UPDATE_MEASURE);
1115 }
1116
AnalyzerConfig(ArkUINodeHandle node,void * config)1117 void AnalyzerConfig(ArkUINodeHandle node, void* config)
1118 {
1119 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1120 CHECK_NULL_VOID(frameNode);
1121 ImageModelNG::SetImageAnalyzerConfig(frameNode, config);
1122 }
1123
ResetImageContent(ArkUINodeHandle node)1124 void ResetImageContent(ArkUINodeHandle node)
1125 {
1126 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1127 CHECK_NULL_VOID(frameNode);
1128 ImageModelNG::ResetImage(frameNode);
1129 }
1130
ResetImageSrc(ArkUINodeHandle node)1131 void ResetImageSrc(ArkUINodeHandle node)
1132 {
1133 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1134 CHECK_NULL_VOID(frameNode);
1135 ImageModelNG::ResetImageSrc(frameNode);
1136 }
1137
SetInitialPixelMap(ArkUINodeHandle node,ArkUI_Int64 pixelMap)1138 void SetInitialPixelMap(ArkUINodeHandle node, ArkUI_Int64 pixelMap)
1139 {
1140 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1141 CHECK_NULL_VOID(frameNode);
1142 void* rawPtr = reinterpret_cast<void*>(pixelMap);
1143 CHECK_NULL_VOID(rawPtr);
1144 RefPtr<PixelMap> pixelMapRef = PixelMap::CreatePixelMap(rawPtr);
1145 ImageModelNG::SetInitialPixelMap(frameNode, pixelMapRef);
1146 }
1147
SetOnComplete(ArkUINodeHandle node,void * callback)1148 void SetOnComplete(ArkUINodeHandle node, void* callback)
1149 {
1150 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1151 CHECK_NULL_VOID(frameNode);
1152 if (callback) {
1153 auto onComplete = reinterpret_cast<std::function<void(const LoadImageSuccessEvent&)>*>(callback);
1154 ImageModelNG::SetOnComplete(frameNode, std::move(*onComplete));
1155 } else {
1156 ImageModelNG::SetOnComplete(frameNode, nullptr);
1157 }
1158 }
1159
SetOnError(ArkUINodeHandle node,void * callback)1160 void SetOnError(ArkUINodeHandle node, void* callback)
1161 {
1162 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1163 CHECK_NULL_VOID(frameNode);
1164 if (callback) {
1165 auto onError = reinterpret_cast<std::function<void(const LoadImageFailEvent&)>*>(callback);
1166 ImageModelNG::SetOnError(frameNode, std::move(*onError));
1167 } else {
1168 ImageModelNG::SetOnError(frameNode, nullptr);
1169 }
1170 }
1171
ResetOnError(ArkUINodeHandle node)1172 void ResetOnError(ArkUINodeHandle node)
1173 {
1174 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1175 CHECK_NULL_VOID(frameNode);
1176 ImageModelNG::SetOnError(frameNode, nullptr);
1177 }
1178
SetImageOnFinish(ArkUINodeHandle node,void * callback)1179 void SetImageOnFinish(ArkUINodeHandle node, void* callback)
1180 {
1181 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1182 CHECK_NULL_VOID(frameNode);
1183 if (callback) {
1184 auto onFinish = reinterpret_cast<std::function<void()>*>(callback);
1185 ImageModelNG::SetOnSvgPlayFinish(frameNode, std::move(*onFinish));
1186 } else {
1187 ImageModelNG::SetOnSvgPlayFinish(frameNode, nullptr);
1188 }
1189 }
1190
ResetImageOnFinish(ArkUINodeHandle node)1191 void ResetImageOnFinish(ArkUINodeHandle node)
1192 {
1193 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1194 CHECK_NULL_VOID(frameNode);
1195 ImageModelNG::SetOnSvgPlayFinish(frameNode, nullptr);
1196 }
1197
SetImageRotateOrientation(ArkUINodeHandle node,ArkUI_Int32 orientation)1198 void SetImageRotateOrientation(ArkUINodeHandle node, ArkUI_Int32 orientation)
1199 {
1200 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1201 CHECK_NULL_VOID(frameNode);
1202 auto orientationValue = static_cast<ImageRotateOrientation>(orientation);
1203 if (orientationValue < ImageRotateOrientation::AUTO || orientationValue > ImageRotateOrientation::LEFT_MIRRORED) {
1204 orientationValue = ImageRotateOrientation::UP;
1205 }
1206 ImageModelNG::SetOrientation(frameNode, orientationValue);
1207 }
1208
GetImageRotateOrientation(ArkUINodeHandle node)1209 int32_t GetImageRotateOrientation(ArkUINodeHandle node)
1210 {
1211 int32_t defaultImageRotateOrientation = static_cast<int32_t>(ImageRotateOrientation::UP);
1212 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1213 CHECK_NULL_RETURN(frameNode, defaultImageRotateOrientation);
1214 return static_cast<int32_t>(ImageModelNG::GetOrientation(frameNode));
1215 }
1216
ResetImageRotateOrientation(ArkUINodeHandle node)1217 void ResetImageRotateOrientation(ArkUINodeHandle node)
1218 {
1219 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1220 CHECK_NULL_VOID(frameNode);
1221 ImageModelNG::SetOrientation(frameNode, ImageRotateOrientation::UP);
1222 }
1223 } // namespace
1224
1225 namespace NodeModifier {
GetImageModifier()1226 const ArkUIImageModifier* GetImageModifier()
1227 {
1228 CHECK_INITIALIZED_FIELDS_BEGIN(); // don't move this line
1229 static const ArkUIImageModifier modifier = {
1230 .setSrc = SetImageSrc,
1231 .setImageShowSrc = SetImageShowSrc,
1232 .setImageShowSrcRes = SetImageShowSrcRes,
1233 .setImageResource = SetImageResource,
1234 .setCopyOption = SetCopyOption,
1235 .resetCopyOption = ResetCopyOption,
1236 .setAutoResize = SetAutoResize,
1237 .resetAutoResize = ResetAutoResize,
1238 .setObjectRepeat = SetObjectRepeat,
1239 .resetObjectRepeat = ResetObjectRepeat,
1240 .setRenderMode = SetRenderMode,
1241 .resetRenderMode = ResetRenderMode,
1242 .setSyncLoad = SetSyncLoad,
1243 .resetSyncLoad = ResetSyncLoad,
1244 .setImageMatrix = SetImageMatrix,
1245 .resetImageMatrix = ResetImageMatrix,
1246 .setObjectFit = SetObjectFit,
1247 .resetObjectFit = ResetObjectFit,
1248 .setFitOriginalSize = SetFitOriginalSize,
1249 .resetFitOriginalSize = ResetFitOriginalSize,
1250 .setSourceSize = SetSourceSize,
1251 .setSourceSizeWithPX = SetSourceSizeWithPX,
1252 .resetSourceSize = ResetSourceSize,
1253 .setMatchTextDirection = SetMatchTextDirection,
1254 .resetMatchTextDirection = ResetMatchTextDirection,
1255 .setFillColor = SetFillColor,
1256 .setFillColorWithColorSpace = SetFillColorWithColorSpace,
1257 .resetImageFill = ResetImageFill,
1258 .resetFillColor = ResetFillColor,
1259 .setAlt = SetAlt,
1260 .setAltRes = SetAltRes,
1261 .resetAlt = ResetAlt,
1262 .setImageInterpolation = SetImageInterpolation,
1263 .resetImageInterpolation = ResetImageInterpolation,
1264 .setColorFilter = SetColorFilter,
1265 .resetColorFilter = ResetColorFilter,
1266 .setImageSyncLoad = SetImageSyncLoad,
1267 .resetImageSyncLoad = ResetImageSyncLoad,
1268 .setImageObjectFit = SetImageObjectFit,
1269 .resetImageObjectFit = ResetImageObjectFit,
1270 .setImageFitOriginalSize = SetImageFitOriginalSize,
1271 .resetImageFitOriginalSize = ResetImageFitOriginalSize,
1272 .setImageDraggable = SetImageDraggable,
1273 .resetImageDraggable = ResetImageDraggable,
1274 .setImageBorderRadius = SetImageBorderRadius,
1275 .resetImageBorderRadius = ResetImageBorderRadius,
1276 .setImageBorder = SetImageBorder,
1277 .setImageBorderWithValues = SetImageBorderWithValues,
1278 .resetImageBorder = ResetImageBorder,
1279 .setImageOpacity = SetImageOpacity,
1280 .resetImageOpacity = ResetImageOpacity,
1281 .setEdgeAntialiasing = SetEdgeAntialiasing,
1282 .resetEdgeAntialiasing = ResetEdgeAntialiasing,
1283 .setResizablePtr = SetResizablePtr,
1284 .setResizable = SetResizable,
1285 .resetResizable = ResetResizable,
1286 .setDynamicRangeMode = SetDynamicRangeMode,
1287 .resetDynamicRangeMode = ResetDynamicRangeMode,
1288 .setHdrBrightness = SetHdrBrightness,
1289 .resetHdrBrightness = ResetHdrBrightness,
1290 .setImageRotateOrientation = SetImageRotateOrientation,
1291 .resetImageRotateOrientation = ResetImageRotateOrientation,
1292 .setEnhancedImageQuality = SetEnhancedImageQuality,
1293 .resetEnhancedImageQuality = ResetEnhancedImageQuality,
1294 .getImageSrc = GetImageSrc,
1295 .getAutoResize = GetAutoResize,
1296 .getSyncLoad = GetSyncLoad,
1297 .getObjectRepeat = GetObjectRepeat,
1298 .getObjectFit = GetObjectFit,
1299 .getImageInterpolation = GetImageInterpolation,
1300 .getImageRotateOrientation = GetImageRotateOrientation,
1301 .getHdrBrightness = GetHdrBrightness,
1302 .getDynamicRangeMode = GetDynamicRangeMode,
1303 .getEnableAnalyzer = GetEnableAnalyzer,
1304 .getCopyOption = GetCopyOption,
1305 .getMatchTextDirection = GetMatchTextDirection,
1306 .getImageMatrix = GetImageMatrix,
1307 .getSourceSize = GetSourceSize,
1308 .getColorFilter = GetColorFilter,
1309 .getAlt = GetAlt,
1310 .getImageDraggable = GetImageDraggable,
1311 .getRenderMode = GetRenderMode,
1312 .setImageResizable = SetImageResizable,
1313 .getImageResizable = GetImageResizable,
1314 .getFitOriginalSize = GetFitOriginalSize,
1315 .getFillColor = GetFillColor,
1316 .setPixelMap = SetPixelMap,
1317 .setPixelMapArray = SetPixelMapArray,
1318 .setResourceSrc = SetResourceSrc,
1319 .enableAnalyzer = EnableAnalyzer,
1320 .resetEnableAnalyzer = ResetEnableAnalyzer,
1321 .setImagePrivacySensitive = SetImagePrivacySensitve,
1322 .resetImagePrivacySensitive = ResetImagePrivacySensitve,
1323 .analyzerConfig = AnalyzerConfig,
1324 .setDrawingColorFilter = SetDrawingColorFilter,
1325 .getDrawingColorFilter = GetDrawingColorFilter,
1326 .resetImageContent = ResetImageContent,
1327 .resetImageSrc = ResetImageSrc,
1328 .setInitialPixelMap = SetInitialPixelMap,
1329 .setAltSourceInfo = SetAltSourceInfo,
1330 .setOnComplete = SetOnComplete,
1331 .setOnError = SetOnError,
1332 .resetOnError = ResetOnError,
1333 .setImageOnFinish = SetImageOnFinish,
1334 .resetImageOnFinish = ResetImageOnFinish,
1335 .setResizableLattice = SetResizableLattice,
1336 .resetResizableLattice = ResetResizableLattice,
1337 };
1338 CHECK_INITIALIZED_FIELDS_END(modifier, 0, 0, 0); // don't move this line
1339 return &modifier;
1340 }
1341
GetCJUIImageModifier()1342 const CJUIImageModifier* GetCJUIImageModifier()
1343 {
1344 CHECK_INITIALIZED_FIELDS_BEGIN(); // don't move this line
1345 static const CJUIImageModifier modifier = {
1346 .setSrc = SetImageSrc,
1347 .setImageShowSrc = SetImageShowSrc,
1348 .setImageShowSrcRes = SetImageShowSrcRes,
1349 .setCopyOption = SetCopyOption,
1350 .resetCopyOption = ResetCopyOption,
1351 .setAutoResize = SetAutoResize,
1352 .resetAutoResize = ResetAutoResize,
1353 .setObjectRepeat = SetObjectRepeat,
1354 .resetObjectRepeat = ResetObjectRepeat,
1355 .setRenderMode = SetRenderMode,
1356 .resetRenderMode = ResetRenderMode,
1357 .setSyncLoad = SetSyncLoad,
1358 .resetSyncLoad = ResetSyncLoad,
1359 .setImageMatrix = SetImageMatrix,
1360 .resetImageMatrix = ResetImageMatrix,
1361 .setObjectFit = SetObjectFit,
1362 .resetObjectFit = ResetObjectFit,
1363 .setFitOriginalSize = SetFitOriginalSize,
1364 .resetFitOriginalSize = ResetFitOriginalSize,
1365 .setSourceSize = SetSourceSize,
1366 .setSourceSizeWithPX = SetSourceSizeWithPX,
1367 .resetSourceSize = ResetSourceSize,
1368 .setMatchTextDirection = SetMatchTextDirection,
1369 .resetMatchTextDirection = ResetMatchTextDirection,
1370 .setFillColor = SetFillColor,
1371 .setFillColorWithColorSpace = SetFillColorWithColorSpace,
1372 .resetFillColor = ResetFillColor,
1373 .setAlt = SetAlt,
1374 .setAltRes = SetAltRes,
1375 .resetAlt = ResetAlt,
1376 .setImageInterpolation = SetImageInterpolation,
1377 .resetImageInterpolation = ResetImageInterpolation,
1378 .setColorFilter = SetColorFilter,
1379 .resetColorFilter = ResetColorFilter,
1380 .setImageSyncLoad = SetImageSyncLoad,
1381 .resetImageSyncLoad = ResetImageSyncLoad,
1382 .setImageObjectFit = SetImageObjectFit,
1383 .resetImageObjectFit = ResetImageObjectFit,
1384 .setImageFitOriginalSize = SetImageFitOriginalSize,
1385 .resetImageFitOriginalSize = ResetImageFitOriginalSize,
1386 .setImageDraggable = SetImageDraggable,
1387 .resetImageDraggable = ResetImageDraggable,
1388 .setImageBorderRadius = SetImageBorderRadius,
1389 .resetImageBorderRadius = ResetImageBorderRadius,
1390 .setImageBorder = SetImageBorder,
1391 .resetImageBorder = ResetImageBorder,
1392 .setImageOpacity = SetImageOpacity,
1393 .resetImageOpacity = ResetImageOpacity,
1394 .setEdgeAntialiasing = SetEdgeAntialiasing,
1395 .resetEdgeAntialiasing = ResetEdgeAntialiasing,
1396 .setResizablePtr = SetResizablePtr,
1397 .setResizable = SetResizable,
1398 .resetResizable = ResetResizable,
1399 .setDynamicRangeMode = SetDynamicRangeMode,
1400 .resetDynamicRangeMode = ResetDynamicRangeMode,
1401 .setEnhancedImageQuality = SetEnhancedImageQuality,
1402 .resetEnhancedImageQuality = ResetEnhancedImageQuality,
1403 .getImageSrc = GetImageSrc,
1404 .getAutoResize = GetAutoResize,
1405 .getSyncLoad = GetSyncLoad,
1406 .getObjectRepeat = GetObjectRepeat,
1407 .getObjectFit = GetObjectFit,
1408 .getImageInterpolation = GetImageInterpolation,
1409 .getImageRotateOrientation = GetImageRotateOrientation,
1410 .getHdrBrightness = GetHdrBrightness,
1411 .getDynamicRangeMode = GetDynamicRangeMode,
1412 .getEnableAnalyzer = GetEnableAnalyzer,
1413 .getCopyOption = GetCopyOption,
1414 .getMatchTextDirection = GetMatchTextDirection,
1415 .getImageMatrix = GetImageMatrix,
1416 .getSourceSize = GetSourceSize,
1417 .getColorFilter = GetColorFilter,
1418 .getAlt = GetAlt,
1419 .getImageDraggable = GetImageDraggable,
1420 .getRenderMode = GetRenderMode,
1421 .setImageResizable = SetImageResizable,
1422 .getImageResizable = GetImageResizable,
1423 .getFitOriginalSize = GetFitOriginalSize,
1424 .getFillColor = GetFillColor,
1425 .setPixelMap = SetPixelMap,
1426 .setPixelMapArray = SetPixelMapArray,
1427 .setResourceSrc = SetResourceSrc,
1428 .enableAnalyzer = EnableAnalyzer,
1429 .resetEnableAnalyzer = ResetEnableAnalyzer,
1430 .setImagePrivacySensitive = SetImagePrivacySensitve,
1431 .resetImagePrivacySensitive = ResetImagePrivacySensitve,
1432 .analyzerConfig = AnalyzerConfig,
1433 .setDrawingColorFilter = SetDrawingColorFilter,
1434 .getDrawingColorFilter = GetDrawingColorFilter,
1435 .resetImageSrc = ResetImageSrc,
1436 .setInitialPixelMap = SetInitialPixelMap,
1437 .setOnComplete = SetOnComplete,
1438 .setOnError = SetOnError,
1439 .resetOnError = ResetOnError,
1440 .setImageOnFinish = SetImageOnFinish,
1441 .resetImageOnFinish = ResetImageOnFinish,
1442 };
1443 CHECK_INITIALIZED_FIELDS_END(modifier, 0, 0, 0); // don't move this line
1444 return &modifier;
1445 }
1446
SetImageOnComplete(ArkUINodeHandle node,void * extraParam)1447 void SetImageOnComplete(ArkUINodeHandle node, void* extraParam)
1448 {
1449 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1450 CHECK_NULL_VOID(frameNode);
1451 auto onEvent = [node, extraParam](const LoadImageSuccessEvent& info) {
1452 ArkUINodeEvent event;
1453 event.kind = COMPONENT_ASYNC_EVENT;
1454 event.extraParam = reinterpret_cast<intptr_t>(extraParam);
1455 event.componentAsyncEvent.subKind = ON_IMAGE_COMPLETE;
1456 event.componentAsyncEvent.data[IMAGE_LOAD_STATUS_INDEX].i32 = info.GetLoadingStatus();
1457 event.componentAsyncEvent.data[IMAGE_WIDTH_INDEX].f32 = info.GetWidth();
1458 event.componentAsyncEvent.data[IMAGE_HEIGHT_INDEX].f32 = info.GetHeight();
1459 event.componentAsyncEvent.data[IMAGE_COMPONENT_WIDTH_INDEX].f32 = info.GetComponentWidth();
1460 event.componentAsyncEvent.data[IMAGE_COMPONENT_HEIGHT_INDEX].f32 = info.GetComponentHeight();
1461 event.componentAsyncEvent.data[IMAGE_CONTENT_OFFSET_X_INDEX].f32 = info.GetContentOffsetX();
1462 event.componentAsyncEvent.data[IMAGE_CONTENT_OFFSET_Y_INDEX].f32 = info.GetContentOffsetY();
1463 event.componentAsyncEvent.data[IMAGE_CONTENT_WIDTH_INDEX].f32 = info.GetContentWidth();
1464 event.componentAsyncEvent.data[IMAGE_CONTENT_HEIGHT_INDEX].f32 = info.GetContentHeight();
1465 SendArkUISyncEvent(&event);
1466 };
1467 ImageModelNG::SetOnComplete(frameNode, std::move(onEvent));
1468 }
1469
SetImageOnError(ArkUINodeHandle node,void * extraParam)1470 void SetImageOnError(ArkUINodeHandle node, void* extraParam)
1471 {
1472 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1473 CHECK_NULL_VOID(frameNode);
1474 auto onEvent = [node, extraParam](const LoadImageFailEvent& info) {
1475 ArkUINodeEvent event;
1476 event.kind = COMPONENT_ASYNC_EVENT;
1477 event.extraParam = reinterpret_cast<intptr_t>(extraParam);
1478 event.componentAsyncEvent.subKind = ON_IMAGE_ERROR;
1479 event.componentAsyncEvent.data[0].i32 = LOAD_ERROR_CODE;
1480 SendArkUISyncEvent(&event);
1481 };
1482 ImageModelNG::SetOnError(frameNode, std::move(onEvent));
1483 }
1484
SetImageOnSvgPlayFinish(ArkUINodeHandle node,void * extraParam)1485 void SetImageOnSvgPlayFinish(ArkUINodeHandle node, void* extraParam)
1486 {
1487 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1488 CHECK_NULL_VOID(frameNode);
1489 auto onSvgPlayFinishEvent = [node, extraParam]() {
1490 ArkUINodeEvent event;
1491 event.kind = COMPONENT_ASYNC_EVENT;
1492 event.extraParam = reinterpret_cast<intptr_t>(extraParam);
1493 event.componentAsyncEvent.subKind = ON_IMAGE_SVG_PLAY_FINISH;
1494 SendArkUISyncEvent(&event);
1495 };
1496 ImageModelNG::SetOnSvgPlayFinish(frameNode, std::move(onSvgPlayFinishEvent));
1497 }
1498
SetImageOnDownloadProgress(ArkUINodeHandle node,void * extraParam)1499 void SetImageOnDownloadProgress(ArkUINodeHandle node, void* extraParam)
1500 {
1501 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1502 CHECK_NULL_VOID(frameNode);
1503 auto onDownloadProgress = [node, extraParam](const uint32_t& dlNow, const uint32_t& dlTotal) {
1504 ArkUINodeEvent event;
1505 event.kind = COMPONENT_ASYNC_EVENT;
1506 event.extraParam = reinterpret_cast<intptr_t>(extraParam);
1507 event.componentAsyncEvent.subKind = ON_IMAGE_DOWNLOAD_PROGRESS;
1508 event.componentAsyncEvent.data[0].u32 = dlNow;
1509 event.componentAsyncEvent.data[1].u32 = dlTotal;
1510 SendArkUISyncEvent(&event);
1511 };
1512 ImageModelNG::SetOnDownloadProgress(frameNode, std::move(onDownloadProgress));
1513 }
1514
ResetImageOnComplete(ArkUINodeHandle node)1515 void ResetImageOnComplete(ArkUINodeHandle node)
1516 {
1517 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1518 CHECK_NULL_VOID(frameNode);
1519 ImageModelNG::SetOnComplete(frameNode, nullptr);
1520 }
ResetImageOnError(ArkUINodeHandle node)1521 void ResetImageOnError(ArkUINodeHandle node)
1522 {
1523 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1524 CHECK_NULL_VOID(frameNode);
1525 ImageModelNG::SetOnError(frameNode, nullptr);
1526 }
ResetImageOnSvgPlayFinish(ArkUINodeHandle node)1527 void ResetImageOnSvgPlayFinish(ArkUINodeHandle node)
1528 {
1529 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1530 CHECK_NULL_VOID(frameNode);
1531 ImageModelNG::SetOnSvgPlayFinish(frameNode, nullptr);
1532 }
ResetImageOnDownloadProgress(ArkUINodeHandle node)1533 void ResetImageOnDownloadProgress(ArkUINodeHandle node)
1534 {
1535 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1536 CHECK_NULL_VOID(frameNode);
1537 ImageModelNG::SetOnDownloadProgress(frameNode, nullptr);
1538 }
1539 } // namespace NodeModifier
1540 } // namespace OHOS::Ace::NG
1541