1 /*
2 * Copyright (c) 2022-2023 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include "modifier/rs_modifier_extractor.h"
17
18 #include <securec.h>
19
20 #include "modifier/rs_property_modifier.h"
21 #include "modifier/rs_modifier_type.h"
22 #include "pipeline/rs_node_map.h"
23 #include "property/rs_properties_def.h"
24 #include "ui/rs_node.h"
25 #include "platform/common/rs_log.h"
26
27 namespace OHOS {
28 namespace Rosen {
RSModifierExtractor(NodeId id)29 RSModifierExtractor::RSModifierExtractor(NodeId id) : id_(id) {}
30 constexpr uint32_t DEBUG_MODIFIER_SIZE = 20;
31 #define GET_PROPERTY_FROM_MODIFIERS(T, propertyType, defaultValue, operator) \
32 do { \
33 auto node = RSNodeMap::Instance().GetNode<RSNode>(id_); \
34 if (!node) { \
35 return defaultValue; \
36 } \
37 std::unique_lock<std::recursive_mutex> lock(node->GetPropertyMutex()); \
38 T value = defaultValue; \
39 if (node->modifiers_.size() > DEBUG_MODIFIER_SIZE) { \
40 ROSEN_LOGD("RSModifierExtractor modifier size is %{public}zu", node->modifiers_.size()); \
41 } \
42 for (auto& [_, modifier] : node->modifiers_) { \
43 if (modifier->GetModifierType() == RSModifierType::propertyType) { \
44 value operator std::static_pointer_cast<RSProperty<T>>(modifier->GetProperty())->Get(); \
45 } \
46 } \
47 return value; \
48 } while (0)
49
50 #define GET_PROPERTY_FROM_MODIFIERS_EQRETURN(T, propertyType, defaultValue, operator) \
51 do { \
52 auto node = RSNodeMap::Instance().GetNode<RSNode>(id_); \
53 if (!node) { \
54 return defaultValue; \
55 } \
56 std::unique_lock<std::recursive_mutex> lock(node->GetPropertyMutex()); \
57 auto typeIter = node->modifiersTypeMap_.find((int16_t)RSModifierType::propertyType); \
58 if (typeIter != node->modifiersTypeMap_.end()) { \
59 auto modifier = typeIter->second; \
60 return std::static_pointer_cast<RSProperty<T>>(modifier->GetProperty())->Get(); \
61 } else { \
62 return defaultValue; \
63 } \
64 } while (0) \
65
GetBounds() const66 Vector4f RSModifierExtractor::GetBounds() const
67 {
68 GET_PROPERTY_FROM_MODIFIERS_EQRETURN(Vector4f, BOUNDS, Vector4f(), =);
69 }
70
GetFrame() const71 Vector4f RSModifierExtractor::GetFrame() const
72 {
73 GET_PROPERTY_FROM_MODIFIERS_EQRETURN(Vector4f, FRAME, Vector4f(), =);
74 }
75
GetPositionZ() const76 float RSModifierExtractor::GetPositionZ() const
77 {
78 GET_PROPERTY_FROM_MODIFIERS(float, POSITION_Z, 0.f, +=);
79 }
80
GetPivot() const81 Vector2f RSModifierExtractor::GetPivot() const
82 {
83 GET_PROPERTY_FROM_MODIFIERS_EQRETURN(Vector2f, PIVOT, Vector2f(0.5f, 0.5f), =);
84 }
85
GetPivotZ() const86 float RSModifierExtractor::GetPivotZ() const
87 {
88 GET_PROPERTY_FROM_MODIFIERS_EQRETURN(float, PIVOT_Z, 0.f, =);
89 }
90
GetQuaternion() const91 Quaternion RSModifierExtractor::GetQuaternion() const
92 {
93 GET_PROPERTY_FROM_MODIFIERS_EQRETURN(Quaternion, QUATERNION, Quaternion(), =);
94 }
95
GetRotation() const96 float RSModifierExtractor::GetRotation() const
97 {
98 GET_PROPERTY_FROM_MODIFIERS(float, ROTATION, 0.f, +=);
99 }
100
GetRotationX() const101 float RSModifierExtractor::GetRotationX() const
102 {
103 GET_PROPERTY_FROM_MODIFIERS(float, ROTATION_X, 0.f, +=);
104 }
105
GetRotationY() const106 float RSModifierExtractor::GetRotationY() const
107 {
108 GET_PROPERTY_FROM_MODIFIERS(float, ROTATION_Y, 0.f, +=);
109 }
110
GetCameraDistance() const111 float RSModifierExtractor::GetCameraDistance() const
112 {
113 GET_PROPERTY_FROM_MODIFIERS_EQRETURN(float, CAMERA_DISTANCE, 0.f, =);
114 }
115
GetTranslate() const116 Vector2f RSModifierExtractor::GetTranslate() const
117 {
118 GET_PROPERTY_FROM_MODIFIERS(Vector2f, TRANSLATE, Vector2f(0.f, 0.f), +=);
119 }
120
GetTranslateZ() const121 float RSModifierExtractor::GetTranslateZ() const
122 {
123 GET_PROPERTY_FROM_MODIFIERS(float, TRANSLATE_Z, 0.f, +=);
124 }
125
GetScale() const126 Vector2f RSModifierExtractor::GetScale() const
127 {
128 GET_PROPERTY_FROM_MODIFIERS(Vector2f, SCALE, Vector2f(1.f, 1.f), *=);
129 }
130
GetSkew() const131 Vector2f RSModifierExtractor::GetSkew() const
132 {
133 GET_PROPERTY_FROM_MODIFIERS(Vector2f, SKEW, Vector2f(0.f, 0.f), +=);
134 }
135
GetPersp() const136 Vector2f RSModifierExtractor::GetPersp() const
137 {
138 GET_PROPERTY_FROM_MODIFIERS(Vector2f, PERSP, Vector2f(0.f, 0.f), +=);
139 }
140
GetAlpha() const141 float RSModifierExtractor::GetAlpha() const
142 {
143 GET_PROPERTY_FROM_MODIFIERS(float, ALPHA, 1.f, *=);
144 }
145
GetAlphaOffscreen() const146 bool RSModifierExtractor::GetAlphaOffscreen() const
147 {
148 GET_PROPERTY_FROM_MODIFIERS_EQRETURN(bool, ALPHA_OFFSCREEN, true, =);
149 }
150
GetCornerRadius() const151 Vector4f RSModifierExtractor::GetCornerRadius() const
152 {
153 GET_PROPERTY_FROM_MODIFIERS_EQRETURN(Vector4f, CORNER_RADIUS, Vector4f(), =);
154 }
155
GetForegroundColor() const156 Color RSModifierExtractor::GetForegroundColor() const
157 {
158 GET_PROPERTY_FROM_MODIFIERS_EQRETURN(Color, FOREGROUND_COLOR, RgbPalette::Transparent(), =);
159 }
160
GetBackgroundColor() const161 Color RSModifierExtractor::GetBackgroundColor() const
162 {
163 GET_PROPERTY_FROM_MODIFIERS_EQRETURN(Color, BACKGROUND_COLOR, RgbPalette::Transparent(), =);
164 }
165
GetSurfaceBgColor() const166 Color RSModifierExtractor::GetSurfaceBgColor() const
167 {
168 GET_PROPERTY_FROM_MODIFIERS_EQRETURN(Color, SURFACE_BG_COLOR, RgbPalette::Transparent(), =);
169 }
170
GetBackgroundShader() const171 std::shared_ptr<RSShader> RSModifierExtractor::GetBackgroundShader() const
172 {
173 GET_PROPERTY_FROM_MODIFIERS_EQRETURN(std::shared_ptr<RSShader>, BACKGROUND_SHADER, nullptr, =);
174 }
175
GetBgImage() const176 std::shared_ptr<RSImage> RSModifierExtractor::GetBgImage() const
177 {
178 GET_PROPERTY_FROM_MODIFIERS_EQRETURN(std::shared_ptr<RSImage>, BG_IMAGE, nullptr, =);
179 }
180
GetBgImageWidth() const181 float RSModifierExtractor::GetBgImageWidth() const
182 {
183 GET_PROPERTY_FROM_MODIFIERS_EQRETURN(float, BG_IMAGE_WIDTH, 0.f, =);
184 }
185
GetBgImageHeight() const186 float RSModifierExtractor::GetBgImageHeight() const
187 {
188 GET_PROPERTY_FROM_MODIFIERS_EQRETURN(float, BG_IMAGE_HEIGHT, 0.f, =);
189 }
190
GetBgImagePositionX() const191 float RSModifierExtractor::GetBgImagePositionX() const
192 {
193 GET_PROPERTY_FROM_MODIFIERS_EQRETURN(float, BG_IMAGE_POSITION_X, 0.f, =);
194 }
195
GetBgImagePositionY() const196 float RSModifierExtractor::GetBgImagePositionY() const
197 {
198 GET_PROPERTY_FROM_MODIFIERS_EQRETURN(float, BG_IMAGE_POSITION_Y, 0.f, =);
199 }
200
GetBorderColor() const201 Vector4<Color> RSModifierExtractor::GetBorderColor() const
202 {
203 GET_PROPERTY_FROM_MODIFIERS_EQRETURN(Vector4<Color>, BORDER_COLOR, Vector4<Color>(RgbPalette::Transparent()), =);
204 }
205
GetBorderWidth() const206 Vector4f RSModifierExtractor::GetBorderWidth() const
207 {
208 GET_PROPERTY_FROM_MODIFIERS_EQRETURN(Vector4f, BORDER_WIDTH, Vector4f(0.f), =);
209 }
210
GetBorderStyle() const211 Vector4<uint32_t> RSModifierExtractor::GetBorderStyle() const
212 {
213 GET_PROPERTY_FROM_MODIFIERS_EQRETURN(
214 Vector4<uint32_t>, BORDER_STYLE, Vector4<uint32_t>(static_cast<uint32_t>(BorderStyle::NONE)), =);
215 }
216
GetBorderDashWidth() const217 Vector4f RSModifierExtractor::GetBorderDashWidth() const
218 {
219 GET_PROPERTY_FROM_MODIFIERS_EQRETURN(Vector4f, BORDER_DASH_WIDTH, Vector4f(0.f), =);
220 }
221
GetBorderDashGap() const222 Vector4f RSModifierExtractor::GetBorderDashGap() const
223 {
224 GET_PROPERTY_FROM_MODIFIERS_EQRETURN(Vector4f, BORDER_DASH_GAP, Vector4f(0.f), =);
225 }
226
GetOutlineColor() const227 Vector4<Color> RSModifierExtractor::GetOutlineColor() const
228 {
229 GET_PROPERTY_FROM_MODIFIERS_EQRETURN(Vector4<Color>, OUTLINE_COLOR, Vector4<Color>(RgbPalette::Transparent()), =);
230 }
231
GetOutlineWidth() const232 Vector4f RSModifierExtractor::GetOutlineWidth() const
233 {
234 GET_PROPERTY_FROM_MODIFIERS_EQRETURN(Vector4f, OUTLINE_WIDTH, Vector4f(0.f), =);
235 }
236
GetOutlineStyle() const237 Vector4<uint32_t> RSModifierExtractor::GetOutlineStyle() const
238 {
239 GET_PROPERTY_FROM_MODIFIERS_EQRETURN(
240 Vector4<uint32_t>, OUTLINE_STYLE, Vector4<uint32_t>(static_cast<uint32_t>(BorderStyle::NONE)), =);
241 }
242
GetOutlineDashWidth() const243 Vector4f RSModifierExtractor::GetOutlineDashWidth() const
244 {
245 GET_PROPERTY_FROM_MODIFIERS_EQRETURN(Vector4f, OUTLINE_DASH_WIDTH, Vector4f(0.f), =);
246 }
247
GetOutlineDashGap() const248 Vector4f RSModifierExtractor::GetOutlineDashGap() const
249 {
250 GET_PROPERTY_FROM_MODIFIERS_EQRETURN(Vector4f, OUTLINE_DASH_GAP, Vector4f(0.f), =);
251 }
252
GetOutlineRadius() const253 Vector4f RSModifierExtractor::GetOutlineRadius() const
254 {
255 GET_PROPERTY_FROM_MODIFIERS_EQRETURN(Vector4f, OUTLINE_RADIUS, Vector4f(0.f), =);
256 }
257
GetForegroundEffectRadius() const258 float RSModifierExtractor::GetForegroundEffectRadius() const
259 {
260 GET_PROPERTY_FROM_MODIFIERS(float, FOREGROUND_EFFECT_RADIUS, 0.f, =);
261 }
262
GetBackgroundFilter() const263 std::shared_ptr<RSFilter> RSModifierExtractor::GetBackgroundFilter() const
264 {
265 GET_PROPERTY_FROM_MODIFIERS_EQRETURN(std::shared_ptr<RSFilter>, BACKGROUND_FILTER, nullptr, =);
266 }
267
GetFilter() const268 std::shared_ptr<RSFilter> RSModifierExtractor::GetFilter() const
269 {
270 GET_PROPERTY_FROM_MODIFIERS_EQRETURN(std::shared_ptr<RSFilter>, FILTER, nullptr, =);
271 }
272
GetShadowColor() const273 Color RSModifierExtractor::GetShadowColor() const
274 {
275 GET_PROPERTY_FROM_MODIFIERS_EQRETURN(Color, SHADOW_COLOR, Color::FromArgbInt(DEFAULT_SPOT_COLOR), =);
276 }
277
GetShadowOffsetX() const278 float RSModifierExtractor::GetShadowOffsetX() const
279 {
280 GET_PROPERTY_FROM_MODIFIERS_EQRETURN(float, SHADOW_OFFSET_X, DEFAULT_SHADOW_OFFSET_X, =);
281 }
282
GetShadowOffsetY() const283 float RSModifierExtractor::GetShadowOffsetY() const
284 {
285 GET_PROPERTY_FROM_MODIFIERS_EQRETURN(float, SHADOW_OFFSET_Y, DEFAULT_SHADOW_OFFSET_Y, =);
286 }
287
GetShadowAlpha() const288 float RSModifierExtractor::GetShadowAlpha() const
289 {
290 GET_PROPERTY_FROM_MODIFIERS_EQRETURN(float, SHADOW_ALPHA, 0.f, =);
291 }
292
GetShadowElevation() const293 float RSModifierExtractor::GetShadowElevation() const
294 {
295 GET_PROPERTY_FROM_MODIFIERS_EQRETURN(float, SHADOW_ELEVATION, 0.f, =);
296 }
297
GetShadowRadius() const298 float RSModifierExtractor::GetShadowRadius() const
299 {
300 GET_PROPERTY_FROM_MODIFIERS_EQRETURN(float, SHADOW_RADIUS, DEFAULT_SHADOW_RADIUS, =);
301 }
302
GetShadowPath() const303 std::shared_ptr<RSPath> RSModifierExtractor::GetShadowPath() const
304 {
305 GET_PROPERTY_FROM_MODIFIERS_EQRETURN(std::shared_ptr<RSPath>, SHADOW_PATH, nullptr, =);
306 }
307
GetShadowMask() const308 bool RSModifierExtractor::GetShadowMask() const
309 {
310 GET_PROPERTY_FROM_MODIFIERS_EQRETURN(bool, SHADOW_MASK, false, =);
311 }
312
GetShadowIsFilled() const313 bool RSModifierExtractor::GetShadowIsFilled() const
314 {
315 GET_PROPERTY_FROM_MODIFIERS_EQRETURN(bool, SHADOW_IS_FILLED, false, =);
316 }
317
GetShadowColorStrategy() const318 int RSModifierExtractor::GetShadowColorStrategy() const
319 {
320 GET_PROPERTY_FROM_MODIFIERS_EQRETURN(int, SHADOW_COLOR_STRATEGY, SHADOW_COLOR_STRATEGY::COLOR_STRATEGY_NONE, =);
321 }
322
GetFrameGravity() const323 Gravity RSModifierExtractor::GetFrameGravity() const
324 {
325 GET_PROPERTY_FROM_MODIFIERS_EQRETURN(Gravity, FRAME_GRAVITY, Gravity::DEFAULT, =);
326 }
327
GetClipBounds() const328 std::shared_ptr<RSPath> RSModifierExtractor::GetClipBounds() const
329 {
330 GET_PROPERTY_FROM_MODIFIERS_EQRETURN(std::shared_ptr<RSPath>, CLIP_BOUNDS, nullptr, =);
331 }
332
GetClipToBounds() const333 bool RSModifierExtractor::GetClipToBounds() const
334 {
335 GET_PROPERTY_FROM_MODIFIERS_EQRETURN(bool, CLIP_TO_BOUNDS, false, =);
336 }
337
GetClipToFrame() const338 bool RSModifierExtractor::GetClipToFrame() const
339 {
340 GET_PROPERTY_FROM_MODIFIERS_EQRETURN(bool, CLIP_TO_FRAME, false, =);
341 }
342
GetVisible() const343 bool RSModifierExtractor::GetVisible() const
344 {
345 GET_PROPERTY_FROM_MODIFIERS_EQRETURN(bool, VISIBLE, true, =);
346 }
347
GetMask() const348 std::shared_ptr<RSMask> RSModifierExtractor::GetMask() const
349 {
350 GET_PROPERTY_FROM_MODIFIERS_EQRETURN(std::shared_ptr<RSMask>, MASK, nullptr, =);
351 }
352
GetSpherizeDegree() const353 float RSModifierExtractor::GetSpherizeDegree() const
354 {
355 GET_PROPERTY_FROM_MODIFIERS_EQRETURN(float, SPHERIZE, 0.f, =);
356 }
357
GetAttractionFractionValue() const358 float RSModifierExtractor::GetAttractionFractionValue() const
359 {
360 GET_PROPERTY_FROM_MODIFIERS(float, ATTRACTION_FRACTION, 0.f, =);
361 }
362
GetAttractionDstPointValue() const363 Vector2f RSModifierExtractor::GetAttractionDstPointValue() const
364 {
365 GET_PROPERTY_FROM_MODIFIERS(Vector2f, ATTRACTION_DSTPOINT, Vector2f(0.f, 0.f), =);
366 }
367
GetLightUpEffectDegree() const368 float RSModifierExtractor::GetLightUpEffectDegree() const
369 {
370 GET_PROPERTY_FROM_MODIFIERS_EQRETURN(float, LIGHT_UP_EFFECT, 0.f, =);
371 }
372
GetDynamicDimDegree() const373 float RSModifierExtractor::GetDynamicDimDegree() const
374 {
375 GET_PROPERTY_FROM_MODIFIERS(float, DYNAMIC_DIM_DEGREE, 0.f, =);
376 }
377
GetBackgroundBlurRadius() const378 float RSModifierExtractor::GetBackgroundBlurRadius() const
379 {
380 GET_PROPERTY_FROM_MODIFIERS(float, BACKGROUND_BLUR_RADIUS, 0.f, =);
381 }
382
GetBackgroundBlurSaturation() const383 float RSModifierExtractor::GetBackgroundBlurSaturation() const
384 {
385 GET_PROPERTY_FROM_MODIFIERS(float, BACKGROUND_BLUR_SATURATION, 0.f, =);
386 }
387
GetBackgroundBlurBrightness() const388 float RSModifierExtractor::GetBackgroundBlurBrightness() const
389 {
390 GET_PROPERTY_FROM_MODIFIERS(float, BACKGROUND_BLUR_BRIGHTNESS, 0.f, =);
391 }
392
GetBackgroundBlurMaskColor() const393 Color RSModifierExtractor::GetBackgroundBlurMaskColor() const
394 {
395 GET_PROPERTY_FROM_MODIFIERS(Color, BACKGROUND_BLUR_MASK_COLOR, RSColor(), =);
396 }
397
GetBackgroundBlurColorMode() const398 int RSModifierExtractor::GetBackgroundBlurColorMode() const
399 {
400 GET_PROPERTY_FROM_MODIFIERS(int, BACKGROUND_BLUR_COLOR_MODE, BLUR_COLOR_MODE::DEFAULT, =);
401 }
402
GetBackgroundBlurRadiusX() const403 float RSModifierExtractor::GetBackgroundBlurRadiusX() const
404 {
405 GET_PROPERTY_FROM_MODIFIERS(float, BACKGROUND_BLUR_RADIUS_X, 0.f, =);
406 }
407
GetBackgroundBlurRadiusY() const408 float RSModifierExtractor::GetBackgroundBlurRadiusY() const
409 {
410 GET_PROPERTY_FROM_MODIFIERS(float, BACKGROUND_BLUR_RADIUS_Y, 0.f, =);
411 }
412
GetForegroundBlurRadius() const413 float RSModifierExtractor::GetForegroundBlurRadius() const
414 {
415 GET_PROPERTY_FROM_MODIFIERS(float, FOREGROUND_BLUR_RADIUS, 0.f, =);
416 }
417
GetForegroundBlurSaturation() const418 float RSModifierExtractor::GetForegroundBlurSaturation() const
419 {
420 GET_PROPERTY_FROM_MODIFIERS(float, FOREGROUND_BLUR_SATURATION, 0.f, =);
421 }
422
GetForegroundBlurBrightness() const423 float RSModifierExtractor::GetForegroundBlurBrightness() const
424 {
425 GET_PROPERTY_FROM_MODIFIERS(float, FOREGROUND_BLUR_BRIGHTNESS, 0.f, =);
426 }
427
GetForegroundBlurMaskColor() const428 Color RSModifierExtractor::GetForegroundBlurMaskColor() const
429 {
430 GET_PROPERTY_FROM_MODIFIERS(Color, FOREGROUND_BLUR_MASK_COLOR, RSColor(), =);
431 }
432
GetForegroundBlurColorMode() const433 int RSModifierExtractor::GetForegroundBlurColorMode() const
434 {
435 GET_PROPERTY_FROM_MODIFIERS(int, FOREGROUND_BLUR_COLOR_MODE, BLUR_COLOR_MODE::DEFAULT, =);
436 }
437
GetForegroundBlurRadiusX() const438 float RSModifierExtractor::GetForegroundBlurRadiusX() const
439 {
440 GET_PROPERTY_FROM_MODIFIERS(float, FOREGROUND_BLUR_RADIUS_X, 0.f, =);
441 }
442
GetForegroundBlurRadiusY() const443 float RSModifierExtractor::GetForegroundBlurRadiusY() const
444 {
445 GET_PROPERTY_FROM_MODIFIERS(float, FOREGROUND_BLUR_RADIUS_Y, 0.f, =);
446 }
447
GetLightIntensity() const448 float RSModifierExtractor::GetLightIntensity() const
449 {
450 GET_PROPERTY_FROM_MODIFIERS_EQRETURN(float, LIGHT_INTENSITY, 0.f, =);
451 }
452
GetLightPosition() const453 Vector4f RSModifierExtractor::GetLightPosition() const
454 {
455 GET_PROPERTY_FROM_MODIFIERS_EQRETURN(Vector4f, LIGHT_POSITION, Vector4f(0.f), =);
456 }
457
GetIlluminatedBorderWidth() const458 float RSModifierExtractor::GetIlluminatedBorderWidth() const
459 {
460 GET_PROPERTY_FROM_MODIFIERS_EQRETURN(float, ILLUMINATED_BORDER_WIDTH, 0.f, =);
461 }
462
GetIlluminatedType() const463 int RSModifierExtractor::GetIlluminatedType() const
464 {
465 GET_PROPERTY_FROM_MODIFIERS_EQRETURN(int, ILLUMINATED_TYPE, 0, =);
466 }
467
GetBloom() const468 float RSModifierExtractor::GetBloom() const
469 {
470 GET_PROPERTY_FROM_MODIFIERS_EQRETURN(float, BLOOM, 0.f, =);
471 }
472
GetLightColor() const473 Color RSModifierExtractor::GetLightColor() const
474 {
475 GET_PROPERTY_FROM_MODIFIERS(Color, LIGHT_COLOR, RgbPalette::White(), =);
476 }
477
478
Dump() const479 std::string RSModifierExtractor::Dump() const
480 {
481 std::string dumpInfo;
482 char buffer[UINT8_MAX] = { 0 };
483 auto bounds = GetBounds();
484 auto frame = GetFrame();
485 if (sprintf_s(buffer, UINT8_MAX, "Bounds[%.1f %.1f %.1f %.1f] Frame[%.1f %.1f %.1f %.1f]",
486 bounds.x_, bounds.y_, bounds.z_, bounds.w_, frame.x_, frame.y_, frame.z_, frame.w_) != -1) {
487 dumpInfo.append(buffer);
488 }
489
490 auto ret = memset_s(buffer, UINT8_MAX, 0, UINT8_MAX);
491 if (ret != EOK) {
492 return "Failed to memset_s for BackgroundColor, ret=" + std::to_string(ret);
493 }
494 if (!ROSEN_EQ(GetBackgroundColor(), RgbPalette::Transparent()) &&
495 sprintf_s(buffer, UINT8_MAX, ", BackgroundColor[#%08X]", GetBackgroundColor().AsArgbInt()) != -1) {
496 dumpInfo.append(buffer);
497 }
498
499 ret = memset_s(buffer, UINT8_MAX, 0, UINT8_MAX);
500 if (ret != EOK) {
501 return "Failed to memset_s for Alpha, ret=" + std::to_string(ret);
502 }
503 if (!ROSEN_EQ(GetAlpha(), 1.f) &&
504 sprintf_s(buffer, UINT8_MAX, ", Alpha[%.1f]", GetAlpha()) != -1) {
505 dumpInfo.append(buffer);
506 }
507
508 // BackgroundFilter
509 ret = memset_s(buffer, UINT8_MAX, 0, UINT8_MAX);
510 if (ret != EOK) {
511 return "Failed to memset_s for BackgroundFilter, ret=" + std::to_string(ret);
512 }
513 float radius = GetBackgroundBlurRadius();
514 if (ROSEN_GNE(radius, 0.0f)) {
515 float saturation = GetBackgroundBlurSaturation();
516 float brightness = GetBackgroundBlurBrightness();
517 Color maskColor = GetBackgroundBlurMaskColor();
518 int colorMode = GetBackgroundBlurColorMode();
519 if (sprintf_s(buffer, UINT8_MAX, ", BackgroundFilter[radius: %.2f, saturation: %.2f, brightness: %.2f, "
520 "maskColor: %08X, colorMode: %d]", radius, saturation, brightness, maskColor.AsArgbInt(),
521 colorMode) != -1) {
522 dumpInfo.append(buffer);
523 }
524 }
525
526 if (!GetVisible()) {
527 dumpInfo.append(", IsVisible[false]");
528 }
529 return dumpInfo;
530 }
531 } // namespace Rosen
532 } // namespace OHOS
533