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 #include "imageanimator_component.h"
16
17 namespace ArkUICapiTest {
SetState(int32_t state)18 void ImageAnimatorComponent::SetState(int32_t state)
19 {
20 ArkUI_NumberValue value[] = { { .i32 = state } };
21 ArkUI_AttributeItem item = { value, 1 };
22 _nodeAPI->setAttribute(_component, NODE_IMAGE_ANIMATOR_STATE, &item);
23 }
24
SetIteration(int32_t iteration)25 void ImageAnimatorComponent::SetIteration(int32_t iteration)
26 {
27 ArkUI_NumberValue value[] = { { .i32 = iteration } };
28 ArkUI_AttributeItem item = { value, 1 };
29 _nodeAPI->setAttribute(_component, NODE_IMAGE_ANIMATOR_ITERATION, &item);
30 }
31
SetImage(std::vector<ArkUI_ImageAnimatorFrameInfo * > & vector)32 void ImageAnimatorComponent::SetImage(std::vector<ArkUI_ImageAnimatorFrameInfo*>& vector)
33 {
34 ArkUI_AttributeItem item = { .object = vector.data(), .size = static_cast<int>(vector.size()) };
35 _nodeAPI->setAttribute(_component, NODE_IMAGE_ANIMATOR_IMAGES, &item);
36 }
37
SetFixedSize(int32_t fixedSize)38 void ImageAnimatorComponent::SetFixedSize(int32_t fixedSize)
39 {
40 ArkUI_NumberValue value[] = { { .i32 = fixedSize } };
41 ArkUI_AttributeItem item = { value, 1 };
42 _nodeAPI->setAttribute(_component, NODE_IMAGE_ANIMATOR_FIXED_SIZE, &item);
43 }
44
SetReverse(int32_t reverse)45 void ImageAnimatorComponent::SetReverse(int32_t reverse)
46 {
47 ArkUI_NumberValue value[] = { { .i32 = reverse } };
48 ArkUI_AttributeItem item = { value, 1 };
49 _nodeAPI->setAttribute(_component, NODE_IMAGE_ANIMATOR_REVERSE, &item);
50 }
51
SetFillMode(int32_t mode)52 void ImageAnimatorComponent::SetFillMode(int32_t mode)
53 {
54 ArkUI_NumberValue value[] = { { .i32 = mode } };
55 ArkUI_AttributeItem item = { value, 1 };
56 _nodeAPI->setAttribute(_component, NODE_IMAGE_ANIMATOR_FILL_MODE, &item);
57 }
58
SetDuration(int32_t duration)59 void ImageAnimatorComponent::SetDuration(int32_t duration)
60 {
61 ArkUI_NumberValue value[] = { { .i32 = duration } };
62 ArkUI_AttributeItem item = { value, 1 };
63 _nodeAPI->setAttribute(_component, NODE_IMAGE_ANIMATOR_DURATION, &item);
64 }
65
RegisterOnStart(const std::function<void (ArkUI_NodeEvent * event)> & onStart)66 void ImageAnimatorComponent::RegisterOnStart(const std::function<void(ArkUI_NodeEvent *event)> &onStart)
67 {
68 onStart_ = onStart;
69 _nodeAPI->registerNodeEvent(_component, NODE_IMAGE_ANIMATOR_EVENT_ON_START, 0, nullptr);
70 }
71
RegisterOnCancel(const std::function<void (ArkUI_NodeEvent * event)> & onCancel)72 void ImageAnimatorComponent::RegisterOnCancel(const std::function<void(ArkUI_NodeEvent *event)> &onCancel)
73 {
74 onCancel_ = onCancel;
75 _nodeAPI->registerNodeEvent(_component, NODE_IMAGE_ANIMATOR_EVENT_ON_CANCEL, 0, nullptr);
76 }
77
RegisterOnPause(const std::function<void (ArkUI_NodeEvent * event)> & onPause)78 void ImageAnimatorComponent::RegisterOnPause(const std::function<void(ArkUI_NodeEvent *event)> &onPause)
79 {
80 onPause_ = onPause;
81 _nodeAPI->registerNodeEvent(_component, NODE_IMAGE_ANIMATOR_EVENT_ON_PAUSE, 0, nullptr);
82 }
83
RegisterOnRepeat(const std::function<void (ArkUI_NodeEvent * event)> & onRepeat)84 void ImageAnimatorComponent::RegisterOnRepeat(const std::function<void(ArkUI_NodeEvent *event)> &onRepeat)
85 {
86 onRepeat_ = onRepeat;
87 _nodeAPI->registerNodeEvent(_component, NODE_IMAGE_ANIMATOR_EVENT_ON_REPEAT, 0, nullptr);
88 }
89
RegisterOnFinish(const std::function<void (ArkUI_NodeEvent * event)> & onFinish)90 void ImageAnimatorComponent::RegisterOnFinish(const std::function<void(ArkUI_NodeEvent *event)> &onFinish)
91 {
92 onFinish_ = onFinish;
93 _nodeAPI->registerNodeEvent(_component, NODE_IMAGE_ANIMATOR_EVENT_ON_FINISH, 0, nullptr);
94 }
95
OnNodeEvent(ArkUI_NodeEvent * event)96 void ImageAnimatorComponent::OnNodeEvent(ArkUI_NodeEvent* event)
97 {
98 auto eventType = OH_ArkUI_NodeEvent_GetEventType(event);
99 switch (eventType) {
100 case NODE_IMAGE_ANIMATOR_EVENT_ON_START:
101 if (onStart_) {
102 onStart_(event);
103 }
104 break;
105 case NODE_IMAGE_ANIMATOR_EVENT_ON_CANCEL:
106 if (onCancel_) {
107 onCancel_(event);
108 }
109 break;
110 case NODE_IMAGE_ANIMATOR_EVENT_ON_PAUSE:
111 if (onPause_) {
112 onPause_(event);
113 }
114 break;
115 case NODE_IMAGE_ANIMATOR_EVENT_ON_REPEAT:
116 if (onRepeat_) {
117 onRepeat_(event);
118 }
119 break;
120 case NODE_IMAGE_ANIMATOR_EVENT_ON_FINISH:
121 if (onFinish_) {
122 onFinish_(event);
123 }
124 break;
125 default:
126 break;
127 }
128 }
129 } // namespace ArkUICapiTest
130