• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 "animate_impl.h"
18 #include "node/node_model.h"
19 
20 #include "base/error/error_code.h"
21 #include "base/utils/utils.h"
22 #ifdef __cplusplus
23 extern "C" {
24 #endif
25 
OH_ArkUI_AnimateOption_Create()26 ArkUI_AnimateOption* OH_ArkUI_AnimateOption_Create()
27 {
28     ArkUI_AnimateOption* option = new ArkUI_AnimateOption;
29     //duration default 1000
30     option->duration = 1000;
31     //tempo default 1.0
32     option->tempo = 1.0f;
33     option->curve = ArkUI_AnimationCurve::ARKUI_CURVE_EASE_IN_OUT;
34     //delay default 0
35     option->delay = 0;
36     //iterations default 1
37     option->iterations = 1;
38     option->playMode = ArkUI_AnimationPlayMode::ARKUI_ANIMATION_PLAY_MODE_NORMAL;
39     option->expectedFrameRateRange = nullptr;
40     option->iCurve = nullptr;
41     return option;
42 }
43 
OH_ArkUI_AnimateOption_Dispose(ArkUI_AnimateOption * option)44 void OH_ArkUI_AnimateOption_Dispose(ArkUI_AnimateOption* option)
45 {
46     if (option == nullptr) {
47         return;
48     }
49     if (option->expectedFrameRateRange != nullptr) {
50         delete option->expectedFrameRateRange;
51         option->expectedFrameRateRange = nullptr;
52     }
53     delete option;
54 }
55 
OH_ArkUI_AnimateOption_GetDuration(ArkUI_AnimateOption * option)56 uint32_t OH_ArkUI_AnimateOption_GetDuration(ArkUI_AnimateOption* option)
57 {
58     CHECK_NULL_RETURN(option, 0);
59     return option->duration;
60 }
61 
OH_ArkUI_AnimateOption_GetTempo(ArkUI_AnimateOption * option)62 float OH_ArkUI_AnimateOption_GetTempo(ArkUI_AnimateOption* option)
63 {
64     CHECK_NULL_RETURN(option, 0.0f);
65     return option->tempo;
66 }
67 
OH_ArkUI_AnimateOption_GetCurve(ArkUI_AnimateOption * option)68 ArkUI_AnimationCurve OH_ArkUI_AnimateOption_GetCurve(ArkUI_AnimateOption* option)
69 {
70     CHECK_NULL_RETURN(option, static_cast<ArkUI_AnimationCurve>(-1));
71     return option->curve;
72 }
73 
OH_ArkUI_AnimateOption_GetDelay(ArkUI_AnimateOption * option)74 int32_t OH_ArkUI_AnimateOption_GetDelay(ArkUI_AnimateOption* option)
75 {
76     CHECK_NULL_RETURN(option, 0);
77     return option->delay;
78 }
79 
OH_ArkUI_AnimateOption_GetIterations(ArkUI_AnimateOption * option)80 int32_t OH_ArkUI_AnimateOption_GetIterations(ArkUI_AnimateOption* option)
81 {
82     CHECK_NULL_RETURN(option, 0);
83     return option->iterations;
84 }
85 
OH_ArkUI_AnimateOption_GetPlayMode(ArkUI_AnimateOption * option)86 ArkUI_AnimationPlayMode OH_ArkUI_AnimateOption_GetPlayMode(ArkUI_AnimateOption* option)
87 {
88     CHECK_NULL_RETURN(option, static_cast<ArkUI_AnimationPlayMode>(-1));
89     return option->playMode;
90 }
91 
OH_ArkUI_AnimateOption_GetExpectedFrameRateRange(ArkUI_AnimateOption * option)92 ArkUI_ExpectedFrameRateRange* OH_ArkUI_AnimateOption_GetExpectedFrameRateRange(ArkUI_AnimateOption* option)
93 {
94     CHECK_NULL_RETURN(option, nullptr);
95     return option->expectedFrameRateRange;
96 }
97 
OH_ArkUI_AnimateOption_SetDuration(ArkUI_AnimateOption * option,int32_t value)98 void OH_ArkUI_AnimateOption_SetDuration(ArkUI_AnimateOption* option, int32_t value)
99 {
100     CHECK_NULL_VOID(option);
101     // 设置小于0的值时按0处理
102     if (value < 0) {
103         value = 0;
104     }
105     option->duration = static_cast<uint32_t>(value);
106 }
107 
OH_ArkUI_AnimateOption_SetTempo(ArkUI_AnimateOption * option,float value)108 void OH_ArkUI_AnimateOption_SetTempo(ArkUI_AnimateOption* option, float value)
109 {
110     CHECK_NULL_VOID(option);
111     // 小于0的值时按值为1处理
112     if (value < 0) {
113         value = 1;
114     }
115     option->tempo = value;
116 }
117 
OH_ArkUI_AnimateOption_SetCurve(ArkUI_AnimateOption * option,ArkUI_AnimationCurve value)118 void OH_ArkUI_AnimateOption_SetCurve(ArkUI_AnimateOption* option, ArkUI_AnimationCurve value)
119 {
120     CHECK_NULL_VOID(option);
121     if (value >= ARKUI_CURVE_LINEAR && value <= ARKUI_CURVE_FRICTION) {
122         option->curve = value;
123     }
124 }
125 
OH_ArkUI_AnimateOption_SetDelay(ArkUI_AnimateOption * option,int32_t value)126 void OH_ArkUI_AnimateOption_SetDelay(ArkUI_AnimateOption* option, int32_t value)
127 {
128     CHECK_NULL_VOID(option);
129     option->delay = value;
130 }
131 
OH_ArkUI_AnimateOption_SetIterations(ArkUI_AnimateOption * option,int32_t value)132 void OH_ArkUI_AnimateOption_SetIterations(ArkUI_AnimateOption* option, int32_t value)
133 {
134     CHECK_NULL_VOID(option);
135     //取值范围:[-1, +∞)
136     if (value < -1) {
137         return;
138     }
139     option->iterations = value;
140 }
141 
OH_ArkUI_AnimateOption_SetPlayMode(ArkUI_AnimateOption * option,ArkUI_AnimationPlayMode value)142 void OH_ArkUI_AnimateOption_SetPlayMode(ArkUI_AnimateOption* option, ArkUI_AnimationPlayMode value)
143 {
144     CHECK_NULL_VOID(option);
145     if (value >= ARKUI_ANIMATION_PLAY_MODE_NORMAL && value <= ARKUI_ANIMATION_PLAY_MODE_ALTERNATE_REVERSE) {
146         option->playMode = value;
147     }
148 }
149 
OH_ArkUI_AnimateOption_SetExpectedFrameRateRange(ArkUI_AnimateOption * option,ArkUI_ExpectedFrameRateRange * value)150 void OH_ArkUI_AnimateOption_SetExpectedFrameRateRange(ArkUI_AnimateOption* option, ArkUI_ExpectedFrameRateRange* value)
151 {
152     CHECK_NULL_VOID(option);
153     CHECK_NULL_VOID(value);
154     option->expectedFrameRateRange =
155         new ArkUI_ExpectedFrameRateRange { value->min, value->max, value->expected };
156 }
157 
OH_ArkUI_AnimateOption_SetICurve(ArkUI_AnimateOption * option,ArkUI_CurveHandle value)158 void OH_ArkUI_AnimateOption_SetICurve(ArkUI_AnimateOption* option, ArkUI_CurveHandle value)
159 {
160     CHECK_NULL_VOID(option);
161     CHECK_NULL_VOID(value);
162     option->iCurve = value;
163 }
164 
OH_ArkUI_AnimateOption_GetICurve(ArkUI_AnimateOption * option)165 ArkUI_CurveHandle OH_ArkUI_AnimateOption_GetICurve(ArkUI_AnimateOption* option)
166 {
167     CHECK_NULL_RETURN(option, nullptr);
168     return option->iCurve;
169 }
170 
OH_ArkUI_KeyframeAnimateOption_Create(int32_t size)171 ArkUI_KeyframeAnimateOption* OH_ArkUI_KeyframeAnimateOption_Create(int32_t size)
172 {
173     if (size < 0) {
174         return nullptr;
175     }
176 
177     ArkUI_KeyframeAnimateOption* animateOption = new ArkUI_KeyframeAnimateOption;
178     animateOption->keyframes.resize(size);
179     animateOption->delay = 0;
180     animateOption->iterations = 1;
181     animateOption->onFinish = nullptr;
182     animateOption->userData = nullptr;
183     animateOption->expectedFrameRateRange = nullptr;
184 
185     for (int32_t i = 0; i < size; ++i) {
186         //duration default 1000
187         animateOption->keyframes[i].duration = 1000;
188         animateOption->keyframes[i].curve = nullptr;
189         animateOption->keyframes[i].event = nullptr;
190         animateOption->keyframes[i].userData = nullptr;
191     }
192     return animateOption;
193 }
194 
OH_ArkUI_KeyframeAnimateOption_Dispose(ArkUI_KeyframeAnimateOption * option)195 void OH_ArkUI_KeyframeAnimateOption_Dispose(ArkUI_KeyframeAnimateOption* option)
196 {
197     CHECK_NULL_VOID(option);
198     if (option->expectedFrameRateRange) {
199         delete option->expectedFrameRateRange;
200         option->expectedFrameRateRange = nullptr;
201     }
202     delete option;
203 }
204 
OH_ArkUI_KeyframeAnimateOption_SetDelay(ArkUI_KeyframeAnimateOption * option,int32_t value)205 int32_t OH_ArkUI_KeyframeAnimateOption_SetDelay(ArkUI_KeyframeAnimateOption* option, int32_t value)
206 {
207     CHECK_NULL_RETURN(option, OHOS::Ace::ERROR_CODE_PARAM_INVALID);
208     option->delay = value;
209     return OHOS::Ace::ERROR_CODE_NO_ERROR;
210 }
211 
OH_ArkUI_KeyframeAnimateOption_SetIterations(ArkUI_KeyframeAnimateOption * option,int32_t value)212 int32_t OH_ArkUI_KeyframeAnimateOption_SetIterations(ArkUI_KeyframeAnimateOption* option, int32_t value)
213 {
214     CHECK_NULL_RETURN(option, OHOS::Ace::ERROR_CODE_PARAM_INVALID);
215     //取值范围:[-1, +∞)
216     if (value < -1) {
217         return OHOS::Ace::ERROR_CODE_PARAM_INVALID;
218     }
219     option->iterations = value;
220     return OHOS::Ace::ERROR_CODE_NO_ERROR;
221 }
222 
OH_ArkUI_KeyframeAnimateOption_RegisterOnFinishCallback(ArkUI_KeyframeAnimateOption * option,void * userData,void (* onFinish)(void * userData))223 int32_t OH_ArkUI_KeyframeAnimateOption_RegisterOnFinishCallback(
224     ArkUI_KeyframeAnimateOption* option, void* userData, void (*onFinish)(void* userData))
225 {
226     CHECK_NULL_RETURN(option, OHOS::Ace::ERROR_CODE_PARAM_INVALID);
227     option->onFinish = onFinish;
228     option->userData = userData;
229     return OHOS::Ace::ERROR_CODE_NO_ERROR;
230 }
231 
OH_ArkUI_KeyframeAnimateOption_SetDuration(ArkUI_KeyframeAnimateOption * option,int32_t value,int32_t index)232 int32_t OH_ArkUI_KeyframeAnimateOption_SetDuration(ArkUI_KeyframeAnimateOption* option, int32_t value, int32_t index)
233 {
234     if (option == nullptr || index < 0 || index >= static_cast<int32_t>(option->keyframes.size())) {
235         return OHOS::Ace::ERROR_CODE_PARAM_INVALID;
236     }
237     if (value < 0) {
238         value = 0;
239     }
240     option->keyframes[index].duration = value;
241     return OHOS::Ace::ERROR_CODE_NO_ERROR;
242 }
243 
OH_ArkUI_KeyframeAnimateOption_SetCurve(ArkUI_KeyframeAnimateOption * option,ArkUI_CurveHandle value,int32_t index)244 int32_t OH_ArkUI_KeyframeAnimateOption_SetCurve(
245     ArkUI_KeyframeAnimateOption* option, ArkUI_CurveHandle value, int32_t index)
246 {
247     if (option == nullptr || index < 0 || index >= static_cast<int32_t>(option->keyframes.size())) {
248         return OHOS::Ace::ERROR_CODE_PARAM_INVALID;
249     }
250     if (!value || !value->curve) {
251         option->keyframes[index].curve = nullptr;
252         return OHOS::Ace::ERROR_CODE_PARAM_INVALID;
253     }
254     if (value->type == ARKUI_CURVE_TYPE_SPRING_MOTION || value->type == ARKUI_CURVE_TYPE_RESPONSIVE_SPRING_MOTION ||
255         value->type == ARKUI_CURVE_TYPE_INTERPOLATING_SPRING) {
256         return OHOS::Ace::ERROR_CODE_PARAM_INVALID;
257     }
258     option->keyframes[index].curve = value;
259     return OHOS::Ace::ERROR_CODE_NO_ERROR;
260 }
261 
OH_ArkUI_KeyframeAnimateOption_RegisterOnEventCallback(ArkUI_KeyframeAnimateOption * option,void * userData,void (* event)(void * userData),int32_t index)262 int32_t OH_ArkUI_KeyframeAnimateOption_RegisterOnEventCallback(
263     ArkUI_KeyframeAnimateOption* option, void* userData, void (*event)(void* userData), int32_t index)
264 {
265     if (option == nullptr || index < 0 || index >= static_cast<int32_t>(option->keyframes.size())) {
266         return OHOS::Ace::ERROR_CODE_PARAM_INVALID;
267     }
268     option->keyframes[index].event = event;
269     option->keyframes[index].userData = userData;
270     return OHOS::Ace::ERROR_CODE_NO_ERROR;
271 }
272 
OH_ArkUI_KeyframeAnimateOption_GetDelay(ArkUI_KeyframeAnimateOption * option)273 int32_t OH_ArkUI_KeyframeAnimateOption_GetDelay(ArkUI_KeyframeAnimateOption* option)
274 {
275     CHECK_NULL_RETURN(option, 0);
276     return option->delay;
277 }
278 
OH_ArkUI_KeyframeAnimateOption_GetIterations(ArkUI_KeyframeAnimateOption * option)279 int32_t OH_ArkUI_KeyframeAnimateOption_GetIterations(ArkUI_KeyframeAnimateOption* option)
280 {
281     CHECK_NULL_RETURN(option, 1);
282     return option->iterations;
283 }
284 
OH_ArkUI_KeyframeAnimateOption_GetDuration(ArkUI_KeyframeAnimateOption * option,int32_t index)285 int32_t OH_ArkUI_KeyframeAnimateOption_GetDuration(ArkUI_KeyframeAnimateOption* option, int32_t index)
286 {
287     if (option == nullptr || index < 0 || index >= static_cast<int32_t>(option->keyframes.size())) {
288         return 0;
289     }
290     return option->keyframes[index].duration;
291 }
292 
OH_ArkUI_KeyframeAnimateOption_GetCurve(ArkUI_KeyframeAnimateOption * option,int32_t index)293 ArkUI_CurveHandle OH_ArkUI_KeyframeAnimateOption_GetCurve(ArkUI_KeyframeAnimateOption* option, int32_t index)
294 {
295     if (option == nullptr || index < 0 || index >= static_cast<int32_t>(option->keyframes.size())) {
296         return nullptr;
297     }
298     return option->keyframes[index].curve;
299 }
300 
OH_ArkUI_AnimatorOption_Create(int32_t keyframeSize)301 ArkUI_AnimatorOption* OH_ArkUI_AnimatorOption_Create(int32_t keyframeSize)
302 {
303     if (keyframeSize < 0) {
304         return nullptr;
305     }
306 
307     ArkUI_AnimatorOption* option = new ArkUI_AnimatorOption;
308     option->keyframes.resize(keyframeSize);
309     for (int32_t i = 0; i < keyframeSize; i++) {
310         option->keyframes[i].curve = nullptr;
311     }
312     option->duration = 0;
313     option->delay = 0;
314     option->iterations = 1;
315     option->fill = ARKUI_ANIMATION_FILL_MODE_FORWARDS;
316     option->direction = ARKUI_ANIMATION_DIRECTION_NORMAL;
317     option->begin = 0.0f;
318     option->end = 1.0f;
319     option->easing = nullptr;
320     option->onFrame = nullptr;
321     option->frameUserData = nullptr;
322     option->onFinish = nullptr;
323     option->finishUserData = nullptr;
324     option->onCancel = nullptr;
325     option->cancelUserData = nullptr;
326     option->onRepeat = nullptr;
327     option->repeatUserData = nullptr;
328     option->expectedFrameRateRange = nullptr;
329     return option;
330 }
331 
OH_ArkUI_AnimatorOption_Dispose(ArkUI_AnimatorOption * option)332 void OH_ArkUI_AnimatorOption_Dispose(ArkUI_AnimatorOption* option)
333 {
334     CHECK_NULL_VOID(option);
335     if (option->expectedFrameRateRange) {
336         delete option->expectedFrameRateRange;
337         option->expectedFrameRateRange = nullptr;
338     }
339     delete option;
340 }
341 
OH_ArkUI_AnimatorOption_SetDuration(ArkUI_AnimatorOption * option,int32_t value)342 int32_t OH_ArkUI_AnimatorOption_SetDuration(ArkUI_AnimatorOption* option, int32_t value)
343 {
344     CHECK_NULL_RETURN(option, OHOS::Ace::ERROR_CODE_PARAM_INVALID);
345     if (value < 0) {
346         return OHOS::Ace::ERROR_CODE_PARAM_INVALID;
347     }
348     option->duration = value;
349     return OHOS::Ace::ERROR_CODE_NO_ERROR;
350 }
351 
OH_ArkUI_AnimatorOption_SetDelay(ArkUI_AnimatorOption * option,int32_t value)352 int32_t OH_ArkUI_AnimatorOption_SetDelay(ArkUI_AnimatorOption* option, int32_t value)
353 {
354     CHECK_NULL_RETURN(option, OHOS::Ace::ERROR_CODE_PARAM_INVALID);
355     option->delay = value;
356     return OHOS::Ace::ERROR_CODE_NO_ERROR;
357 }
358 
OH_ArkUI_AnimatorOption_SetIterations(ArkUI_AnimatorOption * option,int32_t value)359 int32_t OH_ArkUI_AnimatorOption_SetIterations(ArkUI_AnimatorOption* option, int32_t value)
360 {
361     CHECK_NULL_RETURN(option, OHOS::Ace::ERROR_CODE_PARAM_INVALID);
362     if (value < -1) {
363         value = 1;
364     }
365     option->iterations = value;
366     return OHOS::Ace::ERROR_CODE_NO_ERROR;
367 }
368 
OH_ArkUI_AnimatorOption_SetFill(ArkUI_AnimatorOption * option,ArkUI_AnimationFillMode value)369 int32_t OH_ArkUI_AnimatorOption_SetFill(ArkUI_AnimatorOption* option, ArkUI_AnimationFillMode value)
370 {
371     CHECK_NULL_RETURN(option, OHOS::Ace::ERROR_CODE_PARAM_INVALID);
372     if (value > ARKUI_ANIMATION_FILL_MODE_BOTH || value < ARKUI_ANIMATION_FILL_MODE_NONE) {
373         return OHOS::Ace::ERROR_CODE_PARAM_INVALID;
374     }
375     option->fill = value;
376     return OHOS::Ace::ERROR_CODE_NO_ERROR;
377 }
378 
OH_ArkUI_AnimatorOption_SetDirection(ArkUI_AnimatorOption * option,ArkUI_AnimationDirection value)379 int32_t OH_ArkUI_AnimatorOption_SetDirection(ArkUI_AnimatorOption* option, ArkUI_AnimationDirection value)
380 {
381     CHECK_NULL_RETURN(option, OHOS::Ace::ERROR_CODE_PARAM_INVALID);
382     if (value > ARKUI_ANIMATION_DIRECTION_ALTERNATE_REVERSE || value < ARKUI_ANIMATION_DIRECTION_NORMAL) {
383         return OHOS::Ace::ERROR_CODE_PARAM_INVALID;
384     }
385     option->direction = value;
386     return OHOS::Ace::ERROR_CODE_NO_ERROR;
387 }
388 
OH_ArkUI_AnimatorOption_SetCurve(ArkUI_AnimatorOption * option,ArkUI_CurveHandle value)389 int32_t OH_ArkUI_AnimatorOption_SetCurve(ArkUI_AnimatorOption* option, ArkUI_CurveHandle value)
390 {
391     CHECK_NULL_RETURN(option, OHOS::Ace::ERROR_CODE_PARAM_INVALID);
392     if (value) {
393         if (value->type == ARKUI_CURVE_TYPE_SPRING || value->type == ARKUI_CURVE_TYPE_SPRING_MOTION ||
394             value->type == ARKUI_CURVE_TYPE_RESPONSIVE_SPRING_MOTION ||
395             value->type == ARKUI_CURVE_TYPE_INTERPOLATING_SPRING || value->type == ARKUI_CURVE_TYPE_CUSTOM) {
396             option->easing = nullptr;
397             return OHOS::Ace::ERROR_CODE_PARAM_INVALID;
398         }
399     }
400 
401     option->easing = value;
402     return OHOS::Ace::ERROR_CODE_NO_ERROR;
403 }
404 
OH_ArkUI_AnimatorOption_SetBegin(ArkUI_AnimatorOption * option,float value)405 int32_t OH_ArkUI_AnimatorOption_SetBegin(ArkUI_AnimatorOption* option, float value)
406 {
407     CHECK_NULL_RETURN(option, OHOS::Ace::ERROR_CODE_PARAM_INVALID);
408     if (option->keyframes.size() > 0) {
409         return OHOS::Ace::ERROR_CODE_PARAM_INVALID;
410     }
411     option->begin = value;
412     return OHOS::Ace::ERROR_CODE_NO_ERROR;
413 }
414 
OH_ArkUI_AnimatorOption_SetEnd(ArkUI_AnimatorOption * option,float value)415 int32_t OH_ArkUI_AnimatorOption_SetEnd(ArkUI_AnimatorOption* option, float value)
416 {
417     CHECK_NULL_RETURN(option, OHOS::Ace::ERROR_CODE_PARAM_INVALID);
418     if (option->keyframes.size() > 0) {
419         return OHOS::Ace::ERROR_CODE_PARAM_INVALID;
420     }
421     option->end = value;
422     return OHOS::Ace::ERROR_CODE_NO_ERROR;
423 }
424 
OH_ArkUI_AnimatorOption_SetExpectedFrameRateRange(ArkUI_AnimatorOption * option,ArkUI_ExpectedFrameRateRange * value)425 int32_t OH_ArkUI_AnimatorOption_SetExpectedFrameRateRange(
426     ArkUI_AnimatorOption* option, ArkUI_ExpectedFrameRateRange* value)
427 {
428     CHECK_NULL_RETURN(option, OHOS::Ace::ERROR_CODE_PARAM_INVALID);
429     CHECK_NULL_RETURN(value, OHOS::Ace::ERROR_CODE_PARAM_INVALID);
430     option->expectedFrameRateRange = new ArkUI_ExpectedFrameRateRange { value->min, value->max, value->expected };
431     return OHOS::Ace::ERROR_CODE_NO_ERROR;
432 }
433 
OH_ArkUI_AnimatorOption_SetKeyframe(ArkUI_AnimatorOption * option,float time,float value,int32_t index)434 int32_t OH_ArkUI_AnimatorOption_SetKeyframe(ArkUI_AnimatorOption* option, float time, float value, int32_t index)
435 {
436     CHECK_NULL_RETURN(option, OHOS::Ace::ERROR_CODE_PARAM_INVALID);
437     if (time < 0 || time > 1) {
438         return OHOS::Ace::ERROR_CODE_PARAM_INVALID;
439     }
440     if (index >= 0 && static_cast<size_t>(index) < option->keyframes.size()) {
441         option->keyframes[index].keyTime = time;
442         option->keyframes[index].keyValue = value;
443         return OHOS::Ace::ERROR_CODE_NO_ERROR;
444     }
445     return OHOS::Ace::ERROR_CODE_PARAM_INVALID;
446 }
447 
OH_ArkUI_AnimatorOption_SetKeyframeCurve(ArkUI_AnimatorOption * option,ArkUI_CurveHandle value,int32_t index)448 int32_t OH_ArkUI_AnimatorOption_SetKeyframeCurve(ArkUI_AnimatorOption* option, ArkUI_CurveHandle value, int32_t index)
449 {
450     CHECK_NULL_RETURN(option, OHOS::Ace::ERROR_CODE_PARAM_INVALID);
451     if (value) {
452         if (value->type == ARKUI_CURVE_TYPE_SPRING || value->type == ARKUI_CURVE_TYPE_SPRING_MOTION ||
453             value->type == ARKUI_CURVE_TYPE_RESPONSIVE_SPRING_MOTION ||
454             value->type == ARKUI_CURVE_TYPE_INTERPOLATING_SPRING || value->type == ARKUI_CURVE_TYPE_CUSTOM) {
455             option->keyframes[index].curve = nullptr;
456             return OHOS::Ace::ERROR_CODE_PARAM_INVALID;
457         }
458     }
459 
460     if (index >= 0 && static_cast<size_t>(index) < option->keyframes.size()) {
461         option->keyframes[index].curve = value;
462         return OHOS::Ace::ERROR_CODE_NO_ERROR;
463     }
464     return OHOS::Ace::ERROR_CODE_PARAM_INVALID;
465 }
466 
OH_ArkUI_AnimatorOption_GetDuration(ArkUI_AnimatorOption * option)467 int32_t OH_ArkUI_AnimatorOption_GetDuration(ArkUI_AnimatorOption* option)
468 {
469     if (option != nullptr) {
470         return option->duration;
471     }
472     return -1;
473 }
474 
OH_ArkUI_AnimatorOption_GetDelay(ArkUI_AnimatorOption * option)475 int32_t OH_ArkUI_AnimatorOption_GetDelay(ArkUI_AnimatorOption* option)
476 {
477     if (option != nullptr) {
478         return option->delay;
479     }
480     return -1;
481 }
482 
OH_ArkUI_AnimatorOption_GetIterations(ArkUI_AnimatorOption * option)483 int32_t OH_ArkUI_AnimatorOption_GetIterations(ArkUI_AnimatorOption* option)
484 {
485     if (option != nullptr) {
486         return option->iterations;
487     }
488     return -1;
489 }
490 
OH_ArkUI_AnimatorOption_GetFill(ArkUI_AnimatorOption * option)491 ArkUI_AnimationFillMode OH_ArkUI_AnimatorOption_GetFill(ArkUI_AnimatorOption* option)
492 {
493     if (option != nullptr) {
494         return option->fill;
495     }
496     return static_cast<ArkUI_AnimationFillMode>(-1);
497 }
498 
OH_ArkUI_AnimatorOption_GetDirection(ArkUI_AnimatorOption * option)499 ArkUI_AnimationDirection OH_ArkUI_AnimatorOption_GetDirection(ArkUI_AnimatorOption* option)
500 {
501     if (option != nullptr) {
502         return option->direction;
503     }
504     return static_cast<ArkUI_AnimationDirection>(-1);
505 }
506 
OH_ArkUI_AnimatorOption_GetCurve(ArkUI_AnimatorOption * option)507 ArkUI_CurveHandle OH_ArkUI_AnimatorOption_GetCurve(ArkUI_AnimatorOption* option)
508 {
509     if (option != nullptr) {
510         return option->easing;
511     }
512     return nullptr;
513 }
514 
OH_ArkUI_AnimatorOption_GetBegin(ArkUI_AnimatorOption * option)515 float OH_ArkUI_AnimatorOption_GetBegin(ArkUI_AnimatorOption* option)
516 {
517     if (option != nullptr) {
518         return option->begin;
519     }
520     return 0.0f;
521 }
522 
OH_ArkUI_AnimatorOption_GetEnd(ArkUI_AnimatorOption * option)523 float OH_ArkUI_AnimatorOption_GetEnd(ArkUI_AnimatorOption* option)
524 {
525     if (option != nullptr) {
526         return option->end;
527     }
528     return 1.0f;
529 }
530 
OH_ArkUI_AnimatorOption_GetExpectedFrameRateRange(ArkUI_AnimatorOption * option)531 ArkUI_ExpectedFrameRateRange* OH_ArkUI_AnimatorOption_GetExpectedFrameRateRange(ArkUI_AnimatorOption* option)
532 {
533     if (option != nullptr) {
534         return option->expectedFrameRateRange;
535     }
536     return nullptr;
537 }
538 
OH_ArkUI_AnimatorOption_GetKeyframeTime(ArkUI_AnimatorOption * option,int32_t index)539 float OH_ArkUI_AnimatorOption_GetKeyframeTime(ArkUI_AnimatorOption* option, int32_t index)
540 {
541     if (option != nullptr && index >= 0 && static_cast<size_t>(index) < option->keyframes.size()) {
542         return option->keyframes[index].keyTime;
543     }
544     return -1.0f;
545 }
546 
OH_ArkUI_AnimatorOption_GetKeyframeValue(ArkUI_AnimatorOption * option,int32_t index)547 float OH_ArkUI_AnimatorOption_GetKeyframeValue(ArkUI_AnimatorOption* option, int32_t index)
548 {
549     if (option != nullptr && index >= 0 && static_cast<size_t>(index) < option->keyframes.size()) {
550         return option->keyframes[index].keyValue;
551     }
552     return -1.0f;
553 }
554 
OH_ArkUI_AnimatorOption_GetKeyframeCurve(ArkUI_AnimatorOption * option,int32_t index)555 ArkUI_CurveHandle OH_ArkUI_AnimatorOption_GetKeyframeCurve(ArkUI_AnimatorOption* option, int32_t index)
556 {
557     if (option != nullptr && index >= 0 && static_cast<size_t>(index) < option->keyframes.size()) {
558         return option->keyframes[index].curve;
559     }
560     return nullptr;
561 }
562 
OH_ArkUI_AnimatorEvent_GetUserData(ArkUI_AnimatorEvent * event)563 void* OH_ArkUI_AnimatorEvent_GetUserData(ArkUI_AnimatorEvent* event)
564 {
565     CHECK_NULL_RETURN(event, nullptr);
566     return event->userData;
567 }
568 
OH_ArkUI_AnimatorOnFrameEvent_GetUserData(ArkUI_AnimatorOnFrameEvent * event)569 void* OH_ArkUI_AnimatorOnFrameEvent_GetUserData(ArkUI_AnimatorOnFrameEvent* event)
570 {
571     CHECK_NULL_RETURN(event, nullptr);
572     return event->userData;
573 }
574 
OH_ArkUI_AnimatorOnFrameEvent_GetValue(ArkUI_AnimatorOnFrameEvent * event)575 float OH_ArkUI_AnimatorOnFrameEvent_GetValue(ArkUI_AnimatorOnFrameEvent* event)
576 {
577     CHECK_NULL_RETURN(event, 0.0f);
578     return event->progress;
579 }
580 
OH_ArkUI_KeyframeAnimateOption_SetExpectedFrameRate(ArkUI_KeyframeAnimateOption * option,ArkUI_ExpectedFrameRateRange * frameRate)581 int32_t OH_ArkUI_KeyframeAnimateOption_SetExpectedFrameRate(
582     ArkUI_KeyframeAnimateOption* option, ArkUI_ExpectedFrameRateRange* frameRate)
583 {
584     CHECK_NULL_RETURN(option, OHOS::Ace::ERROR_CODE_PARAM_INVALID);
585     CHECK_NULL_RETURN(frameRate, OHOS::Ace::ERROR_CODE_PARAM_INVALID);
586     option->expectedFrameRateRange =
587         new ArkUI_ExpectedFrameRateRange { frameRate->min, frameRate->max, frameRate->expected };
588     return OHOS::Ace::ERROR_CODE_NO_ERROR;
589 }
590 
OH_ArkUI_KeyframeAnimateOption_GetExpectedFrameRate(ArkUI_KeyframeAnimateOption * option)591 ArkUI_ExpectedFrameRateRange* OH_ArkUI_KeyframeAnimateOption_GetExpectedFrameRate(
592     ArkUI_KeyframeAnimateOption* option)
593 {
594     if (option != nullptr) {
595         return option->expectedFrameRateRange;
596     }
597     return nullptr;
598 }
599 
OH_ArkUI_AnimatorOption_RegisterOnFrameCallback(ArkUI_AnimatorOption * option,void * userData,void (* callback)(ArkUI_AnimatorOnFrameEvent * event))600 int32_t OH_ArkUI_AnimatorOption_RegisterOnFrameCallback(
601     ArkUI_AnimatorOption* option, void* userData, void (*callback)(ArkUI_AnimatorOnFrameEvent* event))
602 {
603     const auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
604     if (!impl || !option || !callback) {
605         return OHOS::Ace::ERROR_CODE_PARAM_INVALID;
606     }
607     option->onFrame = callback;
608     option->frameUserData = userData;
609     return OHOS::Ace::ERROR_CODE_NO_ERROR;
610 }
611 
OH_ArkUI_AnimatorOption_RegisterOnFinishCallback(ArkUI_AnimatorOption * option,void * userData,void (* callback)(ArkUI_AnimatorEvent * event))612 int32_t OH_ArkUI_AnimatorOption_RegisterOnFinishCallback(
613     ArkUI_AnimatorOption* option, void* userData, void (*callback)(ArkUI_AnimatorEvent* event))
614 {
615     const auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
616     if (!impl || !option || !callback) {
617         return OHOS::Ace::ERROR_CODE_PARAM_INVALID;
618     }
619 
620     option->onFinish = callback;
621     option->finishUserData = userData;
622     return OHOS::Ace::ERROR_CODE_NO_ERROR;
623 }
624 
OH_ArkUI_AnimatorOption_RegisterOnCancelCallback(ArkUI_AnimatorOption * option,void * userData,void (* callback)(ArkUI_AnimatorEvent * event))625 int32_t OH_ArkUI_AnimatorOption_RegisterOnCancelCallback(
626     ArkUI_AnimatorOption* option, void* userData, void (*callback)(ArkUI_AnimatorEvent* event))
627 {
628     const auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
629     if (!impl || !option || !callback) {
630         return OHOS::Ace::ERROR_CODE_PARAM_INVALID;
631     }
632 
633     option->onCancel = callback;
634     option->cancelUserData = userData;
635     return OHOS::Ace::ERROR_CODE_NO_ERROR;
636 }
637 
OH_ArkUI_AnimatorOption_RegisterOnRepeatCallback(ArkUI_AnimatorOption * option,void * userData,void (* callback)(ArkUI_AnimatorEvent * event))638 int32_t OH_ArkUI_AnimatorOption_RegisterOnRepeatCallback(
639     ArkUI_AnimatorOption* option, void* userData, void (*callback)(ArkUI_AnimatorEvent* event))
640 {
641     const auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
642     if (!impl || !option || !callback) {
643         return OHOS::Ace::ERROR_CODE_PARAM_INVALID;
644     }
645 
646     option->onRepeat = callback;
647     option->repeatUserData = userData;
648     return OHOS::Ace::ERROR_CODE_NO_ERROR;
649 }
650 
OH_ArkUI_Animator_ResetAnimatorOption(ArkUI_AnimatorHandle animator,ArkUI_AnimatorOption * option)651 int32_t OH_ArkUI_Animator_ResetAnimatorOption(ArkUI_AnimatorHandle animator, ArkUI_AnimatorOption* option)
652 {
653     return OHOS::Ace::AnimateModel::AnimatorReset(animator, option);
654 }
655 
OH_ArkUI_Animator_Play(ArkUI_AnimatorHandle animator)656 int32_t OH_ArkUI_Animator_Play(ArkUI_AnimatorHandle animator)
657 {
658     return OHOS::Ace::AnimateModel::AnimatorPlay(animator);
659 }
660 
OH_ArkUI_Animator_Finish(ArkUI_AnimatorHandle animator)661 int32_t OH_ArkUI_Animator_Finish(ArkUI_AnimatorHandle animator)
662 {
663     return OHOS::Ace::AnimateModel::AnimatorFinish(animator);
664 }
665 
OH_ArkUI_Animator_Pause(ArkUI_AnimatorHandle animator)666 int32_t OH_ArkUI_Animator_Pause(ArkUI_AnimatorHandle animator)
667 {
668     return OHOS::Ace::AnimateModel::AnimatorPause(animator);
669 }
670 
OH_ArkUI_Animator_Cancel(ArkUI_AnimatorHandle animator)671 int32_t OH_ArkUI_Animator_Cancel(ArkUI_AnimatorHandle animator)
672 {
673     return OHOS::Ace::AnimateModel::AnimatorCancel(animator);
674 }
675 
OH_ArkUI_Animator_Reverse(ArkUI_AnimatorHandle animator)676 int32_t OH_ArkUI_Animator_Reverse(ArkUI_AnimatorHandle animator)
677 {
678     return OHOS::Ace::AnimateModel::AnimatorReverse(animator);
679 }
680 
OH_ArkUI_Curve_CreateCurveByType(ArkUI_AnimationCurve curve)681 ArkUI_CurveHandle OH_ArkUI_Curve_CreateCurveByType(ArkUI_AnimationCurve curve)
682 {
683     return OHOS::Ace::AnimateModel::InitCurve(curve);
684 }
685 
OH_ArkUI_Curve_CreateStepsCurve(int32_t count,bool end)686 ArkUI_CurveHandle OH_ArkUI_Curve_CreateStepsCurve(int32_t count, bool end)
687 {
688     return OHOS::Ace::AnimateModel::StepsCurve(count, end);
689 }
690 
OH_ArkUI_Curve_CreateCubicBezierCurve(float x1,float y1,float x2,float y2)691 ArkUI_CurveHandle OH_ArkUI_Curve_CreateCubicBezierCurve(float x1, float y1, float x2, float y2)
692 {
693     return OHOS::Ace::AnimateModel::CubicBezierCurve(x1, y1, x2, y2);
694 }
695 
OH_ArkUI_Curve_CreateSpringCurve(float velocity,float mass,float stiffness,float damping)696 ArkUI_CurveHandle OH_ArkUI_Curve_CreateSpringCurve(float velocity, float mass, float stiffness, float damping)
697 {
698     return OHOS::Ace::AnimateModel::SpringCurve(velocity, mass, stiffness, damping);
699 }
700 
OH_ArkUI_Curve_CreateSpringMotion(float response,float dampingFraction,float overlapDuration)701 ArkUI_CurveHandle OH_ArkUI_Curve_CreateSpringMotion(float response, float dampingFraction, float overlapDuration)
702 {
703     return OHOS::Ace::AnimateModel::SpringMotion(response, dampingFraction, overlapDuration);
704 }
705 
OH_ArkUI_Curve_CreateResponsiveSpringMotion(float response,float dampingFraction,float overlapDuration)706 ArkUI_CurveHandle OH_ArkUI_Curve_CreateResponsiveSpringMotion(
707     float response, float dampingFraction, float overlapDuration)
708 {
709     return OHOS::Ace::AnimateModel::ResponsiveSpringMotion(response, dampingFraction, overlapDuration);
710 }
711 
OH_ArkUI_Curve_CreateInterpolatingSpring(float velocity,float mass,float stiffness,float damping)712 ArkUI_CurveHandle OH_ArkUI_Curve_CreateInterpolatingSpring(float velocity, float mass, float stiffness, float damping)
713 {
714     return OHOS::Ace::AnimateModel::InterpolatingSpring(velocity, mass, stiffness, damping);
715 }
716 
OH_ArkUI_Curve_CreateCustomCurve(void * userData,float (* interpolate)(float fraction,void * userdata))717 ArkUI_CurveHandle OH_ArkUI_Curve_CreateCustomCurve(void* userData, float (*interpolate)(float fraction, void* userdata))
718 {
719     return OHOS::Ace::AnimateModel::CustomCurve(userData, interpolate);
720 }
721 
OH_ArkUI_Curve_DisposeCurve(ArkUI_CurveHandle curveHandle)722 void OH_ArkUI_Curve_DisposeCurve(ArkUI_CurveHandle curveHandle)
723 {
724     return OHOS::Ace::AnimateModel::DisposeCurve(curveHandle);
725 }
726 
727 #ifdef __cplusplus
728 };
729 #endif