• 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 "ui/rs_ui_context.h"
26 #include "platform/common/rs_log.h"
27 
28 namespace OHOS {
29 namespace Rosen {
RSModifierExtractor(NodeId id,std::shared_ptr<RSUIContext> rsUIContext)30 RSModifierExtractor::RSModifierExtractor(NodeId id, std::shared_ptr<RSUIContext> rsUIContext)
31     : id_(id), rsUIContext_(rsUIContext)
32 {}
33 constexpr uint32_t DEBUG_MODIFIER_SIZE = 20;
34 #define GET_PROPERTY_FROM_MODIFIERS(T, propertyType, defaultValue, operator)                                        \
35     do {                                                                                                            \
36         auto node = rsUIContext_.lock() ? rsUIContext_.lock()->GetNodeMap().GetNode<RSNode>(id_)                    \
37             : RSNodeMap::Instance().GetNode<RSNode>(id_);                                                           \
38         if (!node) {                                                                                                \
39             return defaultValue;                                                                                    \
40         }                                                                                                           \
41         std::unique_lock<std::recursive_mutex> lock(node->GetPropertyMutex());                                      \
42         T value = defaultValue;                                                                                     \
43         if (node->modifiers_.size() > DEBUG_MODIFIER_SIZE) {                                                        \
44             RS_LOGE_LIMIT(                                                                                          \
45                 __func__, __line__, "RSModifierExtractor modifier size is %{public}zu", node->modifiers_.size());   \
46         }                                                                                                           \
47         for (auto& [_, modifier] : node->modifiers_) {                                                              \
48             if (modifier->GetModifierType() == RSModifierType::propertyType) {                                      \
49                 value operator std::static_pointer_cast<RSProperty<T>>(modifier->GetProperty())->Get();             \
50             }                                                                                                       \
51         }                                                                                                           \
52         return value;                                                                                               \
53     } while (0)
54 
55 #define GET_PROPERTY_FROM_MODIFIERS_EQRETURN(T, propertyType, defaultValue, operator)                               \
56     do {                                                                                                            \
57         auto node = rsUIContext_.lock() ? rsUIContext_.lock()->GetNodeMap().GetNode<RSNode>(id_)                    \
58             : RSNodeMap::Instance().GetNode<RSNode>(id_);                                                           \
59         if (!node) {                                                                                                \
60             return defaultValue;                                                                                    \
61         }                                                                                                           \
62         std::unique_lock<std::recursive_mutex> lock(node->GetPropertyMutex());                                      \
63         auto typeIter = node->modifiersTypeMap_.find((int16_t)RSModifierType::propertyType);                        \
64         if (typeIter != node->modifiersTypeMap_.end()) {                                                            \
65             auto modifier = typeIter->second;                                                                       \
66             return std::static_pointer_cast<RSProperty<T>>(modifier->GetProperty())->Get();                         \
67         } else {                                                                                                    \
68             return defaultValue;                                                                                    \
69         }                                                                                                           \
70     } while (0)                                                                                                     \
71 
GetBounds() const72 Vector4f RSModifierExtractor::GetBounds() const
73 {
74     GET_PROPERTY_FROM_MODIFIERS_EQRETURN(Vector4f, BOUNDS, Vector4f(), =);
75 }
76 
GetFrame() const77 Vector4f RSModifierExtractor::GetFrame() const
78 {
79     GET_PROPERTY_FROM_MODIFIERS_EQRETURN(Vector4f, FRAME, Vector4f(), =);
80 }
81 
GetPositionZ() const82 float RSModifierExtractor::GetPositionZ() const
83 {
84     GET_PROPERTY_FROM_MODIFIERS(float, POSITION_Z, 0.f, +=);
85 }
86 
GetPivot() const87 Vector2f RSModifierExtractor::GetPivot() const
88 {
89     GET_PROPERTY_FROM_MODIFIERS_EQRETURN(Vector2f, PIVOT, Vector2f(0.5f, 0.5f), =);
90 }
91 
GetPivotZ() const92 float RSModifierExtractor::GetPivotZ() const
93 {
94     GET_PROPERTY_FROM_MODIFIERS_EQRETURN(float, PIVOT_Z, 0.f, =);
95 }
96 
GetQuaternion() const97 Quaternion RSModifierExtractor::GetQuaternion() const
98 {
99     GET_PROPERTY_FROM_MODIFIERS_EQRETURN(Quaternion, QUATERNION, Quaternion(), =);
100 }
101 
GetRotation() const102 float RSModifierExtractor::GetRotation() const
103 {
104     GET_PROPERTY_FROM_MODIFIERS(float, ROTATION, 0.f, +=);
105 }
106 
GetRotationX() const107 float RSModifierExtractor::GetRotationX() const
108 {
109     GET_PROPERTY_FROM_MODIFIERS(float, ROTATION_X, 0.f, +=);
110 }
111 
GetRotationY() const112 float RSModifierExtractor::GetRotationY() const
113 {
114     GET_PROPERTY_FROM_MODIFIERS(float, ROTATION_Y, 0.f, +=);
115 }
116 
GetCameraDistance() const117 float RSModifierExtractor::GetCameraDistance() const
118 {
119     GET_PROPERTY_FROM_MODIFIERS_EQRETURN(float, CAMERA_DISTANCE, 0.f, =);
120 }
121 
GetTranslate() const122 Vector2f RSModifierExtractor::GetTranslate() const
123 {
124     GET_PROPERTY_FROM_MODIFIERS(Vector2f, TRANSLATE, Vector2f(0.f, 0.f), +=);
125 }
126 
GetTranslateZ() const127 float RSModifierExtractor::GetTranslateZ() const
128 {
129     GET_PROPERTY_FROM_MODIFIERS(float, TRANSLATE_Z, 0.f, +=);
130 }
131 
GetScale() const132 Vector2f RSModifierExtractor::GetScale() const
133 {
134     GET_PROPERTY_FROM_MODIFIERS(Vector2f, SCALE, Vector2f(1.f, 1.f), *=);
135 }
136 
GetScaleZ() const137 float RSModifierExtractor::GetScaleZ() const
138 {
139     GET_PROPERTY_FROM_MODIFIERS(float, SCALE_Z, 1.f, *=);
140 }
141 
GetSkew() const142 Vector3f RSModifierExtractor::GetSkew() const
143 {
144     GET_PROPERTY_FROM_MODIFIERS(Vector3f, SKEW, Vector3f(0.f, 0.f, 0.f), +=);
145 }
146 
GetPersp() const147 Vector4f RSModifierExtractor::GetPersp() const
148 {
149     GET_PROPERTY_FROM_MODIFIERS(Vector4f, PERSP, Vector4f(0.f, 0.f, 0.f, 1.f), =);
150 }
151 
GetAlpha() const152 float RSModifierExtractor::GetAlpha() const
153 {
154     GET_PROPERTY_FROM_MODIFIERS(float, ALPHA, 1.f, *=);
155 }
156 
GetAlphaOffscreen() const157 bool RSModifierExtractor::GetAlphaOffscreen() const
158 {
159     GET_PROPERTY_FROM_MODIFIERS_EQRETURN(bool, ALPHA_OFFSCREEN, true, =);
160 }
161 
GetCornerRadius() const162 Vector4f RSModifierExtractor::GetCornerRadius() const
163 {
164     GET_PROPERTY_FROM_MODIFIERS_EQRETURN(Vector4f, CORNER_RADIUS, Vector4f(), =);
165 }
166 
GetForegroundColor() const167 Color RSModifierExtractor::GetForegroundColor() const
168 {
169     GET_PROPERTY_FROM_MODIFIERS_EQRETURN(Color, FOREGROUND_COLOR, RgbPalette::Transparent(), =);
170 }
171 
GetBackgroundColor() const172 Color RSModifierExtractor::GetBackgroundColor() const
173 {
174     GET_PROPERTY_FROM_MODIFIERS_EQRETURN(Color, BACKGROUND_COLOR, RgbPalette::Transparent(), =);
175 }
176 
GetSurfaceBgColor() const177 Color RSModifierExtractor::GetSurfaceBgColor() const
178 {
179     GET_PROPERTY_FROM_MODIFIERS_EQRETURN(Color, SURFACE_BG_COLOR, RgbPalette::Transparent(), =);
180 }
181 
GetBackgroundShader() const182 std::shared_ptr<RSShader> RSModifierExtractor::GetBackgroundShader() const
183 {
184     GET_PROPERTY_FROM_MODIFIERS_EQRETURN(std::shared_ptr<RSShader>, BACKGROUND_SHADER, nullptr, =);
185 }
186 
GetBgImage() const187 std::shared_ptr<RSImage> RSModifierExtractor::GetBgImage() const
188 {
189     GET_PROPERTY_FROM_MODIFIERS_EQRETURN(std::shared_ptr<RSImage>, BG_IMAGE, nullptr, =);
190 }
191 
GetBgImageWidth() const192 float RSModifierExtractor::GetBgImageWidth() const
193 {
194     GET_PROPERTY_FROM_MODIFIERS_EQRETURN(float, BG_IMAGE_WIDTH, 0.f, =);
195 }
196 
GetBgImageHeight() const197 float RSModifierExtractor::GetBgImageHeight() const
198 {
199     GET_PROPERTY_FROM_MODIFIERS_EQRETURN(float, BG_IMAGE_HEIGHT, 0.f, =);
200 }
201 
GetBgImagePositionX() const202 float RSModifierExtractor::GetBgImagePositionX() const
203 {
204     GET_PROPERTY_FROM_MODIFIERS_EQRETURN(float, BG_IMAGE_POSITION_X, 0.f, =);
205 }
206 
GetBgImagePositionY() const207 float RSModifierExtractor::GetBgImagePositionY() const
208 {
209     GET_PROPERTY_FROM_MODIFIERS_EQRETURN(float, BG_IMAGE_POSITION_Y, 0.f, =);
210 }
211 
GetBorderColor() const212 Vector4<Color> RSModifierExtractor::GetBorderColor() const
213 {
214     GET_PROPERTY_FROM_MODIFIERS_EQRETURN(Vector4<Color>, BORDER_COLOR, Vector4<Color>(RgbPalette::Transparent()), =);
215 }
216 
GetBorderWidth() const217 Vector4f RSModifierExtractor::GetBorderWidth() const
218 {
219     GET_PROPERTY_FROM_MODIFIERS_EQRETURN(Vector4f, BORDER_WIDTH, Vector4f(0.f), =);
220 }
221 
GetBorderStyle() const222 Vector4<uint32_t> RSModifierExtractor::GetBorderStyle() const
223 {
224     GET_PROPERTY_FROM_MODIFIERS_EQRETURN(
225         Vector4<uint32_t>, BORDER_STYLE, Vector4<uint32_t>(static_cast<uint32_t>(BorderStyle::NONE)), =);
226 }
227 
GetBorderDashWidth() const228 Vector4f RSModifierExtractor::GetBorderDashWidth() const
229 {
230     GET_PROPERTY_FROM_MODIFIERS_EQRETURN(Vector4f, BORDER_DASH_WIDTH, Vector4f(0.f), =);
231 }
232 
GetBorderDashGap() const233 Vector4f RSModifierExtractor::GetBorderDashGap() const
234 {
235     GET_PROPERTY_FROM_MODIFIERS_EQRETURN(Vector4f, BORDER_DASH_GAP, Vector4f(0.f), =);
236 }
237 
GetOutlineColor() const238 Vector4<Color> RSModifierExtractor::GetOutlineColor() const
239 {
240     GET_PROPERTY_FROM_MODIFIERS_EQRETURN(Vector4<Color>, OUTLINE_COLOR, Vector4<Color>(RgbPalette::Transparent()), =);
241 }
242 
GetOutlineWidth() const243 Vector4f RSModifierExtractor::GetOutlineWidth() const
244 {
245     GET_PROPERTY_FROM_MODIFIERS_EQRETURN(Vector4f, OUTLINE_WIDTH, Vector4f(0.f), =);
246 }
247 
GetOutlineStyle() const248 Vector4<uint32_t> RSModifierExtractor::GetOutlineStyle() const
249 {
250     GET_PROPERTY_FROM_MODIFIERS_EQRETURN(
251         Vector4<uint32_t>, OUTLINE_STYLE, Vector4<uint32_t>(static_cast<uint32_t>(BorderStyle::NONE)), =);
252 }
253 
GetOutlineDashWidth() const254 Vector4f RSModifierExtractor::GetOutlineDashWidth() const
255 {
256     GET_PROPERTY_FROM_MODIFIERS_EQRETURN(Vector4f, OUTLINE_DASH_WIDTH, Vector4f(0.f), =);
257 }
258 
GetOutlineDashGap() const259 Vector4f RSModifierExtractor::GetOutlineDashGap() const
260 {
261     GET_PROPERTY_FROM_MODIFIERS_EQRETURN(Vector4f, OUTLINE_DASH_GAP, Vector4f(0.f), =);
262 }
263 
GetOutlineRadius() const264 Vector4f RSModifierExtractor::GetOutlineRadius() const
265 {
266     GET_PROPERTY_FROM_MODIFIERS_EQRETURN(Vector4f, OUTLINE_RADIUS, Vector4f(0.f), =);
267 }
268 
GetForegroundEffectRadius() const269 float RSModifierExtractor::GetForegroundEffectRadius() const
270 {
271     GET_PROPERTY_FROM_MODIFIERS(float, FOREGROUND_EFFECT_RADIUS, 0.f, =);
272 }
273 
GetBackgroundFilter() const274 std::shared_ptr<RSFilter> RSModifierExtractor::GetBackgroundFilter() const
275 {
276     GET_PROPERTY_FROM_MODIFIERS_EQRETURN(std::shared_ptr<RSFilter>, BACKGROUND_FILTER, nullptr, =);
277 }
278 
GetFilter() const279 std::shared_ptr<RSFilter> RSModifierExtractor::GetFilter() const
280 {
281     GET_PROPERTY_FROM_MODIFIERS_EQRETURN(std::shared_ptr<RSFilter>, FILTER, nullptr, =);
282 }
283 
GetShadowColor() const284 Color RSModifierExtractor::GetShadowColor() const
285 {
286     GET_PROPERTY_FROM_MODIFIERS_EQRETURN(Color, SHADOW_COLOR, Color::FromArgbInt(DEFAULT_SPOT_COLOR), =);
287 }
288 
GetShadowOffsetX() const289 float RSModifierExtractor::GetShadowOffsetX() const
290 {
291     GET_PROPERTY_FROM_MODIFIERS_EQRETURN(float, SHADOW_OFFSET_X, DEFAULT_SHADOW_OFFSET_X, =);
292 }
293 
GetShadowOffsetY() const294 float RSModifierExtractor::GetShadowOffsetY() const
295 {
296     GET_PROPERTY_FROM_MODIFIERS_EQRETURN(float, SHADOW_OFFSET_Y, DEFAULT_SHADOW_OFFSET_Y, =);
297 }
298 
GetShadowAlpha() const299 float RSModifierExtractor::GetShadowAlpha() const
300 {
301     GET_PROPERTY_FROM_MODIFIERS_EQRETURN(float, SHADOW_ALPHA, 0.f, =);
302 }
303 
GetShadowElevation() const304 float RSModifierExtractor::GetShadowElevation() const
305 {
306     GET_PROPERTY_FROM_MODIFIERS_EQRETURN(float, SHADOW_ELEVATION, 0.f, =);
307 }
308 
GetShadowRadius() const309 float RSModifierExtractor::GetShadowRadius() const
310 {
311     GET_PROPERTY_FROM_MODIFIERS_EQRETURN(float, SHADOW_RADIUS, DEFAULT_SHADOW_RADIUS, =);
312 }
313 
GetShadowPath() const314 std::shared_ptr<RSPath> RSModifierExtractor::GetShadowPath() const
315 {
316     GET_PROPERTY_FROM_MODIFIERS_EQRETURN(std::shared_ptr<RSPath>, SHADOW_PATH, nullptr, =);
317 }
318 
GetShadowMask() const319 bool RSModifierExtractor::GetShadowMask() const
320 {
321     GET_PROPERTY_FROM_MODIFIERS_EQRETURN(bool, SHADOW_MASK, false, =);
322 }
323 
GetShadowIsFilled() const324 bool RSModifierExtractor::GetShadowIsFilled() const
325 {
326     GET_PROPERTY_FROM_MODIFIERS_EQRETURN(bool, SHADOW_IS_FILLED, false, =);
327 }
328 
GetShadowColorStrategy() const329 int RSModifierExtractor::GetShadowColorStrategy() const
330 {
331     GET_PROPERTY_FROM_MODIFIERS_EQRETURN(int, SHADOW_COLOR_STRATEGY, SHADOW_COLOR_STRATEGY::COLOR_STRATEGY_NONE, =);
332 }
333 
GetFrameGravity() const334 Gravity RSModifierExtractor::GetFrameGravity() const
335 {
336     GET_PROPERTY_FROM_MODIFIERS_EQRETURN(Gravity, FRAME_GRAVITY, Gravity::DEFAULT, =);
337 }
338 
GetClipBounds() const339 std::shared_ptr<RSPath> RSModifierExtractor::GetClipBounds() const
340 {
341     GET_PROPERTY_FROM_MODIFIERS_EQRETURN(std::shared_ptr<RSPath>, CLIP_BOUNDS, nullptr, =);
342 }
343 
GetClipToBounds() const344 bool RSModifierExtractor::GetClipToBounds() const
345 {
346     GET_PROPERTY_FROM_MODIFIERS_EQRETURN(bool, CLIP_TO_BOUNDS, false, =);
347 }
348 
GetClipToFrame() const349 bool RSModifierExtractor::GetClipToFrame() const
350 {
351     GET_PROPERTY_FROM_MODIFIERS_EQRETURN(bool, CLIP_TO_FRAME, false, =);
352 }
353 
GetVisible() const354 bool RSModifierExtractor::GetVisible() const
355 {
356     GET_PROPERTY_FROM_MODIFIERS_EQRETURN(bool, VISIBLE, true, =);
357 }
358 
GetMask() const359 std::shared_ptr<RSMask> RSModifierExtractor::GetMask() const
360 {
361     GET_PROPERTY_FROM_MODIFIERS_EQRETURN(std::shared_ptr<RSMask>, MASK, nullptr, =);
362 }
363 
GetSpherizeDegree() const364 float RSModifierExtractor::GetSpherizeDegree() const
365 {
366     GET_PROPERTY_FROM_MODIFIERS_EQRETURN(float, SPHERIZE, 0.f, =);
367 }
368 
GetAttractionFractionValue() const369 float RSModifierExtractor::GetAttractionFractionValue() const
370 {
371     GET_PROPERTY_FROM_MODIFIERS(float, ATTRACTION_FRACTION, 0.f, =);
372 }
373 
GetAttractionDstPointValue() const374 Vector2f RSModifierExtractor::GetAttractionDstPointValue() const
375 {
376     GET_PROPERTY_FROM_MODIFIERS(Vector2f, ATTRACTION_DSTPOINT, Vector2f(0.f, 0.f), =);
377 }
378 
GetLightUpEffectDegree() const379 float RSModifierExtractor::GetLightUpEffectDegree() const
380 {
381     GET_PROPERTY_FROM_MODIFIERS_EQRETURN(float, LIGHT_UP_EFFECT, 0.f, =);
382 }
383 
GetDynamicDimDegree() const384 float RSModifierExtractor::GetDynamicDimDegree() const
385 {
386     GET_PROPERTY_FROM_MODIFIERS(float, DYNAMIC_DIM_DEGREE, 0.f, =);
387 }
388 
GetBackgroundBlurRadius() const389 float RSModifierExtractor::GetBackgroundBlurRadius() const
390 {
391     GET_PROPERTY_FROM_MODIFIERS(float, BACKGROUND_BLUR_RADIUS, 0.f, =);
392 }
393 
GetBackgroundBlurSaturation() const394 float RSModifierExtractor::GetBackgroundBlurSaturation() const
395 {
396     GET_PROPERTY_FROM_MODIFIERS(float, BACKGROUND_BLUR_SATURATION, 0.f, =);
397 }
398 
GetBackgroundBlurBrightness() const399 float RSModifierExtractor::GetBackgroundBlurBrightness() const
400 {
401     GET_PROPERTY_FROM_MODIFIERS(float, BACKGROUND_BLUR_BRIGHTNESS, 0.f, =);
402 }
403 
GetBackgroundBlurMaskColor() const404 Color RSModifierExtractor::GetBackgroundBlurMaskColor() const
405 {
406     GET_PROPERTY_FROM_MODIFIERS(Color, BACKGROUND_BLUR_MASK_COLOR, RSColor(), =);
407 }
408 
GetBackgroundBlurColorMode() const409 int RSModifierExtractor::GetBackgroundBlurColorMode() const
410 {
411     GET_PROPERTY_FROM_MODIFIERS(int, BACKGROUND_BLUR_COLOR_MODE, BLUR_COLOR_MODE::DEFAULT, =);
412 }
413 
GetBackgroundBlurRadiusX() const414 float RSModifierExtractor::GetBackgroundBlurRadiusX() const
415 {
416     GET_PROPERTY_FROM_MODIFIERS(float, BACKGROUND_BLUR_RADIUS_X, 0.f, =);
417 }
418 
GetBackgroundBlurRadiusY() const419 float RSModifierExtractor::GetBackgroundBlurRadiusY() const
420 {
421     GET_PROPERTY_FROM_MODIFIERS(float, BACKGROUND_BLUR_RADIUS_Y, 0.f, =);
422 }
423 
GetForegroundBlurRadius() const424 float RSModifierExtractor::GetForegroundBlurRadius() const
425 {
426     GET_PROPERTY_FROM_MODIFIERS(float, FOREGROUND_BLUR_RADIUS, 0.f, =);
427 }
428 
GetForegroundBlurSaturation() const429 float RSModifierExtractor::GetForegroundBlurSaturation() const
430 {
431     GET_PROPERTY_FROM_MODIFIERS(float, FOREGROUND_BLUR_SATURATION, 0.f, =);
432 }
433 
GetForegroundBlurBrightness() const434 float RSModifierExtractor::GetForegroundBlurBrightness() const
435 {
436     GET_PROPERTY_FROM_MODIFIERS(float, FOREGROUND_BLUR_BRIGHTNESS, 0.f, =);
437 }
438 
GetForegroundBlurMaskColor() const439 Color RSModifierExtractor::GetForegroundBlurMaskColor() const
440 {
441     GET_PROPERTY_FROM_MODIFIERS(Color, FOREGROUND_BLUR_MASK_COLOR, RSColor(), =);
442 }
443 
GetForegroundBlurColorMode() const444 int RSModifierExtractor::GetForegroundBlurColorMode() const
445 {
446     GET_PROPERTY_FROM_MODIFIERS(int, FOREGROUND_BLUR_COLOR_MODE, BLUR_COLOR_MODE::DEFAULT, =);
447 }
448 
GetForegroundBlurRadiusX() const449 float RSModifierExtractor::GetForegroundBlurRadiusX() const
450 {
451     GET_PROPERTY_FROM_MODIFIERS(float, FOREGROUND_BLUR_RADIUS_X, 0.f, =);
452 }
453 
GetForegroundBlurRadiusY() const454 float RSModifierExtractor::GetForegroundBlurRadiusY() const
455 {
456     GET_PROPERTY_FROM_MODIFIERS(float, FOREGROUND_BLUR_RADIUS_Y, 0.f, =);
457 }
458 
GetLightIntensity() const459 float RSModifierExtractor::GetLightIntensity() const
460 {
461     GET_PROPERTY_FROM_MODIFIERS_EQRETURN(float, LIGHT_INTENSITY, 0.f, =);
462 }
463 
GetLightPosition() const464 Vector4f RSModifierExtractor::GetLightPosition() const
465 {
466     GET_PROPERTY_FROM_MODIFIERS_EQRETURN(Vector4f, LIGHT_POSITION, Vector4f(0.f), =);
467 }
468 
GetIlluminatedBorderWidth() const469 float RSModifierExtractor::GetIlluminatedBorderWidth() const
470 {
471     GET_PROPERTY_FROM_MODIFIERS_EQRETURN(float, ILLUMINATED_BORDER_WIDTH, 0.f, =);
472 }
473 
GetIlluminatedType() const474 int RSModifierExtractor::GetIlluminatedType() const
475 {
476     GET_PROPERTY_FROM_MODIFIERS_EQRETURN(int, ILLUMINATED_TYPE, 0, =);
477 }
478 
GetBloom() const479 float RSModifierExtractor::GetBloom() const
480 {
481     GET_PROPERTY_FROM_MODIFIERS_EQRETURN(float, BLOOM, 0.f, =);
482 }
483 
GetLightColor() const484 Color RSModifierExtractor::GetLightColor() const
485 {
486     GET_PROPERTY_FROM_MODIFIERS(Color, LIGHT_COLOR, RgbPalette::White(), =);
487 }
488 
GetColorBlendMode() const489 int RSModifierExtractor::GetColorBlendMode() const
490 {
491     GET_PROPERTY_FROM_MODIFIERS(int, COLOR_BLEND_MODE, static_cast<int>(RSColorBlendMode::NONE), =);
492 }
493 
GetColorBlendApplyType() const494 int RSModifierExtractor::GetColorBlendApplyType() const
495 {
496     GET_PROPERTY_FROM_MODIFIERS(int, COLOR_BLEND_APPLY_TYPE, static_cast<int>(RSColorBlendApplyType::FAST), =);
497 }
498 
Dump() const499 std::string RSModifierExtractor::Dump() const
500 {
501     std::string dumpInfo;
502     char buffer[UINT8_MAX] = { 0 };
503     auto bounds = GetBounds();
504     auto frame = GetFrame();
505     if (sprintf_s(buffer, UINT8_MAX, "Bounds[%.1f %.1f %.1f %.1f] Frame[%.1f %.1f %.1f %.1f]",
506         bounds.x_, bounds.y_, bounds.z_, bounds.w_, frame.x_, frame.y_, frame.z_, frame.w_) != -1) {
507         dumpInfo.append(buffer);
508     }
509 
510     auto ret = memset_s(buffer, UINT8_MAX, 0, UINT8_MAX);
511     if (ret != EOK) {
512         return "Failed to memset_s for BackgroundColor, ret=" + std::to_string(ret);
513     }
514     if (!ROSEN_EQ(GetBackgroundColor(), RgbPalette::Transparent()) &&
515         sprintf_s(buffer, UINT8_MAX, ", BackgroundColor[#%08X]", GetBackgroundColor().AsArgbInt()) != -1) {
516         dumpInfo.append(buffer);
517     }
518 
519     ret = memset_s(buffer, UINT8_MAX, 0, UINT8_MAX);
520     if (ret != EOK) {
521         return "Failed to memset_s for Alpha, ret=" + std::to_string(ret);
522     }
523     if (!ROSEN_EQ(GetAlpha(), 1.f) &&
524         sprintf_s(buffer, UINT8_MAX, ", Alpha[%.1f]", GetAlpha()) != -1) {
525         dumpInfo.append(buffer);
526     }
527 
528     // BackgroundFilter
529     ret = memset_s(buffer, UINT8_MAX, 0, UINT8_MAX);
530     if (ret != EOK) {
531         return "Failed to memset_s for BackgroundFilter, ret=" + std::to_string(ret);
532     }
533     float radius = GetBackgroundBlurRadius();
534     if (ROSEN_GNE(radius, 0.0f)) {
535         float saturation = GetBackgroundBlurSaturation();
536         float brightness = GetBackgroundBlurBrightness();
537         Color maskColor = GetBackgroundBlurMaskColor();
538         int colorMode = GetBackgroundBlurColorMode();
539         if (sprintf_s(buffer, UINT8_MAX, ", BackgroundFilter[radius: %.2f, saturation: %.2f, brightness: %.2f, "
540             "maskColor: %08X, colorMode: %d]", radius, saturation, brightness, maskColor.AsArgbInt(),
541             colorMode) != -1) {
542             dumpInfo.append(buffer);
543         }
544     }
545 
546     if (!GetVisible()) {
547         dumpInfo.append(", IsVisible[false]");
548     }
549     return dumpInfo;
550 }
551 } // namespace Rosen
552 } // namespace OHOS
553