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 "core/components_ng/render/adapter/rosen_modifier_property.h"
17
18 #include "base/utils/utils.h"
19
20 namespace OHOS::Ace::NG {
21 template<typename T>
CreateOrSetModifierValue(std::shared_ptr<Rosen::RSAnimatableProperty<T>> & property,const T & value)22 bool CreateOrSetModifierValue(std::shared_ptr<Rosen::RSAnimatableProperty<T>>& property, const T& value)
23 {
24 if (property == nullptr) {
25 property = std::make_shared<Rosen::RSAnimatableProperty<T>>(value);
26 return true;
27 }
28 property->Set(value);
29 return false;
30 }
31
AddOrChangeScaleModifier(std::shared_ptr<Rosen::RSNode> & rsNode,std::shared_ptr<Rosen::RSScaleModifier> & modifier,std::shared_ptr<Rosen::RSAnimatableProperty<Rosen::Vector2f>> & property,const Rosen::Vector2f & value)32 void AddOrChangeScaleModifier(std::shared_ptr<Rosen::RSNode>& rsNode,
33 std::shared_ptr<Rosen::RSScaleModifier>& modifier,
34 std::shared_ptr<Rosen::RSAnimatableProperty<Rosen::Vector2f>>& property, const Rosen::Vector2f& value)
35 {
36 bool isCreate = CreateOrSetModifierValue(property, value);
37 if (isCreate) {
38 CHECK_NULL_VOID(rsNode);
39 modifier = std::make_shared<Rosen::RSScaleModifier>(property);
40 rsNode->AddModifier(modifier);
41 }
42 }
43
AddOrChangeScaleZModifier(std::shared_ptr<Rosen::RSNode> & rsNode,std::shared_ptr<Rosen::RSScaleZModifier> & modifier,std::shared_ptr<Rosen::RSAnimatableProperty<float>> & property,const float value)44 void AddOrChangeScaleZModifier(std::shared_ptr<Rosen::RSNode>& rsNode,
45 std::shared_ptr<Rosen::RSScaleZModifier>& modifier,
46 std::shared_ptr<Rosen::RSAnimatableProperty<float>>& property, const float value)
47 {
48 bool isCreate = CreateOrSetModifierValue(property, value);
49 if (isCreate) {
50 CHECK_NULL_VOID(rsNode);
51 modifier = std::make_shared<Rosen::RSScaleZModifier>(property);
52 rsNode->AddModifier(modifier);
53 }
54 }
55
AddOrChangeSkewModifier(std::shared_ptr<Rosen::RSNode> & rsNode,std::shared_ptr<Rosen::RSSkewModifier> & modifier,std::shared_ptr<Rosen::RSAnimatableProperty<Rosen::Vector3f>> & property,const Rosen::Vector3f & value)56 void AddOrChangeSkewModifier(std::shared_ptr<Rosen::RSNode>& rsNode,
57 std::shared_ptr<Rosen::RSSkewModifier>& modifier,
58 std::shared_ptr<Rosen::RSAnimatableProperty<Rosen::Vector3f>>& property, const Rosen::Vector3f& value)
59 {
60 bool isCreate = CreateOrSetModifierValue(property, value);
61 if (isCreate) {
62 CHECK_NULL_VOID(rsNode);
63 modifier = std::make_shared<Rosen::RSSkewModifier>(property);
64 rsNode->AddModifier(modifier);
65 }
66 }
67
AddOrChangePivotModifier(std::shared_ptr<Rosen::RSNode> & rsNode,std::shared_ptr<Rosen::RSPivotModifier> & modifier,std::shared_ptr<Rosen::RSAnimatableProperty<Rosen::Vector2f>> & property,const Rosen::Vector2f & value)68 void AddOrChangePivotModifier(std::shared_ptr<Rosen::RSNode>& rsNode,
69 std::shared_ptr<Rosen::RSPivotModifier>& modifier,
70 std::shared_ptr<Rosen::RSAnimatableProperty<Rosen::Vector2f>>& property, const Rosen::Vector2f& value)
71 {
72 bool isCreate = CreateOrSetModifierValue(property, value);
73 if (isCreate) {
74 CHECK_NULL_VOID(rsNode);
75 modifier = std::make_shared<Rosen::RSPivotModifier>(property);
76 rsNode->AddModifier(modifier);
77 }
78 }
79
AddOrChangeTranslateZModifier(std::shared_ptr<Rosen::RSNode> & rsNode,std::shared_ptr<Rosen::RSTranslateZModifier> & modifier,std::shared_ptr<Rosen::RSAnimatableProperty<float>> & property,const float value)80 void AddOrChangeTranslateZModifier(std::shared_ptr<Rosen::RSNode>& rsNode,
81 std::shared_ptr<Rosen::RSTranslateZModifier>& modifier,
82 std::shared_ptr<Rosen::RSAnimatableProperty<float>>& property, const float value)
83 {
84 bool isCreate = CreateOrSetModifierValue(property, value);
85 if (isCreate) {
86 CHECK_NULL_VOID(rsNode);
87 modifier = std::make_shared<Rosen::RSTranslateZModifier>(property);
88 rsNode->AddModifier(modifier);
89 }
90 }
91
AddOrChangePerspectiveModifier(std::shared_ptr<Rosen::RSNode> & rsNode,std::shared_ptr<Rosen::RSPerspModifier> & modifier,std::shared_ptr<Rosen::RSAnimatableProperty<Rosen::Vector4f>> & property,const Rosen::Vector4f & value)92 void AddOrChangePerspectiveModifier(std::shared_ptr<Rosen::RSNode>& rsNode,
93 std::shared_ptr<Rosen::RSPerspModifier>& modifier,
94 std::shared_ptr<Rosen::RSAnimatableProperty<Rosen::Vector4f>>& property, const Rosen::Vector4f& value)
95 {
96 bool isCreate = CreateOrSetModifierValue(property, value);
97 if (isCreate) {
98 CHECK_NULL_VOID(rsNode);
99 modifier = std::make_shared<Rosen::RSPerspModifier>(property);
100 rsNode->AddModifier(modifier);
101 }
102 }
103
AddOrChangeTranslateModifier(std::shared_ptr<Rosen::RSNode> & rsNode,std::shared_ptr<Rosen::RSTranslateModifier> & modifier,std::shared_ptr<Rosen::RSAnimatableProperty<Rosen::Vector2f>> & property,const Rosen::Vector2f & value)104 void AddOrChangeTranslateModifier(std::shared_ptr<Rosen::RSNode>& rsNode,
105 std::shared_ptr<Rosen::RSTranslateModifier>& modifier,
106 std::shared_ptr<Rosen::RSAnimatableProperty<Rosen::Vector2f>>& property, const Rosen::Vector2f& value)
107 {
108 bool isCreate = CreateOrSetModifierValue(property, value);
109 if (isCreate) {
110 CHECK_NULL_VOID(rsNode);
111 modifier = std::make_shared<Rosen::RSTranslateModifier>(property);
112 rsNode->AddModifier(modifier);
113 }
114 }
115
AddOrChangeQuaternionModifier(std::shared_ptr<Rosen::RSNode> & rsNode,std::shared_ptr<Rosen::RSQuaternionModifier> & modifier,std::shared_ptr<Rosen::RSAnimatableProperty<Rosen::Quaternion>> & property,const Rosen::Quaternion & value)116 void AddOrChangeQuaternionModifier(std::shared_ptr<Rosen::RSNode>& rsNode,
117 std::shared_ptr<Rosen::RSQuaternionModifier>& modifier,
118 std::shared_ptr<Rosen::RSAnimatableProperty<Rosen::Quaternion>>& property, const Rosen::Quaternion& value)
119 {
120 bool isCreate = CreateOrSetModifierValue(property, value);
121 if (isCreate) {
122 CHECK_NULL_VOID(rsNode);
123 modifier = std::make_shared<Rosen::RSQuaternionModifier>(property);
124 rsNode->AddModifier(modifier);
125 }
126 }
127
AddOrChangeRadiusModifier(std::shared_ptr<Rosen::RSNode> & rsNode,std::shared_ptr<Rosen::RSBehindWindowFilterRadiusModifier> & modifier,std::shared_ptr<Rosen::RSAnimatableProperty<float>> & property,const float & value)128 void WindowBlurModifier::AddOrChangeRadiusModifier(std::shared_ptr<Rosen::RSNode>& rsNode,
129 std::shared_ptr<Rosen::RSBehindWindowFilterRadiusModifier>& modifier,
130 std::shared_ptr<Rosen::RSAnimatableProperty<float>>& property, const float& value)
131 {
132 bool isCreate = CreateOrSetModifierValue(property, value);
133 if (isCreate) {
134 CHECK_NULL_VOID(rsNode);
135 modifier = std::make_shared<Rosen::RSBehindWindowFilterRadiusModifier>(property);
136 rsNode->AddModifier(modifier);
137 }
138 }
AddOrChangeSaturationModifier(std::shared_ptr<Rosen::RSNode> & rsNode,std::shared_ptr<Rosen::RSBehindWindowFilterSaturationModifier> & modifier,std::shared_ptr<Rosen::RSAnimatableProperty<float>> & property,const float & value)139 void WindowBlurModifier::AddOrChangeSaturationModifier(std::shared_ptr<Rosen::RSNode>& rsNode,
140 std::shared_ptr<Rosen::RSBehindWindowFilterSaturationModifier>& modifier,
141 std::shared_ptr<Rosen::RSAnimatableProperty<float>>& property, const float& value)
142 {
143 bool isCreate = CreateOrSetModifierValue(property, value);
144 if (isCreate) {
145 CHECK_NULL_VOID(rsNode);
146 modifier = std::make_shared<Rosen::RSBehindWindowFilterSaturationModifier>(property);
147 rsNode->AddModifier(modifier);
148 }
149 }
AddOrChangeBrightnessModifier(std::shared_ptr<Rosen::RSNode> & rsNode,std::shared_ptr<Rosen::RSBehindWindowFilterBrightnessModifier> & modifier,std::shared_ptr<Rosen::RSAnimatableProperty<float>> & property,const float & value)150 void WindowBlurModifier::AddOrChangeBrightnessModifier(std::shared_ptr<Rosen::RSNode>& rsNode,
151 std::shared_ptr<Rosen::RSBehindWindowFilterBrightnessModifier>& modifier,
152 std::shared_ptr<Rosen::RSAnimatableProperty<float>>& property, const float& value)
153 {
154 bool isCreate = CreateOrSetModifierValue(property, value);
155 if (isCreate) {
156 CHECK_NULL_VOID(rsNode);
157 modifier = std::make_shared<Rosen::RSBehindWindowFilterBrightnessModifier>(property);
158 rsNode->AddModifier(modifier);
159 }
160 }
AddOrChangeMaskColorModifier(std::shared_ptr<Rosen::RSNode> & rsNode,std::shared_ptr<Rosen::RSBehindWindowFilterMaskColorModifier> & modifier,std::shared_ptr<Rosen::RSAnimatableProperty<Rosen::RSColor>> & property,const Rosen::RSColor & value)161 void WindowBlurModifier::AddOrChangeMaskColorModifier(std::shared_ptr<Rosen::RSNode>& rsNode,
162 std::shared_ptr<Rosen::RSBehindWindowFilterMaskColorModifier>& modifier,
163 std::shared_ptr<Rosen::RSAnimatableProperty<Rosen::RSColor>>& property, const Rosen::RSColor& value)
164 {
165 bool isCreate = CreateOrSetModifierValue(property, value);
166 if (isCreate) {
167 CHECK_NULL_VOID(rsNode);
168 modifier = std::make_shared<Rosen::RSBehindWindowFilterMaskColorModifier>(property);
169 rsNode->AddModifier(modifier);
170 }
171 }
172 } // namespace OHOS::Ace::NG