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