1 /*
2 * Copyright (c) 2024 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
17 #include "node/node_transition.h"
18
19 #include "base/utils/utils.h"
20
21 #ifdef __cplusplus
22 extern "C" {
23 #endif
24
OH_ArkUI_CreateOpacityTransitionEffect(float opacity)25 ArkUI_TransitionEffect* OH_ArkUI_CreateOpacityTransitionEffect(float opacity)
26 {
27 ArkUI_TransitionEffect* option = new ArkUI_TransitionEffect { ARKUI_TRANSITION_EFFECT_OPACITY };
28 option->translate = nullptr;
29 option->scale = nullptr;
30 option->rotate = nullptr;
31 option->appear = nullptr;
32 option->disappear = nullptr;
33 option->combine = nullptr;
34 option->animation = nullptr;
35 option->opacity = std::clamp(opacity, 0.0f, 1.0f);
36 return option;
37 }
38
OH_ArkUI_CreateTranslationTransitionEffect(ArkUI_TranslationOptions * translate)39 ArkUI_TransitionEffect* OH_ArkUI_CreateTranslationTransitionEffect(ArkUI_TranslationOptions* translate)
40 {
41 CHECK_NULL_RETURN(translate, nullptr);
42 ArkUI_TransitionEffect* option = new ArkUI_TransitionEffect { ARKUI_TRANSITION_EFFECT_TRANSLATE };
43 option->scale = nullptr;
44 option->rotate = nullptr;
45 option->appear = nullptr;
46 option->disappear = nullptr;
47 option->combine = nullptr;
48 option->animation = nullptr;
49 option->translate = translate;
50 return option;
51 }
52
OH_ArkUI_CreateScaleTransitionEffect(ArkUI_ScaleOptions * scale)53 ArkUI_TransitionEffect* OH_ArkUI_CreateScaleTransitionEffect(ArkUI_ScaleOptions* scale)
54 {
55 CHECK_NULL_RETURN(scale, nullptr);
56 ArkUI_TransitionEffect* option = new ArkUI_TransitionEffect { ARKUI_TRANSITION_EFFECT_SCALE };
57 option->translate = nullptr;
58 option->rotate = nullptr;
59 option->appear = nullptr;
60 option->disappear = nullptr;
61 option->combine = nullptr;
62 option->animation = nullptr;
63 option->scale = scale;
64 return option;
65 }
66
OH_ArkUI_CreateRotationTransitionEffect(ArkUI_RotationOptions * rotate)67 ArkUI_TransitionEffect* OH_ArkUI_CreateRotationTransitionEffect(ArkUI_RotationOptions* rotate)
68 {
69 CHECK_NULL_RETURN(rotate, nullptr);
70 ArkUI_TransitionEffect* option = new ArkUI_TransitionEffect { ARKUI_TRANSITION_EFFECT_ROTATE };
71 option->translate = nullptr;
72 option->scale = nullptr;
73 option->appear = nullptr;
74 option->disappear = nullptr;
75 option->combine = nullptr;
76 option->animation = nullptr;
77 option->rotate = rotate;
78 return option;
79 }
80
OH_ArkUI_CreateMovementTransitionEffect(ArkUI_TransitionEdge move)81 ArkUI_TransitionEffect* OH_ArkUI_CreateMovementTransitionEffect(ArkUI_TransitionEdge move)
82 {
83 if (move < ARKUI_TRANSITION_EDGE_TOP || move > ARKUI_TRANSITION_EDGE_END) {
84 move = ARKUI_TRANSITION_EDGE_START;
85 }
86 ArkUI_TransitionEffect* option = new ArkUI_TransitionEffect { ARKUI_TRANSITION_EFFECT_MOVE };
87 option->translate = nullptr;
88 option->scale = nullptr;
89 option->rotate = nullptr;
90 option->appear = nullptr;
91 option->disappear = nullptr;
92 option->combine = nullptr;
93 option->animation = nullptr;
94 option->move = move;
95 return option;
96 }
97
OH_ArkUI_CreateAsymmetricTransitionEffect(ArkUI_TransitionEffect * appear,ArkUI_TransitionEffect * disappear)98 ArkUI_TransitionEffect* OH_ArkUI_CreateAsymmetricTransitionEffect(
99 ArkUI_TransitionEffect* appear, ArkUI_TransitionEffect* disappear)
100 {
101 if (!appear && !disappear) {
102 return nullptr;
103 }
104 ArkUI_TransitionEffect* option = new ArkUI_TransitionEffect { ARKUI_TRANSITION_EFFECT_ASYMMETRIC };
105 option->translate = nullptr;
106 option->scale = nullptr;
107 option->rotate = nullptr;
108 option->combine = nullptr;
109 option->animation = nullptr;
110 option->appear = appear;
111 option->disappear = disappear;
112 return option;
113 }
114
OH_ArkUI_TransitionEffect_Dispose(ArkUI_TransitionEffect * option)115 void OH_ArkUI_TransitionEffect_Dispose(ArkUI_TransitionEffect* option)
116 {
117 CHECK_NULL_VOID(option);
118 if (option->toEffectOption) {
119 delete option->toEffectOption;
120 option->toEffectOption = nullptr;
121 }
122 delete option;
123 }
124
OH_ArkUI_TransitionEffect_Combine(ArkUI_TransitionEffect * option,ArkUI_TransitionEffect * combine)125 int32_t OH_ArkUI_TransitionEffect_Combine(ArkUI_TransitionEffect* option, ArkUI_TransitionEffect* combine)
126 {
127 CHECK_NULL_RETURN(option, ARKUI_ERROR_CODE_PARAM_INVALID);
128 auto* currentOption = option;
129 while (currentOption->combine) {
130 currentOption = currentOption->combine;
131 }
132 currentOption->combine = combine;
133 return ARKUI_ERROR_CODE_NO_ERROR;
134 }
135
OH_ArkUI_TransitionEffect_SetAnimation(ArkUI_TransitionEffect * option,ArkUI_AnimateOption * animation)136 int32_t OH_ArkUI_TransitionEffect_SetAnimation(ArkUI_TransitionEffect* option, ArkUI_AnimateOption* animation)
137 {
138 CHECK_NULL_RETURN(option, ARKUI_ERROR_CODE_PARAM_INVALID);
139 option->animation = animation;
140 return ARKUI_ERROR_CODE_NO_ERROR;
141 }
142 #ifdef __cplusplus
143 };
144 #endif