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