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 } // namespace OHOS::Ace::NG