1a3e0fd82Sopenharmony_ci/* 2a3e0fd82Sopenharmony_ci * Copyright (c) 2020-2021 Huawei Device Co., Ltd. 3a3e0fd82Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4a3e0fd82Sopenharmony_ci * you may not use this file except in compliance with the License. 5a3e0fd82Sopenharmony_ci * You may obtain a copy of the License at 6a3e0fd82Sopenharmony_ci * 7a3e0fd82Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8a3e0fd82Sopenharmony_ci * 9a3e0fd82Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10a3e0fd82Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11a3e0fd82Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12a3e0fd82Sopenharmony_ci * See the License for the specific language governing permissions and 13a3e0fd82Sopenharmony_ci * limitations under the License. 14a3e0fd82Sopenharmony_ci */ 15a3e0fd82Sopenharmony_ci 16a3e0fd82Sopenharmony_ci/** 17a3e0fd82Sopenharmony_ci * @addtogroup UI_Animator 18a3e0fd82Sopenharmony_ci * @{ 19a3e0fd82Sopenharmony_ci * 20a3e0fd82Sopenharmony_ci * @brief Defines UI animation effects and provides matched curves. 21a3e0fd82Sopenharmony_ci * 22a3e0fd82Sopenharmony_ci * @since 1.0 23a3e0fd82Sopenharmony_ci * @version 1.0 24a3e0fd82Sopenharmony_ci */ 25a3e0fd82Sopenharmony_ci 26a3e0fd82Sopenharmony_ci/** 27a3e0fd82Sopenharmony_ci * @file animator.h 28a3e0fd82Sopenharmony_ci * 29a3e0fd82Sopenharmony_ci * @brief Defines the attributes and common functions of the animator module. 30a3e0fd82Sopenharmony_ci * 31a3e0fd82Sopenharmony_ci * @since 1.0 32a3e0fd82Sopenharmony_ci * @version 1.0 33a3e0fd82Sopenharmony_ci */ 34a3e0fd82Sopenharmony_ci 35a3e0fd82Sopenharmony_ci#ifndef GRAPHIC_LITE_ANIMATOR_H 36a3e0fd82Sopenharmony_ci#define GRAPHIC_LITE_ANIMATOR_H 37a3e0fd82Sopenharmony_ci 38a3e0fd82Sopenharmony_ci#include "components/ui_view.h" 39a3e0fd82Sopenharmony_ci 40a3e0fd82Sopenharmony_cinamespace OHOS { 41a3e0fd82Sopenharmony_ci/** 42a3e0fd82Sopenharmony_ci * @brief Represents the animator callback. 43a3e0fd82Sopenharmony_ci * 44a3e0fd82Sopenharmony_ci * You need to implement the callback function to produce specific animator effects. 45a3e0fd82Sopenharmony_ci * 46a3e0fd82Sopenharmony_ci * @since 1.0 47a3e0fd82Sopenharmony_ci * @version 1.0 48a3e0fd82Sopenharmony_ci */ 49a3e0fd82Sopenharmony_ciclass AnimatorCallback : public HeapBase { 50a3e0fd82Sopenharmony_cipublic: 51a3e0fd82Sopenharmony_ci /** 52a3e0fd82Sopenharmony_ci * @brief Called when each frame starts. This is a pure virtual function, which needs your inheritance 53a3e0fd82Sopenharmony_ci * and implementation. 54a3e0fd82Sopenharmony_ci * 55a3e0fd82Sopenharmony_ci * @param view Indicates the <b>UIView</b> instance, which is added from the constructor of 56a3e0fd82Sopenharmony_ci * the <b>Animator</b> class. 57a3e0fd82Sopenharmony_ci * @since 1.0 58a3e0fd82Sopenharmony_ci * @version 1.0 59a3e0fd82Sopenharmony_ci */ 60a3e0fd82Sopenharmony_ci virtual void Callback(UIView* view) = 0; 61a3e0fd82Sopenharmony_ci 62a3e0fd82Sopenharmony_ci /** 63a3e0fd82Sopenharmony_ci * @brief Called when an animator stops. This is a pure virtual function, which needs your inheritance and 64a3e0fd82Sopenharmony_ci * implementation. 65a3e0fd82Sopenharmony_ci * 66a3e0fd82Sopenharmony_ci * @param view Indicates the <b>UIView</b> instance, which is added from the constructor of 67a3e0fd82Sopenharmony_ci * the <b>Animator</b> class. 68a3e0fd82Sopenharmony_ci * @since 1.0 69a3e0fd82Sopenharmony_ci * @version 1.0 70a3e0fd82Sopenharmony_ci */ 71a3e0fd82Sopenharmony_ci virtual void OnStop(UIView& view) {} 72a3e0fd82Sopenharmony_ci 73a3e0fd82Sopenharmony_ci /** 74a3e0fd82Sopenharmony_ci * @brief A default destructor used to delete an <b>AnimatorCallback</b> instance. 75a3e0fd82Sopenharmony_ci * 76a3e0fd82Sopenharmony_ci * @since 1.0 77a3e0fd82Sopenharmony_ci * @version 1.0 78a3e0fd82Sopenharmony_ci */ 79a3e0fd82Sopenharmony_ci virtual ~AnimatorCallback() {} 80a3e0fd82Sopenharmony_ci}; 81a3e0fd82Sopenharmony_ci 82a3e0fd82Sopenharmony_ci/** 83a3e0fd82Sopenharmony_ci * @brief Represents an animator. 84a3e0fd82Sopenharmony_ci * 85a3e0fd82Sopenharmony_ci * This class is used to set the animator attributes, such as the duration, whether an animator is repeated, 86a3e0fd82Sopenharmony_ci * start and stop of an animator. 87a3e0fd82Sopenharmony_ci * 88a3e0fd82Sopenharmony_ci * @see Animator 89a3e0fd82Sopenharmony_ci * @since 1.0 90a3e0fd82Sopenharmony_ci * @version 1.0 91a3e0fd82Sopenharmony_ci */ 92a3e0fd82Sopenharmony_ciclass Animator : public HeapBase { 93a3e0fd82Sopenharmony_cipublic: 94a3e0fd82Sopenharmony_ci /** 95a3e0fd82Sopenharmony_ci * @brief Enumerates the states of this animator. 96a3e0fd82Sopenharmony_ci */ 97a3e0fd82Sopenharmony_ci enum : uint8_t { 98a3e0fd82Sopenharmony_ci /** Stop */ 99a3e0fd82Sopenharmony_ci STOP, 100a3e0fd82Sopenharmony_ci /** Start */ 101a3e0fd82Sopenharmony_ci START, 102a3e0fd82Sopenharmony_ci /** Pause */ 103a3e0fd82Sopenharmony_ci PAUSE, 104a3e0fd82Sopenharmony_ci /** Running (reserved and not used currently) */ 105a3e0fd82Sopenharmony_ci RUNNING 106a3e0fd82Sopenharmony_ci }; 107a3e0fd82Sopenharmony_ci 108a3e0fd82Sopenharmony_ci /** 109a3e0fd82Sopenharmony_ci * @brief A default constructor used to create an <b>Animator</b> instance. 110a3e0fd82Sopenharmony_ci * 111a3e0fd82Sopenharmony_ci * @since 1.0 112a3e0fd82Sopenharmony_ci * @version 1.0 113a3e0fd82Sopenharmony_ci */ 114a3e0fd82Sopenharmony_ci Animator() 115a3e0fd82Sopenharmony_ci : callback_(nullptr), view_(nullptr), state_(STOP), period_(0), repeat_(false), runTime_(0), lastRunTime_(0) 116a3e0fd82Sopenharmony_ci { 117a3e0fd82Sopenharmony_ci } 118a3e0fd82Sopenharmony_ci 119a3e0fd82Sopenharmony_ci /** 120a3e0fd82Sopenharmony_ci * @brief A constructor used to create an <b>Animator</b> instance. 121a3e0fd82Sopenharmony_ci * 122a3e0fd82Sopenharmony_ci * @param callback Indicates the animator callback for producing animator effects. 123a3e0fd82Sopenharmony_ci * For details, see {@link AnimatorCallback}. 124a3e0fd82Sopenharmony_ci * @param view Indicates the <b>UIView</b> instance bound to an animator, which can be used when invoking 125a3e0fd82Sopenharmony_ci * the animator callback. 126a3e0fd82Sopenharmony_ci * @param time Indicates the duration of this animator, in milliseconds. 127a3e0fd82Sopenharmony_ci * @param repeat Specifies whether to repeat this animator. <b>true</b> indicates the animator is repeated, 128a3e0fd82Sopenharmony_ci * and <b>false</b> (default value) indicates the animator is played once. 129a3e0fd82Sopenharmony_ci * @since 1.0 130a3e0fd82Sopenharmony_ci * @version 1.0 131a3e0fd82Sopenharmony_ci */ 132a3e0fd82Sopenharmony_ci Animator(AnimatorCallback* callback, UIView* view, uint32_t time, bool repeat) 133a3e0fd82Sopenharmony_ci : callback_(callback), view_(view), state_(STOP), period_(time), repeat_(repeat), runTime_(0), lastRunTime_(0) 134a3e0fd82Sopenharmony_ci { 135a3e0fd82Sopenharmony_ci } 136a3e0fd82Sopenharmony_ci 137a3e0fd82Sopenharmony_ci /** 138a3e0fd82Sopenharmony_ci * @brief A destructor used to delete the <b>Animator</b> instance. 139a3e0fd82Sopenharmony_ci * 140a3e0fd82Sopenharmony_ci * @since 1.0 141a3e0fd82Sopenharmony_ci * @version 1.0 142a3e0fd82Sopenharmony_ci */ 143a3e0fd82Sopenharmony_ci virtual ~Animator(); 144a3e0fd82Sopenharmony_ci 145a3e0fd82Sopenharmony_ci /** 146a3e0fd82Sopenharmony_ci * @brief Starts this animator. 147a3e0fd82Sopenharmony_ci * 148a3e0fd82Sopenharmony_ci * @see Stop 149a3e0fd82Sopenharmony_ci * @since 1.0 150a3e0fd82Sopenharmony_ci * @version 1.0 151a3e0fd82Sopenharmony_ci */ 152a3e0fd82Sopenharmony_ci void Start(); 153a3e0fd82Sopenharmony_ci 154a3e0fd82Sopenharmony_ci /** 155a3e0fd82Sopenharmony_ci * @brief Stops this animator. 156a3e0fd82Sopenharmony_ci * 157a3e0fd82Sopenharmony_ci * @see Start 158a3e0fd82Sopenharmony_ci * @since 1.0 159a3e0fd82Sopenharmony_ci * @version 1.0 160a3e0fd82Sopenharmony_ci */ 161a3e0fd82Sopenharmony_ci void Stop(); 162a3e0fd82Sopenharmony_ci 163a3e0fd82Sopenharmony_ci /** 164a3e0fd82Sopenharmony_ci * @brief Pauses this animator. 165a3e0fd82Sopenharmony_ci * 166a3e0fd82Sopenharmony_ci * @see Resume 167a3e0fd82Sopenharmony_ci * @since 1.0 168a3e0fd82Sopenharmony_ci * @version 1.0 169a3e0fd82Sopenharmony_ci */ 170a3e0fd82Sopenharmony_ci void Pause(); 171a3e0fd82Sopenharmony_ci 172a3e0fd82Sopenharmony_ci /** 173a3e0fd82Sopenharmony_ci * @brief Resumes this animator from where it was paused. 174a3e0fd82Sopenharmony_ci * 175a3e0fd82Sopenharmony_ci * @see Pause 176a3e0fd82Sopenharmony_ci * @since 1.0 177a3e0fd82Sopenharmony_ci * @version 1.0 178a3e0fd82Sopenharmony_ci */ 179a3e0fd82Sopenharmony_ci void Resume(); 180a3e0fd82Sopenharmony_ci 181a3e0fd82Sopenharmony_ci /** 182a3e0fd82Sopenharmony_ci * @brief Obtains the current state of this animator. 183a3e0fd82Sopenharmony_ci * 184a3e0fd82Sopenharmony_ci * @return Returns the current animator state, which can be {@link START}, {@link STOP}, or {@link PAUSE}. 185a3e0fd82Sopenharmony_ci * @see SetState 186a3e0fd82Sopenharmony_ci * @since 1.0 187a3e0fd82Sopenharmony_ci * @version 1.0 188a3e0fd82Sopenharmony_ci */ 189a3e0fd82Sopenharmony_ci uint8_t GetState() const 190a3e0fd82Sopenharmony_ci { 191a3e0fd82Sopenharmony_ci return state_; 192a3e0fd82Sopenharmony_ci } 193a3e0fd82Sopenharmony_ci 194a3e0fd82Sopenharmony_ci /** 195a3e0fd82Sopenharmony_ci * @brief Sets the current state for this animator. 196a3e0fd82Sopenharmony_ci * 197a3e0fd82Sopenharmony_ci * @param state Indicates the current animator state to set, which can be {@link STOP}, {@link START}, 198a3e0fd82Sopenharmony_ci * or {@link PAUSE}. 199a3e0fd82Sopenharmony_ci * @see GetState 200a3e0fd82Sopenharmony_ci * @since 1.0 201a3e0fd82Sopenharmony_ci * @version 1.0 202a3e0fd82Sopenharmony_ci */ 203a3e0fd82Sopenharmony_ci void SetState(uint8_t state) 204a3e0fd82Sopenharmony_ci { 205a3e0fd82Sopenharmony_ci state_ = state; 206a3e0fd82Sopenharmony_ci } 207a3e0fd82Sopenharmony_ci 208a3e0fd82Sopenharmony_ci /** 209a3e0fd82Sopenharmony_ci * @brief Obtains the total duration of this animator. 210a3e0fd82Sopenharmony_ci * 211a3e0fd82Sopenharmony_ci * @return Returns the total duration. 212a3e0fd82Sopenharmony_ci * @see SetTime 213a3e0fd82Sopenharmony_ci * @since 1.0 214a3e0fd82Sopenharmony_ci * @version 1.0 215a3e0fd82Sopenharmony_ci */ 216a3e0fd82Sopenharmony_ci uint32_t GetTime() const 217a3e0fd82Sopenharmony_ci { 218a3e0fd82Sopenharmony_ci return period_; 219a3e0fd82Sopenharmony_ci } 220a3e0fd82Sopenharmony_ci 221a3e0fd82Sopenharmony_ci /** 222a3e0fd82Sopenharmony_ci * @brief Sets the total duration for this animator. 223a3e0fd82Sopenharmony_ci * 224a3e0fd82Sopenharmony_ci * @param time Indicates the total duration to set, in milliseconds. 225a3e0fd82Sopenharmony_ci * @see GetTime 226a3e0fd82Sopenharmony_ci * @since 1.0 227a3e0fd82Sopenharmony_ci * @version 1.0 228a3e0fd82Sopenharmony_ci */ 229a3e0fd82Sopenharmony_ci void SetTime(uint32_t period) 230a3e0fd82Sopenharmony_ci { 231a3e0fd82Sopenharmony_ci period_ = period; 232a3e0fd82Sopenharmony_ci } 233a3e0fd82Sopenharmony_ci 234a3e0fd82Sopenharmony_ci /** 235a3e0fd82Sopenharmony_ci * @brief Obtains the running time of this animator. 236a3e0fd82Sopenharmony_ci * 237a3e0fd82Sopenharmony_ci * @return Returns the running time. 238a3e0fd82Sopenharmony_ci * @see SetRunTime 239a3e0fd82Sopenharmony_ci * @since 1.0 240a3e0fd82Sopenharmony_ci * @version 1.0 241a3e0fd82Sopenharmony_ci */ 242a3e0fd82Sopenharmony_ci uint32_t GetRunTime() const 243a3e0fd82Sopenharmony_ci { 244a3e0fd82Sopenharmony_ci return runTime_; 245a3e0fd82Sopenharmony_ci } 246a3e0fd82Sopenharmony_ci 247a3e0fd82Sopenharmony_ci /** 248a3e0fd82Sopenharmony_ci * @brief Sets the running time for this animator. 249a3e0fd82Sopenharmony_ci * 250a3e0fd82Sopenharmony_ci * @param runTime Indicates the running time to set, in milliseconds. 251a3e0fd82Sopenharmony_ci * @see GetRunTime 252a3e0fd82Sopenharmony_ci * @since 1.0 253a3e0fd82Sopenharmony_ci * @version 1.0 254a3e0fd82Sopenharmony_ci */ 255a3e0fd82Sopenharmony_ci void SetRunTime(uint32_t runTime) 256a3e0fd82Sopenharmony_ci { 257a3e0fd82Sopenharmony_ci runTime_ = runTime; 258a3e0fd82Sopenharmony_ci } 259a3e0fd82Sopenharmony_ci 260a3e0fd82Sopenharmony_ci /** 261a3e0fd82Sopenharmony_ci * @brief Checks whether this animator is repeated. 262a3e0fd82Sopenharmony_ci * 263a3e0fd82Sopenharmony_ci * @return Returns <b>true</b> if the animator is repeated; returns <b>false</b> if the animator is played once. 264a3e0fd82Sopenharmony_ci * @since 1.0 265a3e0fd82Sopenharmony_ci * @version 1.0 266a3e0fd82Sopenharmony_ci */ 267a3e0fd82Sopenharmony_ci bool IsRepeat() const 268a3e0fd82Sopenharmony_ci { 269a3e0fd82Sopenharmony_ci return repeat_; 270a3e0fd82Sopenharmony_ci } 271a3e0fd82Sopenharmony_ci 272a3e0fd82Sopenharmony_ci void Run(); 273a3e0fd82Sopenharmony_ci 274a3e0fd82Sopenharmony_ciprotected: 275a3e0fd82Sopenharmony_ci AnimatorCallback* callback_; 276a3e0fd82Sopenharmony_ci UIView* view_; 277a3e0fd82Sopenharmony_ci uint8_t state_; 278a3e0fd82Sopenharmony_ci uint32_t period_; 279a3e0fd82Sopenharmony_ci bool repeat_; 280a3e0fd82Sopenharmony_ci uint32_t runTime_; 281a3e0fd82Sopenharmony_ci uint32_t lastRunTime_; 282a3e0fd82Sopenharmony_ci}; 283a3e0fd82Sopenharmony_ci} // namespace OHOS 284a3e0fd82Sopenharmony_ci#endif 285