1 #ifndef __DALI_TIMER_H__
2 #define __DALI_TIMER_H__
5 * Copyright (c) 2018 Samsung Electronics Co., Ltd.
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
23 #include <dali/public-api/object/base-handle.h>
24 #include <dali/public-api/signals/dali-signal.h>
27 #include <dali/public-api/dali-adaptor-common.h>
32 * @addtogroup dali_adaptor_framework
36 namespace Internal DALI_INTERNAL
45 * @brief Mechanism to issue simple periodic or one-shot events.
47 * Timer is provided for application developers to be able to issue
48 * simple periodic or one-shot events. Please note that timer
49 * callback functions should return as soon as possible, because they
50 * block the next SignalTick. Please note that timer signals are not
51 * in sync with Dali's render timer.
53 * This class is a handle class so it can be stack allocated and used
57 class DALI_ADAPTOR_API Timer : public BaseHandle
59 public: // Signal typedefs
61 typedef Signal< bool () > TimerSignalType; ///< Timer finished signal callback type @SINCE_1_0.0
66 * @brief Constructor, creates an uninitialized timer.
68 * Call New to fully construct a timer.
74 * @brief Creates a tick Timer that emits periodic signal.
77 * @param[in] milliSec Interval in milliseconds
80 static Timer New( unsigned int milliSec );
83 * @brief Copy constructor.
86 * @param[in] timer The handle to copy. The copied handle will point at the same implementation
88 Timer( const Timer& timer );
91 * @brief Assignment operator.
94 * @param[in] timer The handle to copy. This handle will point at the same implementation
95 * as the copied handle
96 * @return Reference to this timer handle
98 Timer& operator=( const Timer& timer );
103 * This is non-virtual since derived Handle types must not contain data or virtual methods.
109 * @brief Downcasts a handle to Timer handle.
111 * If handle points to a Timer object, the downcast produces a valid handle.
112 * If not, the returned handle is left uninitialized.
115 * @param[in] handle to An object
116 * @return handle to a Timer object or an uninitialized handle
118 static Timer DownCast( BaseHandle handle );
121 * @brief Starts timer.
123 * In case a Timer is already running, its time is reset and timer is restarted.
129 * @brief Stops timer.
135 * @brief Sets a new interval on the timer and starts the timer.
137 * Cancels the previous timer.
139 * @param[in] milliSec Interval in milliseconds
141 void SetInterval( unsigned int milliSec );
144 * @brief Gets the interval of timer.
147 * @return Interval in milliseconds
149 unsigned int GetInterval() const;
152 * @brief Tells whether timer is running.
154 * @return Whether Timer is started or not
156 bool IsRunning() const;
161 * @brief Signal emitted after specified time interval.
163 * The return of the callback decides whether signal emission stops or continues.
164 * If the callback function returns false, emission will stop and if true, it will continue.
165 * This return value is ignored for one-shot events, which will always stop after the first execution.
166 * @return The signal to Connect() with
169 TimerSignalType& TickSignal();
171 public: // Not intended for application developers
172 explicit DALI_INTERNAL Timer(Internal::Adaptor::Timer* timer);
180 #endif // __DALI_TIMER_H__