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