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