1 #ifndef __DALI_TIMER_H__
2 #define __DALI_TIMER_H__
5 * Copyright (c) 2015 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>
29 namespace Internal DALI_INTERNAL
38 * @brief Mechanism to issue simple periodic or one-shot events.
40 * Timer is provided for application developers to be able to issue
41 * simple periodic or one-shot events. Please note that timer
42 * callback functions should return as soon as possible, because they
43 * block the next SignalTick. Please note that timer signals are not
44 * in sync with Dali's render timer.
46 * This class is a handle class so it can be stack allocated and used
49 class DALI_IMPORT_API Timer : public BaseHandle
51 public: // Signal typedefs
53 typedef Signal< bool () > TimerSignalType; ///< Timer finished signal callback type
58 * @brief Constructor, creates an uninitialized timer.
60 * Call New to fully construct a timer.
65 * @brief Create an tick Timer that emits periodic signal.
67 * @param[in] milliSec Interval in milliseconds.
70 static Timer New( unsigned int milliSec );
73 * @brief Copy constructor.
75 * @param[in] timer The handle to copy. The copied handle will point at the same implementation
77 Timer( const Timer& timer );
80 * @brief Assignment operator.
82 * @param[in] timer The handle to copy. This handle will point at the same implementation
83 * as the copied handle.
84 * @return Reference to this timer handle
86 Timer& operator=( const Timer& timer );
91 * This is non-virtual since derived Handle types must not contain data or virtual methods.
96 * @brief Downcast an Object handle to Timer handle.
98 * If handle points to a Timer object the downcast produces a valid
99 * handle. If not the returned handle is left uninitialized.
101 * @param[in] handle to An object
102 * @return handle to a Timer object or an uninitialized handle
104 static Timer DownCast( BaseHandle handle );
107 * @brief Start timer.
109 * In case a Timer is already running it's time is reset and timer is restarted.
119 * @brief Sets a new interval on the timer and starts the timer.
121 * Cancels the previous timer.
122 * @param milliSec Interval in milliseconds.
124 void SetInterval( unsigned int milliSec );
127 * @brief Get the interval of timer.
128 * @returns Interval in milliseconds.
130 unsigned int GetInterval() const;
133 * @brief Tells whether timer is running.
134 * @return Whether Timer is started or not.
136 bool IsRunning() const;
141 * @brief Signal emitted after specified time interval.
143 * The return of the callback decides whether signal emission stops or continues.
144 * If the callback function returns false emission will stop, if true it will continue
145 * This return value is ignored for one-shot events, which will always stop after the first execution.
146 * @returns The signal to Connect() with.
148 TimerSignalType& TickSignal();
150 public: // Not intended for application developers
151 explicit DALI_INTERNAL Timer(Internal::Adaptor::Timer* timer);
156 #endif // __DALI_TIMER_H__