• 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_ng/rs_modifier_ng.h"
21 #include "pipeline/rs_node_map.h"
22 #include "platform/common/rs_log.h"
23 #include "property/rs_properties_def.h"
24 #include "ui/rs_node.h"
25 #include "ui/rs_ui_context.h"
26 
27 namespace OHOS {
28 namespace Rosen {
RSModifierExtractor(NodeId id,std::shared_ptr<RSUIContext> rsUIContext)29 RSModifierExtractor::RSModifierExtractor(NodeId id, std::shared_ptr<RSUIContext> rsUIContext)
30     : id_(id), rsUIContext_(rsUIContext)
31 {}
32 constexpr uint32_t DEBUG_MODIFIER_SIZE = 20;
33 #define GET_PROPERTY_FROM_MODIFIERS_NG(T, modifierType, propertyType, defaultValue, operator)          \
34     do {                                                                                               \
35         auto node = rsUIContext_.lock() ? rsUIContext_.lock()->GetNodeMap().GetNode<RSNode>(id_)       \
36                                         : RSNodeMap::Instance().GetNode<RSNode>(id_);                  \
37         if (!node) {                                                                                   \
38             return defaultValue;                                                                       \
39         }                                                                                              \
40         std::unique_lock<std::recursive_mutex> lock(node->GetPropertyMutex());                         \
41         T value = defaultValue;                                                                        \
42         if (node->modifiersNG_.size() > DEBUG_MODIFIER_SIZE) {                                         \
43             ROSEN_LOGD("RSModifierExtractor modifier size is %{public}zu", node->modifiersNG_.size()); \
44         }                                                                                              \
45         for (auto& [_, modifier] : node->modifiersNG_) {                                               \
46             if (modifier->GetType() == ModifierNG::RSModifierType::modifierType) {                     \
47                 std::shared_ptr<RSProperty<T>> property = std::static_pointer_cast<RSProperty<T>>(     \
48                     modifier->GetProperty(ModifierNG::RSPropertyType::propertyType));                  \
49                 if (property == nullptr) {                                                             \
50                     continue;                                                                          \
51                 }                                                                                      \
52                 value operator property->Get();                                                        \
53             }                                                                                          \
54         }                                                                                              \
55         return value;                                                                                  \
56     } while (0)
57 
GetBounds() const58 Vector4f RSModifierExtractor::GetBounds() const
59 {
60     GET_PROPERTY_FROM_MODIFIERS_NG(Vector4f, BOUNDS, BOUNDS, Vector4f(), =);
61 }
62 
GetFrame() const63 Vector4f RSModifierExtractor::GetFrame() const
64 {
65     GET_PROPERTY_FROM_MODIFIERS_NG(Vector4f, FRAME, FRAME, Vector4f(), =);
66 }
67 
GetPositionZ() const68 float RSModifierExtractor::GetPositionZ() const
69 {
70     GET_PROPERTY_FROM_MODIFIERS_NG(float, TRANSFORM, POSITION_Z, 0.f, +=);
71 }
72 
GetPivot() const73 Vector2f RSModifierExtractor::GetPivot() const
74 {
75     GET_PROPERTY_FROM_MODIFIERS_NG(Vector2f, TRANSFORM, PIVOT, Vector2f(0.5f, 0.5f), =);
76 }
77 
GetPivotZ() const78 float RSModifierExtractor::GetPivotZ() const
79 {
80     GET_PROPERTY_FROM_MODIFIERS_NG(float, TRANSFORM, PIVOT_Z, 0.f, =);
81 }
82 
GetQuaternion() const83 Quaternion RSModifierExtractor::GetQuaternion() const
84 {
85     GET_PROPERTY_FROM_MODIFIERS_NG(Quaternion, TRANSFORM, QUATERNION, Quaternion(), =);
86 }
87 
GetRotation() const88 float RSModifierExtractor::GetRotation() const
89 {
90     GET_PROPERTY_FROM_MODIFIERS_NG(float, TRANSFORM, ROTATION, 0.f, +=);
91 }
92 
GetRotationX() const93 float RSModifierExtractor::GetRotationX() const
94 {
95     GET_PROPERTY_FROM_MODIFIERS_NG(float, TRANSFORM, ROTATION_X, 0.f, +=);
96 }
97 
GetRotationY() const98 float RSModifierExtractor::GetRotationY() const
99 {
100     GET_PROPERTY_FROM_MODIFIERS_NG(float, TRANSFORM, ROTATION_Y, 0.f, +=);
101 }
102 
GetCameraDistance() const103 float RSModifierExtractor::GetCameraDistance() const
104 {
105     GET_PROPERTY_FROM_MODIFIERS_NG(float, TRANSFORM, CAMERA_DISTANCE, 0.f, =);
106 }
107 
GetTranslate() const108 Vector2f RSModifierExtractor::GetTranslate() const
109 {
110     GET_PROPERTY_FROM_MODIFIERS_NG(Vector2f, TRANSFORM, TRANSLATE, Vector2f(0.f, 0.0f), +=);
111 }
112 
GetTranslateZ() const113 float RSModifierExtractor::GetTranslateZ() const
114 {
115     GET_PROPERTY_FROM_MODIFIERS_NG(float, TRANSFORM, TRANSLATE_Z, 0.f, +=);
116 }
117 
GetScale() const118 Vector2f RSModifierExtractor::GetScale() const
119 {
120     GET_PROPERTY_FROM_MODIFIERS_NG(Vector2f, TRANSFORM, SCALE, Vector2f(1.f, 1.f), *=);
121 }
122 
GetScaleZ() const123 float RSModifierExtractor::GetScaleZ() const
124 {
125     GET_PROPERTY_FROM_MODIFIERS_NG(float, TRANSFORM, SCALE_Z, 1.f, *=);
126 }
127 
GetSkew() const128 Vector3f RSModifierExtractor::GetSkew() const
129 {
130     GET_PROPERTY_FROM_MODIFIERS_NG(Vector3f, TRANSFORM, SKEW, Vector3f(0.f, 0.f, 0.f), +=);
131 }
132 
GetPersp() const133 Vector4f RSModifierExtractor::GetPersp() const
134 {
135     GET_PROPERTY_FROM_MODIFIERS_NG(Vector4f, TRANSFORM, PERSP, Vector4f(0.f, 0.f, 0.f, 1.f), =);
136 }
137 
GetAlpha() const138 float RSModifierExtractor::GetAlpha() const
139 {
140     GET_PROPERTY_FROM_MODIFIERS_NG(float, ALPHA, ALPHA, 1.f, *=);
141 }
142 
GetAlphaOffscreen() const143 bool RSModifierExtractor::GetAlphaOffscreen() const
144 {
145     GET_PROPERTY_FROM_MODIFIERS_NG(bool, ALPHA, ALPHA_OFFSCREEN, true, =);
146 }
147 
GetCornerRadius() const148 Vector4f RSModifierExtractor::GetCornerRadius() const
149 {
150     GET_PROPERTY_FROM_MODIFIERS_NG(Vector4f, CLIP_TO_BOUNDS, CORNER_RADIUS, Vector4f(), =);
151 }
152 
GetForegroundColor() const153 Color RSModifierExtractor::GetForegroundColor() const
154 {
155     GET_PROPERTY_FROM_MODIFIERS_NG(Color, FOREGROUND_COLOR, FOREGROUND_COLOR, RgbPalette::Transparent(), =);
156 }
157 
GetBackgroundColor() const158 Color RSModifierExtractor::GetBackgroundColor() const
159 {
160     GET_PROPERTY_FROM_MODIFIERS_NG(Color, BACKGROUND_COLOR, BACKGROUND_COLOR, RgbPalette::Transparent(), =);
161 }
162 
GetBackgroundShader() const163 std::shared_ptr<RSShader> RSModifierExtractor::GetBackgroundShader() const
164 {
165     GET_PROPERTY_FROM_MODIFIERS_NG(std::shared_ptr<RSShader>, BACKGROUND_SHADER, BACKGROUND_SHADER, nullptr, =);
166 }
167 
GetBgImage() const168 std::shared_ptr<RSImage> RSModifierExtractor::GetBgImage() const
169 {
170     GET_PROPERTY_FROM_MODIFIERS_NG(std::shared_ptr<RSImage>, BACKGROUND_IMAGE, BG_IMAGE, nullptr, =);
171 }
172 
GetBgImageDstRect() const173 Vector4f RSModifierExtractor::GetBgImageDstRect() const
174 {
175     GET_PROPERTY_FROM_MODIFIERS_NG(Vector4f, BACKGROUND_IMAGE, BG_IMAGE_RECT, Vector4f(), =);
176 }
177 
GetBgImageWidth() const178 float RSModifierExtractor::GetBgImageWidth() const
179 {
180     Vector4f imageRect = GetBgImageDstRect();
181     return imageRect[2]; // 2 index of width
182 }
183 
GetBgImageHeight() const184 float RSModifierExtractor::GetBgImageHeight() const
185 {
186     Vector4f imageRect = GetBgImageDstRect();
187     return imageRect[3]; // 3 index of height
188 }
189 
GetBgImagePositionX() const190 float RSModifierExtractor::GetBgImagePositionX() const
191 {
192     Vector4f imageRect = GetBgImageDstRect();
193     return imageRect[0]; // 0 index of position x
194 }
195 
GetBgImagePositionY() const196 float RSModifierExtractor::GetBgImagePositionY() const
197 {
198     Vector4f imageRect = GetBgImageDstRect();
199     return imageRect[1]; // 1 index of position y
200 }
201 
GetBorderColor() const202 Vector4<Color> RSModifierExtractor::GetBorderColor() const
203 {
204     GET_PROPERTY_FROM_MODIFIERS_NG(Vector4<Color>, BORDER, BORDER_COLOR, Vector4<Color>(RgbPalette::Transparent()), =);
205 }
206 
GetBorderWidth() const207 Vector4f RSModifierExtractor::GetBorderWidth() const
208 {
209     GET_PROPERTY_FROM_MODIFIERS_NG(Vector4f, BORDER, BORDER_WIDTH, Vector4f(0.f), =);
210 }
211 
GetBorderStyle() const212 Vector4<uint32_t> RSModifierExtractor::GetBorderStyle() const
213 {
214     GET_PROPERTY_FROM_MODIFIERS_NG(
215         Vector4<uint32_t>, BORDER, BORDER_STYLE, Vector4<uint32_t>(static_cast<uint32_t>(BorderStyle::SOLID)), =);
216 }
217 
GetBorderDashWidth() const218 Vector4f RSModifierExtractor::GetBorderDashWidth() const
219 {
220     GET_PROPERTY_FROM_MODIFIERS_NG(Vector4f, BORDER, BORDER_DASH_WIDTH, Vector4f(0.f), =);
221 }
222 
GetBorderDashGap() const223 Vector4f RSModifierExtractor::GetBorderDashGap() const
224 {
225     GET_PROPERTY_FROM_MODIFIERS_NG(Vector4f, BORDER, BORDER_DASH_GAP, Vector4f(0.f), =);
226 }
227 
GetOutlineColor() const228 Vector4<Color> RSModifierExtractor::GetOutlineColor() const
229 {
230     GET_PROPERTY_FROM_MODIFIERS_NG(
231         Vector4<Color>, OUTLINE, OUTLINE_COLOR, Vector4<Color>(RgbPalette::Transparent()), =);
232 }
233 
GetOutlineWidth() const234 Vector4f RSModifierExtractor::GetOutlineWidth() const
235 {
236     GET_PROPERTY_FROM_MODIFIERS_NG(Vector4f, OUTLINE, OUTLINE_WIDTH, Vector4f(0.f), =);
237 }
238 
GetOutlineStyle() const239 Vector4<uint32_t> RSModifierExtractor::GetOutlineStyle() const
240 {
241     GET_PROPERTY_FROM_MODIFIERS_NG(
242         Vector4<uint32_t>, OUTLINE, OUTLINE_STYLE, Vector4<uint32_t>(static_cast<uint32_t>(BorderStyle::NONE)), =);
243 }
244 
GetOutlineDashWidth() const245 Vector4f RSModifierExtractor::GetOutlineDashWidth() const
246 {
247     GET_PROPERTY_FROM_MODIFIERS_NG(Vector4f, OUTLINE, OUTLINE_DASH_WIDTH, Vector4f(0.f), =);
248 }
249 
GetOutlineDashGap() const250 Vector4f RSModifierExtractor::GetOutlineDashGap() const
251 {
252     GET_PROPERTY_FROM_MODIFIERS_NG(Vector4f, OUTLINE, OUTLINE_DASH_GAP, Vector4f(0.f), =);
253 }
254 
GetOutlineRadius() const255 Vector4f RSModifierExtractor::GetOutlineRadius() const
256 {
257     GET_PROPERTY_FROM_MODIFIERS_NG(Vector4f, OUTLINE, OUTLINE_RADIUS, Vector4f(0.f), =);
258 }
259 
GetForegroundEffectRadius() const260 float RSModifierExtractor::GetForegroundEffectRadius() const
261 {
262     GET_PROPERTY_FROM_MODIFIERS_NG(float, FOREGROUND_FILTER, FOREGROUND_EFFECT_RADIUS, 0.f, =);
263 }
264 
GetShadowColor() const265 Color RSModifierExtractor::GetShadowColor() const
266 {
267     GET_PROPERTY_FROM_MODIFIERS_NG(Color, SHADOW, SHADOW_COLOR, Color::FromArgbInt(DEFAULT_SPOT_COLOR), =);
268 }
269 
GetShadowOffsetX() const270 float RSModifierExtractor::GetShadowOffsetX() const
271 {
272     GET_PROPERTY_FROM_MODIFIERS_NG(float, SHADOW, SHADOW_OFFSET_X, DEFAULT_SHADOW_OFFSET_X, =);
273 }
274 
GetShadowOffsetY() const275 float RSModifierExtractor::GetShadowOffsetY() const
276 {
277     GET_PROPERTY_FROM_MODIFIERS_NG(float, SHADOW, SHADOW_OFFSET_Y, DEFAULT_SHADOW_OFFSET_Y, =);
278 }
279 
GetShadowAlpha() const280 float RSModifierExtractor::GetShadowAlpha() const
281 {
282     GET_PROPERTY_FROM_MODIFIERS_NG(float, SHADOW, SHADOW_ALPHA, 1.f, =);
283 }
284 
GetShadowElevation() const285 float RSModifierExtractor::GetShadowElevation() const
286 {
287     GET_PROPERTY_FROM_MODIFIERS_NG(float, SHADOW, SHADOW_ELEVATION, 0.f, =);
288 }
289 
GetShadowRadius() const290 float RSModifierExtractor::GetShadowRadius() const
291 {
292     GET_PROPERTY_FROM_MODIFIERS_NG(float, SHADOW, SHADOW_RADIUS, DEFAULT_SHADOW_RADIUS, =);
293 }
294 
GetShadowPath() const295 std::shared_ptr<RSPath> RSModifierExtractor::GetShadowPath() const
296 {
297     GET_PROPERTY_FROM_MODIFIERS_NG(std::shared_ptr<RSPath>, SHADOW, SHADOW_PATH, nullptr, =);
298 }
299 
GetShadowMask() const300 int RSModifierExtractor::GetShadowMask() const
301 {
302     GET_PROPERTY_FROM_MODIFIERS_NG(int, SHADOW, SHADOW_MASK, SHADOW_MASK_STRATEGY::MASK_NONE, =);
303 }
304 
GetShadowIsFilled() const305 bool RSModifierExtractor::GetShadowIsFilled() const
306 {
307     GET_PROPERTY_FROM_MODIFIERS_NG(bool, SHADOW, SHADOW_IS_FILLED, false, =);
308 }
309 
GetShadowColorStrategy() const310 int RSModifierExtractor::GetShadowColorStrategy() const
311 {
312     GET_PROPERTY_FROM_MODIFIERS_NG(int, SHADOW, SHADOW_COLOR_STRATEGY, SHADOW_COLOR_STRATEGY::COLOR_STRATEGY_NONE, =);
313 }
314 
GetFrameGravity() const315 Gravity RSModifierExtractor::GetFrameGravity() const
316 {
317     GET_PROPERTY_FROM_MODIFIERS_NG(Gravity, CLIP_TO_FRAME, FRAME_GRAVITY, Gravity::DEFAULT, =);
318 }
319 
GetClipBounds() const320 std::shared_ptr<RSPath> RSModifierExtractor::GetClipBounds() const
321 {
322     GET_PROPERTY_FROM_MODIFIERS_NG(std::shared_ptr<RSPath>, CLIP_TO_BOUNDS, CLIP_BOUNDS, nullptr, =);
323 }
324 
GetClipToBounds() const325 bool RSModifierExtractor::GetClipToBounds() const
326 {
327     GET_PROPERTY_FROM_MODIFIERS_NG(bool, CLIP_TO_BOUNDS, CLIP_TO_BOUNDS, false, =);
328 }
329 
GetClipToFrame() const330 bool RSModifierExtractor::GetClipToFrame() const
331 {
332     GET_PROPERTY_FROM_MODIFIERS_NG(bool, CLIP_TO_FRAME, CLIP_TO_FRAME, false, =);
333 }
334 
GetVisible() const335 bool RSModifierExtractor::GetVisible() const
336 {
337     GET_PROPERTY_FROM_MODIFIERS_NG(bool, VISIBILITY, VISIBLE, true, =);
338 }
339 
GetMask() const340 std::shared_ptr<RSMask> RSModifierExtractor::GetMask() const
341 {
342     GET_PROPERTY_FROM_MODIFIERS_NG(std::shared_ptr<RSMask>, MASK, MASK, nullptr, =);
343 }
344 
GetSpherizeDegree() const345 float RSModifierExtractor::GetSpherizeDegree() const
346 {
347     GET_PROPERTY_FROM_MODIFIERS_NG(float, FOREGROUND_FILTER, SPHERIZE, 0.f, =);
348 }
349 
GetHDRUIBrightness() const350 float RSModifierExtractor::GetHDRUIBrightness() const
351 {
352     GET_PROPERTY_FROM_MODIFIERS_NG(float, HDR_BRIGHTNESS, HDR_UI_BRIGHTNESS, 1.0f, =);
353 }
354 
GetAttractionFractionValue() const355 float RSModifierExtractor::GetAttractionFractionValue() const
356 {
357     GET_PROPERTY_FROM_MODIFIERS_NG(float, FOREGROUND_FILTER, ATTRACTION_FRACTION, 0.f, =);
358 }
359 
GetAttractionDstPointValue() const360 Vector2f RSModifierExtractor::GetAttractionDstPointValue() const
361 {
362     GET_PROPERTY_FROM_MODIFIERS_NG(Vector2f, FOREGROUND_FILTER, ATTRACTION_DSTPOINT, Vector2f(0.f, 0.f), =);
363 }
364 
GetHDRBrightnessFactor() const365 float RSModifierExtractor::GetHDRBrightnessFactor() const
366 {
367     GET_PROPERTY_FROM_MODIFIERS_NG(float, HDR_BRIGHTNESS, HDR_BRIGHTNESS_FACTOR, 1.0f, =);
368 }
369 
GetLightUpEffectDegree() const370 float RSModifierExtractor::GetLightUpEffectDegree() const
371 {
372     GET_PROPERTY_FROM_MODIFIERS_NG(float, COMPOSITING_FILTER, LIGHT_UP_EFFECT_DEGREE, 0.f, =);
373 }
374 
GetDynamicDimDegree() const375 float RSModifierExtractor::GetDynamicDimDegree() const
376 {
377     GET_PROPERTY_FROM_MODIFIERS_NG(float, COMPOSITING_FILTER, DYNAMIC_DIM_DEGREE, 0.f, =);
378 }
379 
GetBackgroundBlurRadius() const380 float RSModifierExtractor::GetBackgroundBlurRadius() const
381 {
382     GET_PROPERTY_FROM_MODIFIERS_NG(float, BACKGROUND_FILTER, BACKGROUND_BLUR_RADIUS, 0.f, =);
383 }
384 
GetBackgroundBlurSaturation() const385 float RSModifierExtractor::GetBackgroundBlurSaturation() const
386 {
387     GET_PROPERTY_FROM_MODIFIERS_NG(float, BACKGROUND_FILTER, BACKGROUND_BLUR_SATURATION, 0.f, =);
388 }
389 
GetBackgroundBlurBrightness() const390 float RSModifierExtractor::GetBackgroundBlurBrightness() const
391 {
392     GET_PROPERTY_FROM_MODIFIERS_NG(float, BACKGROUND_FILTER, BACKGROUND_BLUR_BRIGHTNESS, 0.f, =);
393 }
394 
GetBackgroundBlurMaskColor() const395 Color RSModifierExtractor::GetBackgroundBlurMaskColor() const
396 {
397     GET_PROPERTY_FROM_MODIFIERS_NG(Color, BACKGROUND_FILTER, BACKGROUND_BLUR_MASK_COLOR, RSColor(), =);
398 }
399 
GetBackgroundBlurColorMode() const400 int RSModifierExtractor::GetBackgroundBlurColorMode() const
401 {
402     GET_PROPERTY_FROM_MODIFIERS_NG(int, BACKGROUND_FILTER, BACKGROUND_BLUR_COLOR_MODE, BLUR_COLOR_MODE::DEFAULT, =);
403 }
404 
GetBackgroundBlurRadiusX() const405 float RSModifierExtractor::GetBackgroundBlurRadiusX() const
406 {
407     GET_PROPERTY_FROM_MODIFIERS_NG(float, BACKGROUND_FILTER, BACKGROUND_BLUR_RADIUS_X, 0.f, =);
408 }
409 
GetBackgroundBlurRadiusY() const410 float RSModifierExtractor::GetBackgroundBlurRadiusY() const
411 {
412     GET_PROPERTY_FROM_MODIFIERS_NG(float, BACKGROUND_FILTER, BACKGROUND_BLUR_RADIUS_Y, 0.f, =);
413 }
414 
GetBgBlurDisableSystemAdaptation() const415 bool RSModifierExtractor::GetBgBlurDisableSystemAdaptation() const
416 {
417     GET_PROPERTY_FROM_MODIFIERS_NG(bool, BACKGROUND_FILTER, BG_BLUR_DISABLE_SYSTEM_ADAPTATION, true, =);
418 }
419 
GetAlwaysSnapshot() const420 bool RSModifierExtractor::GetAlwaysSnapshot() const
421 {
422     GET_PROPERTY_FROM_MODIFIERS_NG(bool, BACKGROUND_FILTER, ALWAYS_SNAPSHOT, false, =);
423 }
424 
GetForegroundBlurRadius() const425 float RSModifierExtractor::GetForegroundBlurRadius() const
426 {
427     GET_PROPERTY_FROM_MODIFIERS_NG(float, COMPOSITING_FILTER, FOREGROUND_BLUR_RADIUS, 0.f, =);
428 }
429 
GetForegroundBlurSaturation() const430 float RSModifierExtractor::GetForegroundBlurSaturation() const
431 {
432     GET_PROPERTY_FROM_MODIFIERS_NG(float, COMPOSITING_FILTER, FOREGROUND_BLUR_SATURATION, 0.f, =);
433 }
434 
GetForegroundBlurBrightness() const435 float RSModifierExtractor::GetForegroundBlurBrightness() const
436 {
437     GET_PROPERTY_FROM_MODIFIERS_NG(float, COMPOSITING_FILTER, FOREGROUND_BLUR_BRIGHTNESS, 0.f, =);
438 }
439 
GetForegroundBlurMaskColor() const440 Color RSModifierExtractor::GetForegroundBlurMaskColor() const
441 {
442     GET_PROPERTY_FROM_MODIFIERS_NG(Color, COMPOSITING_FILTER, FOREGROUND_BLUR_MASK_COLOR, RSColor(), =);
443 }
444 
GetForegroundBlurColorMode() const445 int RSModifierExtractor::GetForegroundBlurColorMode() const
446 {
447     GET_PROPERTY_FROM_MODIFIERS_NG(int, COMPOSITING_FILTER, FOREGROUND_BLUR_COLOR_MODE, BLUR_COLOR_MODE::DEFAULT, =);
448 }
449 
GetForegroundBlurRadiusX() const450 float RSModifierExtractor::GetForegroundBlurRadiusX() const
451 {
452     GET_PROPERTY_FROM_MODIFIERS_NG(float, COMPOSITING_FILTER, FOREGROUND_BLUR_RADIUS_X, 0.f, =);
453 }
454 
GetForegroundBlurRadiusY() const455 float RSModifierExtractor::GetForegroundBlurRadiusY() const
456 {
457     GET_PROPERTY_FROM_MODIFIERS_NG(float, COMPOSITING_FILTER, FOREGROUND_BLUR_RADIUS_Y, 0.f, =);
458 }
459 
GetFgBlurDisableSystemAdaptation() const460 bool RSModifierExtractor::GetFgBlurDisableSystemAdaptation() const
461 {
462     GET_PROPERTY_FROM_MODIFIERS_NG(bool, COMPOSITING_FILTER, FG_BLUR_DISABLE_SYSTEM_ADAPTATION, true, =);
463 }
464 
GetLightIntensity() const465 float RSModifierExtractor::GetLightIntensity() const
466 {
467     GET_PROPERTY_FROM_MODIFIERS_NG(float, POINT_LIGHT, LIGHT_INTENSITY, 0.f, =);
468 }
469 
GetLightPosition() const470 Vector4f RSModifierExtractor::GetLightPosition() const
471 {
472     GET_PROPERTY_FROM_MODIFIERS_NG(Vector4f, POINT_LIGHT, LIGHT_POSITION, Vector4f(0.f), =);
473 }
474 
GetIlluminatedBorderWidth() const475 float RSModifierExtractor::GetIlluminatedBorderWidth() const
476 {
477     GET_PROPERTY_FROM_MODIFIERS_NG(float, POINT_LIGHT, ILLUMINATED_BORDER_WIDTH, 0.f, =);
478 }
479 
GetIlluminatedType() const480 int RSModifierExtractor::GetIlluminatedType() const
481 {
482     GET_PROPERTY_FROM_MODIFIERS_NG(int, POINT_LIGHT, ILLUMINATED_TYPE, 0, =);
483 }
484 
GetBloom() const485 float RSModifierExtractor::GetBloom() const
486 {
487     GET_PROPERTY_FROM_MODIFIERS_NG(float, POINT_LIGHT, BLOOM, 0.f, =);
488 }
489 
GetLightColor() const490 Color RSModifierExtractor::GetLightColor() const
491 {
492     GET_PROPERTY_FROM_MODIFIERS_NG(Color, POINT_LIGHT, LIGHT_COLOR, RgbPalette::White(), =);
493 }
494 
GetColorBlendMode() const495 int RSModifierExtractor::GetColorBlendMode() const
496 {
497     GET_PROPERTY_FROM_MODIFIERS_NG(int, BLENDER, COLOR_BLEND_MODE, static_cast<int>(RSColorBlendMode::NONE), =);
498 }
499 
GetColorBlendApplyType() const500 int RSModifierExtractor::GetColorBlendApplyType() const
501 {
502     GET_PROPERTY_FROM_MODIFIERS_NG(
503         int, BLENDER, COLOR_BLEND_APPLY_TYPE, static_cast<int>(RSColorBlendApplyType::FAST), =);
504 }
505 
Dump() const506 std::string RSModifierExtractor::Dump() const
507 {
508     std::string dumpInfo;
509     char buffer[UINT8_MAX] = { 0 };
510     if (auto rsUIContextPtr = rsUIContext_.lock()) {
511         if (sprintf_s(buffer, UINT8_MAX, "modifierExtractor rsUIContext token is %llu",
512                       rsUIContextPtr ? rsUIContextPtr->GetToken() : 0) != -1) {
513             dumpInfo.append(buffer);
514         }
515         if (rsUIContextPtr->GetNodeMap().GetNode<RSNode>(id_) != nullptr) {
516             sprintf_s(buffer, UINT8_MAX, "node Is %d ", 1);
517         } else {
518             sprintf_s(buffer, UINT8_MAX, "node Is %d ", 0);
519         }
520         dumpInfo.append(buffer);
521     }
522 
523     auto bounds = GetBounds();
524     auto frame = GetFrame();
525     if (sprintf_s(buffer, UINT8_MAX, "Bounds[%.1f %.1f %.1f %.1f] Frame[%.1f %.1f %.1f %.1f]",
526         bounds.x_, bounds.y_, bounds.z_, bounds.w_, frame.x_, frame.y_, frame.z_, frame.w_) != -1) {
527         dumpInfo.append(buffer);
528     }
529 
530     auto ret = memset_s(buffer, UINT8_MAX, 0, UINT8_MAX);
531     if (ret != EOK) {
532         return "Failed to memset_s for BackgroundColor, ret=" + std::to_string(ret);
533     }
534     if (!ROSEN_EQ(GetBackgroundColor(), RgbPalette::Transparent()) &&
535         sprintf_s(buffer, UINT8_MAX, ", BackgroundColor[#%08X]", GetBackgroundColor().AsArgbInt()) != -1) {
536         dumpInfo.append(buffer);
537     }
538 
539     ret = memset_s(buffer, UINT8_MAX, 0, UINT8_MAX);
540     if (ret != EOK) {
541         return "Failed to memset_s for Alpha, ret=" + std::to_string(ret);
542     }
543     if (!ROSEN_EQ(GetAlpha(), 1.f) &&
544         sprintf_s(buffer, UINT8_MAX, ", Alpha[%.1f]", GetAlpha()) != -1) {
545         dumpInfo.append(buffer);
546     }
547 
548     // BackgroundFilter
549     ret = memset_s(buffer, UINT8_MAX, 0, UINT8_MAX);
550     if (ret != EOK) {
551         return "Failed to memset_s for BackgroundFilter, ret=" + std::to_string(ret);
552     }
553     float radius = GetBackgroundBlurRadius();
554     if (ROSEN_GNE(radius, 0.0f)) {
555         float saturation = GetBackgroundBlurSaturation();
556         float brightness = GetBackgroundBlurBrightness();
557         Color maskColor = GetBackgroundBlurMaskColor();
558         int colorMode = GetBackgroundBlurColorMode();
559         if (sprintf_s(buffer, UINT8_MAX, ", BackgroundFilter[radius: %.2f, saturation: %.2f, brightness: %.2f, "
560             "maskColor: %08X, colorMode: %d]", radius, saturation, brightness, maskColor.AsArgbInt(),
561             colorMode) != -1) {
562             dumpInfo.append(buffer);
563         }
564     }
565 
566     if (!GetVisible()) {
567         dumpInfo.append(", IsVisible[false]");
568     }
569     return dumpInfo;
570 }
571 } // namespace Rosen
572 } // namespace OHOS
573