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