• 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 
Apply(const std::shared_ptr<RSObjAbsGeometry> & geometry)53 void RSBoundsModifier::Apply(const std::shared_ptr<RSObjAbsGeometry>& geometry)
54 {
55     auto value = std::static_pointer_cast<RSProperty<Vector4f>>(property_)->Get();
56     geometry->SetRect(value.x_, value.y_, value.z_, value.w_);
57 }
58 
Apply(const std::shared_ptr<RSObjAbsGeometry> & geometry)59 void RSBoundsSizeModifier::Apply(const std::shared_ptr<RSObjAbsGeometry>& geometry)
60 {
61     auto value = std::static_pointer_cast<RSProperty<Vector2f>>(property_)->Get();
62     geometry->SetSize(value.x_, value.y_);
63 }
64 
Apply(const std::shared_ptr<RSObjAbsGeometry> & geometry)65 void RSBoundsPositionModifier::Apply(const std::shared_ptr<RSObjAbsGeometry>& geometry)
66 {
67     auto value = std::static_pointer_cast<RSProperty<Vector2f>>(property_)->Get();
68     geometry->SetPosition(value.x_, value.y_);
69 }
70 
Apply(const std::shared_ptr<RSObjAbsGeometry> & geometry)71 void RSPivotModifier::Apply(const std::shared_ptr<RSObjAbsGeometry>& geometry)
72 {
73     auto value = std::static_pointer_cast<RSProperty<Vector2f>>(property_)->Get();
74     geometry->SetPivot(value.x_, value.y_);
75 }
76 
Apply(const std::shared_ptr<RSObjAbsGeometry> & geometry)77 void RSPivotZModifier::Apply(const std::shared_ptr<RSObjAbsGeometry>& geometry)
78 {
79     auto value = std::static_pointer_cast<RSProperty<float>>(property_)->Get();
80     geometry->SetPivotZ(value);
81 }
82 
Apply(const std::shared_ptr<RSObjAbsGeometry> & geometry)83 void RSQuaternionModifier::Apply(const std::shared_ptr<RSObjAbsGeometry>& geometry)
84 {
85     auto value = std::static_pointer_cast<RSProperty<Quaternion>>(property_)->Get();
86     geometry->SetQuaternion(value);
87 }
88 
Apply(const std::shared_ptr<RSObjAbsGeometry> & geometry)89 void RSRotationModifier::Apply(const std::shared_ptr<RSObjAbsGeometry>& geometry)
90 {
91     auto value = std::static_pointer_cast<RSProperty<float>>(property_)->Get();
92     value += geometry->GetRotation();
93     geometry->SetRotation(value);
94 }
95 
Apply(const std::shared_ptr<RSObjAbsGeometry> & geometry)96 void RSRotationXModifier::Apply(const std::shared_ptr<RSObjAbsGeometry>& geometry)
97 {
98     auto value = std::static_pointer_cast<RSProperty<float>>(property_)->Get();
99     value += geometry->GetRotationX();
100     geometry->SetRotationX(value);
101 }
102 
Apply(const std::shared_ptr<RSObjAbsGeometry> & geometry)103 void RSRotationYModifier::Apply(const std::shared_ptr<RSObjAbsGeometry>& geometry)
104 {
105     auto value = std::static_pointer_cast<RSProperty<float>>(property_)->Get();
106     value += geometry->GetRotationY();
107     geometry->SetRotationY(value);
108 }
109 
Apply(const std::shared_ptr<RSObjAbsGeometry> & geometry)110 void RSCameraDistanceModifier::Apply(const std::shared_ptr<RSObjAbsGeometry>& geometry)
111 {
112     auto value = std::static_pointer_cast<RSProperty<float>>(property_)->Get();
113     geometry->SetCameraDistance(value);
114 }
115 
Apply(const std::shared_ptr<RSObjAbsGeometry> & geometry)116 void RSScaleModifier::Apply(const std::shared_ptr<RSObjAbsGeometry>& geometry)
117 {
118     auto value = std::static_pointer_cast<RSProperty<Vector2f>>(property_)->Get();
119     value *= Vector2f(geometry->GetScaleX(), geometry->GetScaleY());
120     geometry->SetScale(value.x_, value.y_);
121 }
122 
Apply(const std::shared_ptr<RSObjAbsGeometry> & geometry)123 void RSSkewModifier::Apply(const std::shared_ptr<RSObjAbsGeometry>& geometry)
124 {
125     auto value = std::static_pointer_cast<RSProperty<Vector2f>>(property_)->Get();
126     value += Vector2f(geometry->GetSkewX(), geometry->GetSkewY());
127     geometry->SetSkew(value.x_, value.y_);
128 }
129 
Apply(const std::shared_ptr<RSObjAbsGeometry> & geometry)130 void RSPerspModifier::Apply(const std::shared_ptr<RSObjAbsGeometry>& geometry)
131 {
132     auto value = std::static_pointer_cast<RSProperty<Vector2f>>(property_)->Get();
133     value += Vector2f(geometry->GetPerspX(), geometry->GetPerspY());
134     geometry->SetPersp(value.x_, value.y_);
135 }
136 
Apply(const std::shared_ptr<RSObjAbsGeometry> & geometry)137 void RSTranslateModifier::Apply(const std::shared_ptr<RSObjAbsGeometry>& geometry)
138 {
139     auto value = std::static_pointer_cast<RSProperty<Vector2f>>(property_)->Get();
140     value += Vector2f(geometry->GetTranslateX(), geometry->GetTranslateY());
141     geometry->SetTranslateX(value.x_);
142     geometry->SetTranslateY(value.y_);
143 }
144 
Apply(const std::shared_ptr<RSObjAbsGeometry> & geometry)145 void RSTranslateZModifier::Apply(const std::shared_ptr<RSObjAbsGeometry>& geometry)
146 {
147     auto value = std::static_pointer_cast<RSProperty<float>>(property_)->Get();
148     value += geometry->GetTranslateZ();
149     geometry->SetTranslateZ(value);
150 }
151 
152 #define DECLARE_ANIMATABLE_MODIFIER_CREATE(MODIFIER_NAME)                                          \
153     std::shared_ptr<RSRenderModifier> RS##MODIFIER_NAME##Modifier::CreateRenderModifier() const    \
154     {                                                                                              \
155         auto renderProperty = GetRenderProperty();                                                 \
156         auto renderModifier = std::make_shared<RS##MODIFIER_NAME##RenderModifier>(renderProperty); \
157         return renderModifier;                                                                     \
158     }
159 
160 #define DECLARE_ANIMATABLE_MODIFIER(MODIFIER_NAME, TYPE, MODIFIER_TYPE, DELTA_OP, MODIFIER_TIER, THRESHOLD_TYPE) \
161     RS##MODIFIER_NAME##Modifier::RS##MODIFIER_NAME##Modifier(const std::shared_ptr<RSPropertyBase>& property)    \
162         : RS##MODIFIER_TIER##Modifier(property, RSModifierType::MODIFIER_TYPE)                                   \
163     {                                                                                                            \
164         property_->SetThresholdType(ThresholdType::THRESHOLD_TYPE);                                              \
165     }                                                                                                            \
166     RSModifierType RS##MODIFIER_NAME##Modifier::GetModifierType() const                                          \
167     {                                                                                                            \
168         return RSModifierType::MODIFIER_TYPE;                                                                    \
169     }                                                                                                            \
170     DECLARE_ANIMATABLE_MODIFIER_CREATE(MODIFIER_NAME)
171 
172 #define DECLARE_NOANIMATABLE_MODIFIER_CREATE(MODIFIER_NAME)                                        \
173     std::shared_ptr<RSRenderModifier> RS##MODIFIER_NAME##Modifier::CreateRenderModifier() const    \
174     {                                                                                              \
175         auto renderProperty = GetRenderProperty();                                                 \
176         auto renderModifier = std::make_shared<RS##MODIFIER_NAME##RenderModifier>(renderProperty); \
177         return renderModifier;                                                                     \
178     }
179 
180 #define DECLARE_NOANIMATABLE_MODIFIER(MODIFIER_NAME, TYPE, MODIFIER_TYPE, MODIFIER_TIER)                            \
181     RS##MODIFIER_NAME##Modifier::RS##MODIFIER_NAME##Modifier(const std::shared_ptr<RSPropertyBase>& property)       \
182         : RS##MODIFIER_TIER##Modifier(property, RSModifierType::MODIFIER_TYPE)                                      \
183     {}                                                                                                              \
184     RSModifierType RS##MODIFIER_NAME##Modifier::GetModifierType() const                                             \
185     {                                                                                                               \
186         return RSModifierType::MODIFIER_TYPE;                                                                       \
187     }                                                                                                               \
188     DECLARE_NOANIMATABLE_MODIFIER_CREATE(MODIFIER_NAME)
189 
190 #include "modifier/rs_modifiers_def.in"
191 
192 #undef DECLARE_ANIMATABLE_MODIFIER
193 #undef DECLARE_NOANIMATABLE_MODIFIER
194 } // namespace Rosen
195 } // namespace OHOS
196