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()25void 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)35void 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)44void 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)53void 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)62void 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)71void 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)80void 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)89void 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)98void 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)107void 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)121void 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)135void 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)149void 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)163void 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