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