• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022 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_property_modifier.h"
17 
18 #include "modifier/rs_modifier_type.h"
19 #include "modifier/rs_render_modifier.h"
20 
21 namespace OHOS {
22 namespace Rosen {
23 
RSEnvForegroundColorModifier(const std::shared_ptr<RSPropertyBase> & property)24 RSEnvForegroundColorModifier::RSEnvForegroundColorModifier(const std::shared_ptr<RSPropertyBase>& property)
25     : RSForegroundModifier(property, RSModifierType::ENV_FOREGROUND_COLOR)
26 {}
GetModifierType() const27 RSModifierType RSEnvForegroundColorModifier::GetModifierType() const
28 {
29     return RSModifierType::ENV_FOREGROUND_COLOR;
30 }
CreateRenderModifier() const31 std::shared_ptr<RSRenderModifier> RSEnvForegroundColorModifier::CreateRenderModifier() const
32 {
33     auto renderProperty = GetRenderProperty();
34     auto renderModifier = std::make_shared<RSEnvForegroundColorRenderModifier>(renderProperty);
35     return renderModifier;
36 }
37 
RSEnvForegroundColorStrategyModifier(const std::shared_ptr<RSPropertyBase> & property)38 RSEnvForegroundColorStrategyModifier::RSEnvForegroundColorStrategyModifier(
39     const std::shared_ptr<RSPropertyBase>& property)
40     : RSForegroundModifier(property, RSModifierType::ENV_FOREGROUND_COLOR_STRATEGY)
41 {}
GetModifierType() const42 RSModifierType RSEnvForegroundColorStrategyModifier::GetModifierType() const
43 {
44     return RSModifierType::ENV_FOREGROUND_COLOR_STRATEGY;
45 }
CreateRenderModifier() const46 std::shared_ptr<RSRenderModifier> RSEnvForegroundColorStrategyModifier::CreateRenderModifier() const
47 {
48     auto renderProperty = GetRenderProperty();
49     auto renderModifier = std::make_shared<RSEnvForegroundColorStrategyRenderModifier>(renderProperty);
50     return renderModifier;
51 }
52 
RSCustomClipToFrameModifier(const std::shared_ptr<RSPropertyBase> & property)53 RSCustomClipToFrameModifier::RSCustomClipToFrameModifier(const std::shared_ptr<RSPropertyBase>& property)
54     : RSForegroundModifier(property, RSModifierType::CUSTOM_CLIP_TO_FRAME)
55 {}
56 
GetModifierType() const57 RSModifierType RSCustomClipToFrameModifier::GetModifierType() const
58 {
59     return RSModifierType::CUSTOM_CLIP_TO_FRAME;
60 }
61 
CreateRenderModifier() const62 std::shared_ptr<RSRenderModifier> RSCustomClipToFrameModifier::CreateRenderModifier() const
63 {
64     auto renderProperty = GetRenderProperty();
65     auto renderModifier = std::make_shared<RSCustomClipToFrameRenderModifier>(renderProperty);
66     return renderModifier;
67 }
68 
RSHDRBrightnessModifier(const std::shared_ptr<RSPropertyBase> & property)69 RSHDRBrightnessModifier::RSHDRBrightnessModifier(const std::shared_ptr<RSPropertyBase>& property)
70     : RSForegroundModifier(property, RSModifierType::HDR_BRIGHTNESS)
71 {}
72 
GetModifierType() const73 RSModifierType RSHDRBrightnessModifier::GetModifierType() const
74 {
75     return RSModifierType::HDR_BRIGHTNESS;
76 }
77 
CreateRenderModifier() const78 std::shared_ptr<RSRenderModifier> RSHDRBrightnessModifier::CreateRenderModifier() const
79 {
80     auto renderProperty = GetRenderProperty();
81     auto renderModifier = std::make_shared<RSHDRBrightnessRenderModifier>(renderProperty);
82     return renderModifier;
83 }
84 
RSBehindWindowFilterEnabledModifier(const std::shared_ptr<RSPropertyBase> & property)85 RSBehindWindowFilterEnabledModifier::RSBehindWindowFilterEnabledModifier(
86     const std::shared_ptr<RSPropertyBase>& property) : RSBackgroundModifier(property,
87     RSModifierType::BEHIND_WINDOW_FILTER_ENABLED)
88 {
89     property_->SetThresholdType(ThresholdType::ZERO);
90 }
91 
GetModifierType() const92 RSModifierType RSBehindWindowFilterEnabledModifier::GetModifierType() const
93 {
94     return RSModifierType::BEHIND_WINDOW_FILTER_ENABLED;
95 }
96 
CreateRenderModifier() const97 std::shared_ptr<RSRenderModifier> RSBehindWindowFilterEnabledModifier::CreateRenderModifier() const
98 {
99     auto renderProperty = GetRenderProperty();
100     auto renderModifier = std::make_shared<RSBehindWindowFilterEnabledRenderModifier>(renderProperty);
101     return renderModifier;
102 }
103 
RSBehindWindowFilterRadiusModifier(const std::shared_ptr<RSPropertyBase> & property)104 RSBehindWindowFilterRadiusModifier::RSBehindWindowFilterRadiusModifier(const std::shared_ptr<RSPropertyBase>& property)
105     : RSBackgroundModifier(property, RSModifierType::BEHIND_WINDOW_FILTER_RADIUS)
106 {
107     property_->SetThresholdType(ThresholdType::COARSE);
108 }
109 
GetModifierType() const110 RSModifierType RSBehindWindowFilterRadiusModifier::GetModifierType() const
111 {
112     return RSModifierType::BEHIND_WINDOW_FILTER_RADIUS;
113 }
114 
CreateRenderModifier() const115 std::shared_ptr<RSRenderModifier> RSBehindWindowFilterRadiusModifier::CreateRenderModifier() const
116 {
117     auto renderProperty = GetRenderProperty();
118     auto renderModifier = std::make_shared<RSBehindWindowFilterRadiusRenderModifier>(renderProperty);
119     return renderModifier;
120 }
121 
RSBehindWindowFilterSaturationModifier(const std::shared_ptr<RSPropertyBase> & property)122 RSBehindWindowFilterSaturationModifier::RSBehindWindowFilterSaturationModifier(
123     const std::shared_ptr<RSPropertyBase>& property) : RSBackgroundModifier(property,
124     RSModifierType::BEHIND_WINDOW_FILTER_SATURATION)
125 {
126     property_->SetThresholdType(ThresholdType::COARSE);
127 }
128 
GetModifierType() const129 RSModifierType RSBehindWindowFilterSaturationModifier::GetModifierType() const
130 {
131     return RSModifierType::BEHIND_WINDOW_FILTER_SATURATION;
132 }
133 
CreateRenderModifier() const134 std::shared_ptr<RSRenderModifier> RSBehindWindowFilterSaturationModifier::CreateRenderModifier() const
135 {
136     auto renderProperty = GetRenderProperty();
137     auto renderModifier = std::make_shared<RSBehindWindowFilterSaturationRenderModifier>(renderProperty);
138     return renderModifier;
139 }
140 
RSBehindWindowFilterBrightnessModifier(const std::shared_ptr<RSPropertyBase> & property)141 RSBehindWindowFilterBrightnessModifier::RSBehindWindowFilterBrightnessModifier(
142     const std::shared_ptr<RSPropertyBase>& property) : RSBackgroundModifier(property,
143     RSModifierType::BEHIND_WINDOW_FILTER_BRIGHTNESS)
144 {
145     property_->SetThresholdType(ThresholdType::COARSE);
146 }
147 
GetModifierType() const148 RSModifierType RSBehindWindowFilterBrightnessModifier::GetModifierType() const
149 {
150     return RSModifierType::BEHIND_WINDOW_FILTER_BRIGHTNESS;
151 }
152 
CreateRenderModifier() const153 std::shared_ptr<RSRenderModifier> RSBehindWindowFilterBrightnessModifier::CreateRenderModifier() const
154 {
155     auto renderProperty = GetRenderProperty();
156     auto renderModifier = std::make_shared<RSBehindWindowFilterBrightnessRenderModifier>(renderProperty);
157     return renderModifier;
158 }
159 
RSBehindWindowFilterMaskColorModifier(const std::shared_ptr<RSPropertyBase> & property)160 RSBehindWindowFilterMaskColorModifier::RSBehindWindowFilterMaskColorModifier(
161     const std::shared_ptr<RSPropertyBase>& property) : RSBackgroundModifier(property,
162     RSModifierType::BEHIND_WINDOW_FILTER_MASK_COLOR)
163 {
164     property_->SetThresholdType(ThresholdType::COLOR);
165 }
166 
GetModifierType() const167 RSModifierType RSBehindWindowFilterMaskColorModifier::GetModifierType() const
168 {
169     return RSModifierType::BEHIND_WINDOW_FILTER_MASK_COLOR;
170 }
171 
CreateRenderModifier() const172 std::shared_ptr<RSRenderModifier> RSBehindWindowFilterMaskColorModifier::CreateRenderModifier() const
173 {
174     auto renderProperty = GetRenderProperty();
175     auto renderModifier = std::make_shared<RSBehindWindowFilterMaskColorRenderModifier>(renderProperty);
176     return renderModifier;
177 }
178 
Apply(const std::shared_ptr<RSObjAbsGeometry> & geometry)179 void RSBoundsModifier::Apply(const std::shared_ptr<RSObjAbsGeometry>& geometry)
180 {
181     auto value = std::static_pointer_cast<RSProperty<Vector4f>>(property_)->Get();
182     geometry->SetRect(value.x_, value.y_, value.z_, value.w_);
183 }
184 
Apply(const std::shared_ptr<RSObjAbsGeometry> & geometry)185 void RSBoundsSizeModifier::Apply(const std::shared_ptr<RSObjAbsGeometry>& geometry)
186 {
187     auto value = std::static_pointer_cast<RSProperty<Vector2f>>(property_)->Get();
188     geometry->SetSize(value.x_, value.y_);
189 }
190 
Apply(const std::shared_ptr<RSObjAbsGeometry> & geometry)191 void RSBoundsPositionModifier::Apply(const std::shared_ptr<RSObjAbsGeometry>& geometry)
192 {
193     auto value = std::static_pointer_cast<RSProperty<Vector2f>>(property_)->Get();
194     geometry->SetPosition(value.x_, value.y_);
195 }
196 
Apply(const std::shared_ptr<RSObjAbsGeometry> & geometry)197 void RSPivotModifier::Apply(const std::shared_ptr<RSObjAbsGeometry>& geometry)
198 {
199     auto value = std::static_pointer_cast<RSProperty<Vector2f>>(property_)->Get();
200     geometry->SetPivot(value.x_, value.y_);
201 }
202 
Apply(const std::shared_ptr<RSObjAbsGeometry> & geometry)203 void RSPivotZModifier::Apply(const std::shared_ptr<RSObjAbsGeometry>& geometry)
204 {
205     auto value = std::static_pointer_cast<RSProperty<float>>(property_)->Get();
206     geometry->SetPivotZ(value);
207 }
208 
Apply(const std::shared_ptr<RSObjAbsGeometry> & geometry)209 void RSQuaternionModifier::Apply(const std::shared_ptr<RSObjAbsGeometry>& geometry)
210 {
211     auto value = std::static_pointer_cast<RSProperty<Quaternion>>(property_)->Get();
212     geometry->SetQuaternion(value);
213 }
214 
Apply(const std::shared_ptr<RSObjAbsGeometry> & geometry)215 void RSRotationModifier::Apply(const std::shared_ptr<RSObjAbsGeometry>& geometry)
216 {
217     auto value = std::static_pointer_cast<RSProperty<float>>(property_)->Get();
218     value += geometry->GetRotation();
219     geometry->SetRotation(value);
220 }
221 
Apply(const std::shared_ptr<RSObjAbsGeometry> & geometry)222 void RSRotationXModifier::Apply(const std::shared_ptr<RSObjAbsGeometry>& geometry)
223 {
224     auto value = std::static_pointer_cast<RSProperty<float>>(property_)->Get();
225     value += geometry->GetRotationX();
226     geometry->SetRotationX(value);
227 }
228 
Apply(const std::shared_ptr<RSObjAbsGeometry> & geometry)229 void RSRotationYModifier::Apply(const std::shared_ptr<RSObjAbsGeometry>& geometry)
230 {
231     auto value = std::static_pointer_cast<RSProperty<float>>(property_)->Get();
232     value += geometry->GetRotationY();
233     geometry->SetRotationY(value);
234 }
235 
Apply(const std::shared_ptr<RSObjAbsGeometry> & geometry)236 void RSCameraDistanceModifier::Apply(const std::shared_ptr<RSObjAbsGeometry>& geometry)
237 {
238     auto value = std::static_pointer_cast<RSProperty<float>>(property_)->Get();
239     geometry->SetCameraDistance(value);
240 }
241 
Apply(const std::shared_ptr<RSObjAbsGeometry> & geometry)242 void RSScaleModifier::Apply(const std::shared_ptr<RSObjAbsGeometry>& geometry)
243 {
244     auto value = std::static_pointer_cast<RSProperty<Vector2f>>(property_)->Get();
245     value *= Vector2f(geometry->GetScaleX(), geometry->GetScaleY());
246     geometry->SetScale(value.x_, value.y_);
247 }
248 
Apply(const std::shared_ptr<RSObjAbsGeometry> & geometry)249 void RSScaleZModifier::Apply(const std::shared_ptr<RSObjAbsGeometry>& geometry)
250 {
251     auto value = std::static_pointer_cast<RSProperty<float>>(property_)->Get();
252     value *= geometry->GetScaleZ();
253     geometry->SetScaleZ(value);
254 }
255 
Apply(const std::shared_ptr<RSObjAbsGeometry> & geometry)256 void RSSkewModifier::Apply(const std::shared_ptr<RSObjAbsGeometry>& geometry)
257 {
258     auto value = std::static_pointer_cast<RSProperty<Vector3f>>(property_)->Get();
259     value += Vector3f(geometry->GetSkewX(), geometry->GetSkewY(), geometry->GetSkewZ());
260     geometry->SetSkew(value.x_, value.y_, value.z_);
261 }
262 
Apply(const std::shared_ptr<RSObjAbsGeometry> & geometry)263 void RSPerspModifier::Apply(const std::shared_ptr<RSObjAbsGeometry>& geometry)
264 {
265     auto value = std::static_pointer_cast<RSProperty<Vector4f>>(property_)->Get();
266     value = Vector4f(geometry->GetPerspX(), geometry->GetPerspY(), geometry->GetPerspZ(), geometry->GetPerspW());
267     geometry->SetPersp(value.x_, value.y_, value.z_, value.w_);
268 }
269 
Apply(const std::shared_ptr<RSObjAbsGeometry> & geometry)270 void RSTranslateModifier::Apply(const std::shared_ptr<RSObjAbsGeometry>& geometry)
271 {
272     auto value = std::static_pointer_cast<RSProperty<Vector2f>>(property_)->Get();
273     value += Vector2f(geometry->GetTranslateX(), geometry->GetTranslateY());
274     geometry->SetTranslateX(value.x_);
275     geometry->SetTranslateY(value.y_);
276 }
277 
Apply(const std::shared_ptr<RSObjAbsGeometry> & geometry)278 void RSTranslateZModifier::Apply(const std::shared_ptr<RSObjAbsGeometry>& geometry)
279 {
280     auto value = std::static_pointer_cast<RSProperty<float>>(property_)->Get();
281     value += geometry->GetTranslateZ();
282     geometry->SetTranslateZ(value);
283 }
284 
285 #define DECLARE_ANIMATABLE_MODIFIER_CREATE(MODIFIER_NAME)                                          \
286     std::shared_ptr<RSRenderModifier> RS##MODIFIER_NAME##Modifier::CreateRenderModifier() const    \
287     {                                                                                              \
288         auto renderProperty = GetRenderProperty();                                                 \
289         auto renderModifier = std::make_shared<RS##MODIFIER_NAME##RenderModifier>(renderProperty); \
290         return renderModifier;                                                                     \
291     }
292 
293 #define DECLARE_ANIMATABLE_MODIFIER(MODIFIER_NAME, TYPE, MODIFIER_TYPE, DELTA_OP, MODIFIER_TIER, THRESHOLD_TYPE) \
294     RS##MODIFIER_NAME##Modifier::RS##MODIFIER_NAME##Modifier(const std::shared_ptr<RSPropertyBase>& property)    \
295         : RS##MODIFIER_TIER##Modifier(property, RSModifierType::MODIFIER_TYPE)                                   \
296     {                                                                                                            \
297         property_->SetThresholdType(ThresholdType::THRESHOLD_TYPE);                                              \
298     }                                                                                                            \
299     RSModifierType RS##MODIFIER_NAME##Modifier::GetModifierType() const                                          \
300     {                                                                                                            \
301         return RSModifierType::MODIFIER_TYPE;                                                                    \
302     }                                                                                                            \
303     DECLARE_ANIMATABLE_MODIFIER_CREATE(MODIFIER_NAME)
304 
305 #define DECLARE_NOANIMATABLE_MODIFIER_CREATE(MODIFIER_NAME)                                        \
306     std::shared_ptr<RSRenderModifier> RS##MODIFIER_NAME##Modifier::CreateRenderModifier() const    \
307     {                                                                                              \
308         auto renderProperty = GetRenderProperty();                                                 \
309         auto renderModifier = std::make_shared<RS##MODIFIER_NAME##RenderModifier>(renderProperty); \
310         return renderModifier;                                                                     \
311     }
312 
313 #define DECLARE_NOANIMATABLE_MODIFIER(MODIFIER_NAME, TYPE, MODIFIER_TYPE, MODIFIER_TIER)                            \
314     RS##MODIFIER_NAME##Modifier::RS##MODIFIER_NAME##Modifier(const std::shared_ptr<RSPropertyBase>& property)       \
315         : RS##MODIFIER_TIER##Modifier(property, RSModifierType::MODIFIER_TYPE)                                      \
316     {}                                                                                                              \
317     RSModifierType RS##MODIFIER_NAME##Modifier::GetModifierType() const                                             \
318     {                                                                                                               \
319         return RSModifierType::MODIFIER_TYPE;                                                                       \
320     }                                                                                                               \
321     DECLARE_NOANIMATABLE_MODIFIER_CREATE(MODIFIER_NAME)
322 
323 #include "modifier/rs_modifiers_def.in"
324 
325 #undef DECLARE_ANIMATABLE_MODIFIER
326 #undef DECLARE_NOANIMATABLE_MODIFIER
327 } // namespace Rosen
328 } // namespace OHOS
329