1 /*
2  * Copyright (c) 2023 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 "bridge/declarative_frontend/jsview/models/image_animator_model_impl.h"
17 
18 #include "bridge/declarative_frontend/view_stack_processor.h"
19 #include "core/event/ace_event_handler.h"
20 
21 constexpr uint32_t DEFAULT_DURATION = 1000; // ms
22 constexpr uint32_t DEFAULT_ITERATIONS = 1;
23 
24 namespace OHOS::Ace::Framework {
Create()25 void ImageAnimatorModelImpl::Create()
26 {
27     RefPtr<ImageAnimatorComponent> imageAnimator = AceType::MakeRefPtr<ImageAnimatorComponent>("ImageAnimator");
28     imageAnimator->SetIteration(DEFAULT_ITERATIONS);
29     imageAnimator->SetDuration(DEFAULT_DURATION);
30     ViewStackProcessor::GetInstance()->Push(imageAnimator);
31     // Init Common Styles for ImageAnimator
32     ViewStackProcessor::GetInstance()->GetBoxComponent();
33 }
34 
SetImages(const std::vector<ImageProperties> & images)35 void ImageAnimatorModelImpl::SetImages(const std::vector<ImageProperties>& images)
36 {
37     auto imageAnimator =
38         AceType::DynamicCast<ImageAnimatorComponent>(ViewStackProcessor::GetInstance()->GetMainComponent());
39     if (imageAnimator) {
40         imageAnimator->SetImageProperties(images);
41     }
42 }
43 
SetState(int32_t state)44 void ImageAnimatorModelImpl::SetState(int32_t state)
45 {
46     auto imageAnimator =
47         AceType::DynamicCast<ImageAnimatorComponent>(ViewStackProcessor::GetInstance()->GetMainComponent());
48     if (imageAnimator) {
49         imageAnimator->SetStatus(static_cast<Animator::Status>(state));
50     }
51 }
52 
SetDuration(int32_t duration)53 void ImageAnimatorModelImpl::SetDuration(int32_t duration)
54 {
55     auto imageAnimator =
56         AceType::DynamicCast<ImageAnimatorComponent>(ViewStackProcessor::GetInstance()->GetMainComponent());
57     if (imageAnimator) {
58         imageAnimator->SetDuration(duration);
59     }
60 }
61 
SetIteration(int32_t iteration)62 void ImageAnimatorModelImpl::SetIteration(int32_t iteration)
63 {
64     auto imageAnimator =
65         AceType::DynamicCast<ImageAnimatorComponent>(ViewStackProcessor::GetInstance()->GetMainComponent());
66     if (imageAnimator) {
67         imageAnimator->SetIteration(iteration);
68     }
69 }
70 
SetFillMode(int32_t fillMode)71 void ImageAnimatorModelImpl::SetFillMode(int32_t fillMode)
72 {
73     auto imageAnimator =
74         AceType::DynamicCast<ImageAnimatorComponent>(ViewStackProcessor::GetInstance()->GetMainComponent());
75     if (imageAnimator) {
76         imageAnimator->SetFillMode(static_cast<FillMode>(fillMode));
77     }
78 }
79 
SetPreDecode(int32_t preDecode)80 void ImageAnimatorModelImpl::SetPreDecode(int32_t preDecode)
81 {
82     auto imageAnimator =
83         AceType::DynamicCast<ImageAnimatorComponent>(ViewStackProcessor::GetInstance()->GetMainComponent());
84     if (imageAnimator) {
85         imageAnimator->SetPreDecode(preDecode);
86     }
87 }
88 
SetIsReverse(bool isReverse)89 void ImageAnimatorModelImpl::SetIsReverse(bool isReverse)
90 {
91     auto imageAnimator =
92         AceType::DynamicCast<ImageAnimatorComponent>(ViewStackProcessor::GetInstance()->GetMainComponent());
93     if (imageAnimator) {
94         imageAnimator->SetIsReverse(isReverse);
95     }
96 }
97 
SetFixedSize(bool fixedSize)98 void ImageAnimatorModelImpl::SetFixedSize(bool fixedSize)
99 {
100     auto imageAnimator =
101         AceType::DynamicCast<ImageAnimatorComponent>(ViewStackProcessor::GetInstance()->GetMainComponent());
102     if (imageAnimator) {
103         imageAnimator->SetIsFixedSize(fixedSize);
104     }
105 }
106 
SetOnStart(std::function<void ()> && OnStart)107 void ImageAnimatorModelImpl::SetOnStart(std::function<void()>&& OnStart)
108 {
109     auto imageAnimator =
110         AceType::DynamicCast<ImageAnimatorComponent>(ViewStackProcessor::GetInstance()->GetMainComponent());
111     if (!imageAnimator) {
112         return;
113     }
114     const auto& controller = imageAnimator->GetImageAnimatorController();
115     if (controller) {
116         auto startEvent = EventMarker(std::move(OnStart));
117         controller->SetStartEvent(startEvent);
118     }
119 }
120 
SetOnPause(std::function<void ()> && OnPause)121 void ImageAnimatorModelImpl::SetOnPause(std::function<void()>&& OnPause)
122 {
123     auto imageAnimator =
124         AceType::DynamicCast<ImageAnimatorComponent>(ViewStackProcessor::GetInstance()->GetMainComponent());
125     if (!imageAnimator) {
126         return;
127     }
128     const auto& controller = imageAnimator->GetImageAnimatorController();
129     if (controller) {
130         auto startEvent = EventMarker(std::move(OnPause));
131         controller->SetPauseEvent(startEvent);
132     }
133 }
134 
SetOnRepeat(std::function<void ()> && OnRepeat)135 void ImageAnimatorModelImpl::SetOnRepeat(std::function<void()>&& OnRepeat)
136 {
137     auto imageAnimator =
138         AceType::DynamicCast<ImageAnimatorComponent>(ViewStackProcessor::GetInstance()->GetMainComponent());
139     if (!imageAnimator) {
140         return;
141     }
142     const auto& controller = imageAnimator->GetImageAnimatorController();
143     if (controller) {
144         auto startEvent = EventMarker(std::move(OnRepeat));
145         controller->SetRepeatEvent(startEvent);
146     }
147 }
148 
SetOnCancel(std::function<void ()> && OnCancel)149 void ImageAnimatorModelImpl::SetOnCancel(std::function<void()>&& OnCancel)
150 {
151     auto imageAnimator =
152         AceType::DynamicCast<ImageAnimatorComponent>(ViewStackProcessor::GetInstance()->GetMainComponent());
153     if (!imageAnimator) {
154         return;
155     }
156     const auto& controller = imageAnimator->GetImageAnimatorController();
157     if (controller) {
158         auto startEvent = EventMarker(std::move(OnCancel));
159         controller->SetCancelEvent(startEvent);
160     }
161 }
162 
SetOnFinish(std::function<void ()> && OnFinish)163 void ImageAnimatorModelImpl::SetOnFinish(std::function<void()>&& OnFinish)
164 {
165     auto imageAnimator =
166         AceType::DynamicCast<ImageAnimatorComponent>(ViewStackProcessor::GetInstance()->GetMainComponent());
167     if (!imageAnimator) {
168         return;
169     }
170     const auto& controller = imageAnimator->GetImageAnimatorController();
171     if (controller) {
172         auto startEvent = EventMarker(std::move(OnFinish));
173         controller->SetStopEvent(startEvent);
174     }
175 }
176 } // namespace OHOS::Ace::Framework
177