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