• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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