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