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
AddOrChangeTranslateZModifier(std::shared_ptr<Rosen::RSNode> & rsNode,std::shared_ptr<Rosen::RSTranslateZModifier> & modifier,std::shared_ptr<Rosen::RSAnimatableProperty<float>> & property,const float value)44 void AddOrChangeTranslateZModifier(std::shared_ptr<Rosen::RSNode>& rsNode,
45 std::shared_ptr<Rosen::RSTranslateZModifier>& 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::RSTranslateZModifier>(property);
52 rsNode->AddModifier(modifier);
53 }
54 }
55
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)56 void AddOrChangeTranslateModifier(std::shared_ptr<Rosen::RSNode>& rsNode,
57 std::shared_ptr<Rosen::RSTranslateModifier>& 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::RSTranslateModifier>(property);
64 rsNode->AddModifier(modifier);
65 }
66 }
67
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)68 void AddOrChangeQuaternionModifier(std::shared_ptr<Rosen::RSNode>& rsNode,
69 std::shared_ptr<Rosen::RSQuaternionModifier>& modifier,
70 std::shared_ptr<Rosen::RSAnimatableProperty<Rosen::Quaternion>>& property, const Rosen::Quaternion& value)
71 {
72 bool isCreate = CreateOrSetModifierValue(property, value);
73 if (isCreate) {
74 CHECK_NULL_VOID(rsNode);
75 modifier = std::make_shared<Rosen::RSQuaternionModifier>(property);
76 rsNode->AddModifier(modifier);
77 }
78 }
79 } // namespace OHOS::Ace::NG