1 #ifndef __DALI_APPLICATION_H__
2 #define __DALI_APPLICATION_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/common/view-mode.h>
24 #include <dali/public-api/object/base-handle.h>
25 #include <dali/public-api/signals/callback.h>
29 #include "application-configuration.h"
35 * @addtogroup dali-adaptor-framework
39 namespace Internal DALI_INTERNAL
47 * An Application class object should be created by every application
48 * that wishes to use Dali. It provides a means for initialising the
49 * resources required by the Dali::Core.
51 * The Application class emits several signals which the user can
52 * connect to. The user should not create any Dali objects in the main
53 * function and instead should connect to the Init signal of the
54 * Application and create the Dali objects in the connected callback.
56 * Applications should follow the example below:
59 * void CreateProgram(Application app)
61 * // Create Dali components...
62 * // Can instantiate here, if required
65 * int main (int argc, char **argv)
67 * Application app = Application::New(&argc, &argv);
68 * app.InitSignal().Connect(&CreateProgram);
73 * If required, you can also connect class member functions to a signal:
77 * app.ResumeSignal().Connect(&app, &MyApplication::Resume);
80 * This class accepts command line arguments as well. The following options are supported:
83 * --no-vsync Disable VSync on Render
84 * -w|--width Stage Width
85 * -h|--height Stage Height
86 * -d|--dpi Emulated DPI
90 * When the above options are found, they are stripped from argv, and argc is updated appropriately.
92 class DALI_IMPORT_API Application : public BaseHandle
96 typedef Signal< void (Application&) > AppSignalType;
97 typedef Signal< void (Application&, void *) > AppControlSignalType;
100 * Decides whether a Dali application window is opaque or transparent.
104 OPAQUE = 0, ///< The window will be opaque
105 TRANSPARENT = 1 ///< The window transparency will match the alpha value set in Dali::Stage::SetBackgroundcolor()
111 * This is the constructor for applications without an argument list.
113 static Application New();
116 * This is the constructor for applications.
118 * @param[in,out] argc A pointer to the number of arguments
119 * @param[in,out] argv A pointer the the argument list
121 static Application New( int* argc, char **argv[] );
124 * This is the constructor for applications with a name
126 * @param[in,out] argc A pointer to the number of arguments
127 * @param[in,out] argv A pointer the the argument list
128 * @param[in] stylesheet The path to user defined theme file
130 static Application New( int* argc, char **argv[], const std::string& stylesheet );
133 * This is the constructor for applications with a name
135 * @param[in,out] argc A pointer to the number of arguments
136 * @param[in,out] argv A pointer the the argument list
137 * @param[in] stylesheet The path to user defined theme file
138 * @param[in] windowMode A member of WINDOW_MODE
140 static Application New( int* argc, char **argv[], const std::string& stylesheet, WINDOW_MODE windowMode );
143 * Construct an empty handle
150 Application( const Application& application );
153 * Assignment operator
155 Application& operator=( const Application& applicaton );
160 * This is non-virtual since derived Handle types must not contain data or virtual methods.
166 * This starts the application. Choosing this form of main loop indicates that the default
167 * application configuration of APPLICATION_HANDLES_CONTEXT_LOSS is used. On platforms where
168 * context loss can occur, the application is responsible for tearing down and re-loading UI.
169 * The application should listen to Stage::ContextLostSignal and Stage::ContextRegainedSignal.
174 * This starts the application, and allows the app to choose a different configuration.
175 * If the application plans on using the ReplaceSurface or ReplaceWindow API, then this will
176 * trigger context loss & regain.
177 * The application should listen to Stage::ContextLostSignal and Stage::ContextRegainedSignal.
179 void MainLoop(Configuration::ContextLoss configuration);
182 * This lowers the application to bottom without actually quitting it
187 * This quits the application. Tizen applications should use Lower to improve re-start performance unless they need to Quit completely.
192 * Ensures that the function passed in is called from the main loop when it is idle.
193 * @note Function must be called from main event thread only
195 * A callback of the following type may be used:
200 * @param[in] callback The function to call.
201 * @return true if added successfully, false otherwise
203 * @note Ownership of the callback is passed onto this class.
205 bool AddIdle( CallbackBase* callback );
208 * Retrieves the window used by the Application class.
209 * The application writer can use the window to change indicator and orientation
211 * @return A handle to the window
216 * Replace the current window.
217 * This will force context loss.
218 * If you plan on using this API in your application, then you should configure
219 * it to prevent discard behaviour when handling the Init signal.
220 * @param[in] windowPosition The position and size parameters of the new window
221 * @param[in] name The name of the new window
223 void ReplaceWindow(PositionSize windowPosition, const std::string& name);
225 public: // Stereoscopy
228 * Set the viewing mode for the application.
229 * @param[in] viewMode The new viewing mode.
231 void SetViewMode( ViewMode viewMode );
234 * Get the current viewing mode.
235 * @return The current viewing mode.
237 ViewMode GetViewMode() const;
240 * Set the stereo base (eye separation) for Stereoscopic 3D
242 * @param[in] stereoBase The stereo base (eye separation) for Stereoscopic 3D
244 void SetStereoBase( float stereoBase );
247 * Get the stereo base (eye separation) for Stereoscopic 3D
249 * @return The stereo base (eye separation) for Stereoscopic 3D
251 float GetStereoBase() const;
256 * The user should connect to this signal to determine when they should initialise
259 AppSignalType& InitSignal();
262 * The user should connect to this signal to determine when they should terminate
265 AppSignalType& TerminateSignal();
268 * The user should connect to this signal if they need to perform any special
269 * activities when the application is about to be paused.
271 AppSignalType& PauseSignal();
274 * The user should connect to this signal if they need to perform any special
275 * activities when the application has resumed.
277 AppSignalType& ResumeSignal();
280 * This signal is sent when the system requires the user to reinitialise itself.
282 AppSignalType& ResetSignal();
285 * This signal is emitted when the window the application is rendering on is resized.
287 AppSignalType& ResizeSignal();
290 * This signal is emitted when another application sends a launch request to the application.
291 * When the application is launched, this signal is emitted after the main loop of the application starts up.
292 * The passed parameter describes the launch request and contains the information about why the application is launched.
294 AppControlSignalType& AppControlSignal();
297 * This signal is emitted when the language is changed on the device.
299 AppSignalType& LanguageChangedSignal();
302 * This signal is emitted when the region of the device is changed.
304 AppSignalType& RegionChangedSignal();
307 * This signal is emitted when the battery level of the device is low.
309 AppSignalType& BatteryLowSignal();
312 * This signal is emitted when the memory level of the device is low.
314 AppSignalType& MemoryLowSignal();
316 public: // Not intended for application developers
318 * Internal constructor
320 explicit DALI_INTERNAL Application(Internal::Adaptor::Application* application);
328 #endif // __DALI_APPLICATION_H__