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
AddOrChangeSkewModifier(std::shared_ptr<Rosen::RSNode> & rsNode,std::shared_ptr<Rosen::RSSkewModifier> & modifier,std::shared_ptr<Rosen::RSAnimatableProperty<Rosen::Vector2f>> & property,const Rosen::Vector2f & value)44 void AddOrChangeSkewModifier(std::shared_ptr<Rosen::RSNode>& rsNode,
45 std::shared_ptr<Rosen::RSSkewModifier>& modifier,
46 std::shared_ptr<Rosen::RSAnimatableProperty<Rosen::Vector2f>>& property, const Rosen::Vector2f& value)
47 {
48 bool isCreate = CreateOrSetModifierValue(property, value);
49 if (isCreate) {
50 CHECK_NULL_VOID(rsNode);
51 modifier = std::make_shared<Rosen::RSSkewModifier>(property);
52 rsNode->AddModifier(modifier);
53 }
54 }
55
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)56 void AddOrChangePivotModifier(std::shared_ptr<Rosen::RSNode>& rsNode,
57 std::shared_ptr<Rosen::RSPivotModifier>& modifier,
58 std::shared_ptr<Rosen::RSAnimatableProperty<Rosen::Vector2f>>& property, const Rosen::Vector2f& value)
59 {
60 bool isCreate = CreateOrSetModifierValue(property, value);
61 if (isCreate) {
62 CHECK_NULL_VOID(rsNode);
63 modifier = std::make_shared<Rosen::RSPivotModifier>(property);
64 rsNode->AddModifier(modifier);
65 }
66 }
67
AddOrChangeTranslateZModifier(std::shared_ptr<Rosen::RSNode> & rsNode,std::shared_ptr<Rosen::RSTranslateZModifier> & modifier,std::shared_ptr<Rosen::RSAnimatableProperty<float>> & property,const float value)68 void AddOrChangeTranslateZModifier(std::shared_ptr<Rosen::RSNode>& rsNode,
69 std::shared_ptr<Rosen::RSTranslateZModifier>& modifier,
70 std::shared_ptr<Rosen::RSAnimatableProperty<float>>& property, const float value)
71 {
72 bool isCreate = CreateOrSetModifierValue(property, value);
73 if (isCreate) {
74 CHECK_NULL_VOID(rsNode);
75 modifier = std::make_shared<Rosen::RSTranslateZModifier>(property);
76 rsNode->AddModifier(modifier);
77 }
78 }
79
AddOrChangePerspectiveModifier(std::shared_ptr<Rosen::RSNode> & rsNode,std::shared_ptr<Rosen::RSPerspModifier> & modifier,std::shared_ptr<Rosen::RSAnimatableProperty<Rosen::Vector2f>> & property,const Rosen::Vector2f & value)80 void AddOrChangePerspectiveModifier(std::shared_ptr<Rosen::RSNode>& rsNode,
81 std::shared_ptr<Rosen::RSPerspModifier>& modifier,
82 std::shared_ptr<Rosen::RSAnimatableProperty<Rosen::Vector2f>>& property, const Rosen::Vector2f& value)
83 {
84 bool isCreate = CreateOrSetModifierValue(property, value);
85 if (isCreate) {
86 CHECK_NULL_VOID(rsNode);
87 modifier = std::make_shared<Rosen::RSPerspModifier>(property);
88 rsNode->AddModifier(modifier);
89 }
90 }
91
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)92 void AddOrChangeTranslateModifier(std::shared_ptr<Rosen::RSNode>& rsNode,
93 std::shared_ptr<Rosen::RSTranslateModifier>& modifier,
94 std::shared_ptr<Rosen::RSAnimatableProperty<Rosen::Vector2f>>& property, const Rosen::Vector2f& value)
95 {
96 bool isCreate = CreateOrSetModifierValue(property, value);
97 if (isCreate) {
98 CHECK_NULL_VOID(rsNode);
99 modifier = std::make_shared<Rosen::RSTranslateModifier>(property);
100 rsNode->AddModifier(modifier);
101 }
102 }
103
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)104 void AddOrChangeQuaternionModifier(std::shared_ptr<Rosen::RSNode>& rsNode,
105 std::shared_ptr<Rosen::RSQuaternionModifier>& modifier,
106 std::shared_ptr<Rosen::RSAnimatableProperty<Rosen::Quaternion>>& property, const Rosen::Quaternion& value)
107 {
108 bool isCreate = CreateOrSetModifierValue(property, value);
109 if (isCreate) {
110 CHECK_NULL_VOID(rsNode);
111 modifier = std::make_shared<Rosen::RSQuaternionModifier>(property);
112 rsNode->AddModifier(modifier);
113 }
114 }
115
AddOrChangeRadiusModifier(std::shared_ptr<Rosen::RSNode> & rsNode,std::shared_ptr<Rosen::RSBehindWindowFilterRadiusModifier> & modifier,std::shared_ptr<Rosen::RSAnimatableProperty<float>> & property,const float & value)116 void WindowBlurModifier::AddOrChangeRadiusModifier(std::shared_ptr<Rosen::RSNode>& rsNode,
117 std::shared_ptr<Rosen::RSBehindWindowFilterRadiusModifier>& modifier,
118 std::shared_ptr<Rosen::RSAnimatableProperty<float>>& property, const float& value)
119 {
120 bool isCreate = CreateOrSetModifierValue(property, value);
121 if (isCreate) {
122 CHECK_NULL_VOID(rsNode);
123 modifier = std::make_shared<Rosen::RSBehindWindowFilterRadiusModifier>(property);
124 rsNode->AddModifier(modifier);
125 }
126 }
AddOrChangeSaturationModifier(std::shared_ptr<Rosen::RSNode> & rsNode,std::shared_ptr<Rosen::RSBehindWindowFilterSaturationModifier> & modifier,std::shared_ptr<Rosen::RSAnimatableProperty<float>> & property,const float & value)127 void WindowBlurModifier::AddOrChangeSaturationModifier(std::shared_ptr<Rosen::RSNode>& rsNode,
128 std::shared_ptr<Rosen::RSBehindWindowFilterSaturationModifier>& modifier,
129 std::shared_ptr<Rosen::RSAnimatableProperty<float>>& property, const float& value)
130 {
131 bool isCreate = CreateOrSetModifierValue(property, value);
132 if (isCreate) {
133 CHECK_NULL_VOID(rsNode);
134 modifier = std::make_shared<Rosen::RSBehindWindowFilterSaturationModifier>(property);
135 rsNode->AddModifier(modifier);
136 }
137 }
AddOrChangeBrightnessModifier(std::shared_ptr<Rosen::RSNode> & rsNode,std::shared_ptr<Rosen::RSBehindWindowFilterBrightnessModifier> & modifier,std::shared_ptr<Rosen::RSAnimatableProperty<float>> & property,const float & value)138 void WindowBlurModifier::AddOrChangeBrightnessModifier(std::shared_ptr<Rosen::RSNode>& rsNode,
139 std::shared_ptr<Rosen::RSBehindWindowFilterBrightnessModifier>& modifier,
140 std::shared_ptr<Rosen::RSAnimatableProperty<float>>& property, const float& value)
141 {
142 bool isCreate = CreateOrSetModifierValue(property, value);
143 if (isCreate) {
144 CHECK_NULL_VOID(rsNode);
145 modifier = std::make_shared<Rosen::RSBehindWindowFilterBrightnessModifier>(property);
146 rsNode->AddModifier(modifier);
147 }
148 }
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)149 void WindowBlurModifier::AddOrChangeMaskColorModifier(std::shared_ptr<Rosen::RSNode>& rsNode,
150 std::shared_ptr<Rosen::RSBehindWindowFilterMaskColorModifier>& modifier,
151 std::shared_ptr<Rosen::RSAnimatableProperty<Rosen::RSColor>>& property, const Rosen::RSColor& value)
152 {
153 bool isCreate = CreateOrSetModifierValue(property, value);
154 if (isCreate) {
155 CHECK_NULL_VOID(rsNode);
156 modifier = std::make_shared<Rosen::RSBehindWindowFilterMaskColorModifier>(property);
157 rsNode->AddModifier(modifier);
158 }
159 }
160 } // namespace OHOS::Ace::NG