X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Fpublic-api%2Fadaptor-framework%2Fapplication.h;h=4861e715382c89567cc53a62ee14399bbeae7249;hb=dc60601c7426f0a10aefae793ecfdb6b5355a9ba;hp=87ebf92bec1ffc41dce1e6b58487a5486fd07fd1;hpb=adb737d9e59851699accda2f9039cbf837ff2868;p=platform%2Fcore%2Fuifw%2Fdali-adaptor.git diff --git a/dali/public-api/adaptor-framework/application.h b/dali/public-api/adaptor-framework/application.h index 87ebf92..4861e71 100644 --- a/dali/public-api/adaptor-framework/application.h +++ b/dali/public-api/adaptor-framework/application.h @@ -2,7 +2,7 @@ #define DALI_APPLICATION_H /* - * Copyright (c) 2020 Samsung Electronics Co., Ltd. + * Copyright (c) 2022 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -28,7 +28,6 @@ namespace Dali { - class ObjectRegistry; /** @@ -42,7 +41,7 @@ namespace Adaptor { class Application; } -} +} // namespace DALI_INTERNAL /** * @brief An Application class object should be created by every application * that wishes to use Dali. @@ -91,6 +90,22 @@ class Application; * app.ResumeSignal().Connect(&app, &MyApplication::Resume); * @endcode * + * + * #### UI thread + * There is the UI thread feature. + * UI thread is an additional thread that an Application object creates. The thread is for UI events. + * + * When the UI thread feature is enabled, you can use the task signals(TaskInit, TaskTerminate, TaskAppControl, TaskLanguageChanged, TaskLowBattery, and TaskLowMemory). + * The task signals are emitted on the main thread, + * and the normal signals(Init, Terminate, Pause, Resume, Reset, AppControl, LanguageChanged, Region, LowBattery, and LowMemory) are emitted on the UI thread. + * + * If you want to handle windows or actors in cases like when the memory level of the device is low, you have to use the normal signals, not the task signals. + * Callbacks of all signals in DALi except the task signals are emitted on the UI thread. (e.g., Timer callbacks are emitted on the UI thread.) + * + * To enable the UI Thread, you can use this method. you have to set True to the useUiThread. + * Dali::Application::New(int *argc, char **argv[], const std::string &stylesheet, Application::WINDOW_MODE windowMode, PositionSize positionSize, bool useUiThread) + * + * * This class accepts command line arguments as well. The following options are supported: * * @code @@ -106,11 +121,10 @@ class Application; class DALI_ADAPTOR_API Application : public BaseHandle { public: - - typedef Signal< void (DeviceStatus::Battery::Status) > LowBatterySignalType; ///< Application device signal type @SINCE_1_2.62 - typedef Signal< void (DeviceStatus::Memory::Status) > LowMemorySignalType; ///< Application device signal type @SINCE_1_2.62 - typedef Signal< void (Application&) > AppSignalType; ///< Application lifecycle signal and system signal callback type @SINCE_1_0.0 - typedef Signal< void (Application&, void *) > AppControlSignalType; ///< Application control signal callback type @SINCE_1_0.0 + typedef Signal LowBatterySignalType; ///< Application device signal type @SINCE_1_2.62 + typedef Signal LowMemorySignalType; ///< Application device signal type @SINCE_1_2.62 + typedef Signal AppSignalType; ///< Application lifecycle signal and system signal callback type @SINCE_1_0.0 + typedef Signal AppControlSignalType; ///< Application control signal callback type @SINCE_1_0.0 /** * @brief Enumeration for deciding whether a Dali application window is opaque or transparent. @@ -118,12 +132,11 @@ public: */ enum WINDOW_MODE { - OPAQUE = 0, ///< The window will be opaque @SINCE_1_0.0 - TRANSPARENT = 1 ///< The window transparency will match the alpha value set in Dali::Stage::SetBackgroundcolor() @SINCE_1_0.0 + OPAQUE = 0, ///< The window will be opaque @SINCE_1_0.0 + TRANSPARENT = 1 ///< The window transparency will match the alpha value set in Dali::Stage::SetBackgroundcolor() @SINCE_1_0.0 }; public: - /** * @brief This is the constructor for applications without an argument list. * @SINCE_1_0.0 @@ -143,7 +156,7 @@ public: * @param[in,out] argv A pointer to the argument list * @return A handle to the Application */ - static Application New( int* argc, char **argv[] ); + static Application New(int* argc, char** argv[]); /** * @brief This is the constructor for applications with a name. @@ -157,7 +170,7 @@ public: * @return A handle to the Application * @note If the stylesheet is not specified, then the library's default stylesheet will not be overridden. */ - static Application New( int* argc, char **argv[], const std::string& stylesheet ); + static Application New(int* argc, char** argv[], const std::string& stylesheet); /** * @brief This is the constructor for applications with a name. @@ -172,7 +185,7 @@ public: * @return A handle to the Application * @note If the stylesheet is not specified, then the library's default stylesheet will not be overridden. */ - static Application New( int* argc, char **argv[], const std::string& stylesheet, WINDOW_MODE windowMode ); + static Application New(int* argc, char** argv[], const std::string& stylesheet, WINDOW_MODE windowMode); /** * @brief This is the constructor for applications. @@ -188,7 +201,26 @@ public: * @return A handle to the Application * @note If the stylesheet is not specified, then the library's default stylesheet will not be overridden. */ - static Application New( int* argc, char **argv[], const std::string& stylesheet, Application::WINDOW_MODE windowMode, PositionSize positionSize ); + static Application New(int* argc, char** argv[], const std::string& stylesheet, Application::WINDOW_MODE windowMode, PositionSize positionSize); + + /** + * @brief This is the constructor for applications. + * + * @SINCE_2_1.20 + * @PRIVLEVEL_PUBLIC + * @PRIVILEGE_DISPLAY + * @param[in,out] argc A pointer to the number of arguments + * @param[in,out] argv A pointer to the argument list + * @param[in] stylesheet The path to user defined theme file + * @param[in] windowMode A member of WINDOW_MODE + * @param[in] positionSize A position and a size of the window + * @param[in] useUiThread True if the application would create a UI thread + * @return A handle to the Application + * @note If the stylesheet is not specified, then the library's default stylesheet will not be overridden.
+ * UI thread is an additional thread that DALi creates for UI events. + * The UI thread isn't blocked from the system events(AppControl, LanguageChanged, RegionChanged, LowMemory, LowBattery task signals). + */ + static Application New(int* argc, char** argv[], const std::string& stylesheet, Application::WINDOW_MODE windowMode, PositionSize positionSize, bool useUiThread); /** * @brief Constructs an empty handle. @@ -201,7 +233,7 @@ public: * @SINCE_1_0.0 * @param[in] application Handle to an object */ - Application( const Application& application ); + Application(const Application& application); /** * @brief Assignment operator. @@ -209,7 +241,7 @@ public: * @param[in] application Handle to an object * @return A reference to this */ - Application& operator=( const Application& application ); + Application& operator=(const Application& application); /** * @brief Move constructor. @@ -217,7 +249,7 @@ public: * @SINCE_1_9.24 * @param[in] rhs A reference to the moved handle */ - Application( Application&& rhs ); + Application(Application&& rhs); /** * @brief Move assignment operator. @@ -226,7 +258,7 @@ public: * @param[in] rhs A reference to the moved handle * @return A reference to this handle */ - Application& operator=( Application&& rhs ); + Application& operator=(Application&& rhs); /** * @brief Destructor. @@ -276,7 +308,7 @@ public: * * @note Ownership of the callback is passed onto this class. */ - bool AddIdle( CallbackBase* callback ); + bool AddIdle(CallbackBase* callback); /** * @brief Retrieves the main window used by the Application class. @@ -321,11 +353,12 @@ public: */ ObjectRegistry GetObjectRegistry() const; -public: // Signals - +public: // Signals /** * @brief The user should connect to this signal to determine when they should initialize * their application. + * Only when the user uses the UiThread, this signal is emitted on the UI thread. + * Otherwise, it is emitted on the main thread. * @SINCE_1_0.0 * @return The signal to connect to */ @@ -334,6 +367,8 @@ public: // Signals /** * @brief The user should connect to this signal to determine when they should terminate * their application. + * Only when the user uses the UiThread, this signal is emitted on the UI thread. + * Otherwise, it is emitted on the main thread. * @SINCE_1_0.0 * @return The signal to connect to */ @@ -342,6 +377,8 @@ public: // Signals /** * @brief The user should connect to this signal if they need to perform any special * activities when the application is about to be paused. + * Only when the user uses the UiThread, this signal is emitted on the UI thread. + * Otherwise, it is emitted on the main thread. * @SINCE_1_0.0 * @return The signal to connect to */ @@ -350,6 +387,8 @@ public: // Signals /** * @brief The user should connect to this signal if they need to perform any special * activities when the application has resumed. + * Only when the user uses the UiThread, this signal is emitted on the UI thread. + * Otherwise, it is emitted on the main thread. * @SINCE_1_0.0 * @return The signal to connect to */ @@ -357,37 +396,47 @@ public: // Signals /** * @brief This signal is sent when the system requires the user to reinitialize itself. + * Only when the user uses the UiThread, this signal is emitted on the UI thread. + * Otherwise, it is emitted on the main thread. * @SINCE_1_0.0 * @return The signal to connect to */ AppSignalType& ResetSignal(); /** - * @brief This signal is emitted when another application sends a launch request to the application. - * - * When the application is launched, this signal is emitted after the main loop of the application starts up. - * The passed parameter describes the launch request and contains the information about why the application is launched. - * @SINCE_1_0.0 - * @return The signal to connect to - */ + * @brief This signal is emitted when another application sends a launch request to the application. + * + * When the application is launched, this signal is emitted after the main loop of the application starts up. + * The passed parameter describes the launch request and contains the information about why the application is launched. + * Only when the user uses the UiThread, this signal is emitted on the UI thread. + * Otherwise, it is emitted on the main thread. + * @SINCE_1_0.0 + * @return The signal to connect to + */ AppControlSignalType& AppControlSignal(); /** * @brief This signal is emitted when the language is changed on the device. + * Only when the user uses the UiThread, this signal is emitted on the UI thread. + * Otherwise, it is emitted on the main thread. * @SINCE_1_0.0 * @return The signal to connect to */ AppSignalType& LanguageChangedSignal(); /** - * @brief This signal is emitted when the region of the device is changed. - * @SINCE_1_0.0 - * @return The signal to connect to - */ + * @brief This signal is emitted when the region of the device is changed. + * Only when the user uses the UiThread, this signal is emitted on the UI thread. + * Otherwise, it is emitted on the main thread. + * @SINCE_1_0.0 + * @return The signal to connect to + */ AppSignalType& RegionChangedSignal(); /** * @brief This signal is emitted when the battery level of the device is low. + * Only when the user uses the UiThread, this signal is emitted on the UI thread. + * Otherwise, it is emitted on the main thread. * @SINCE_1_2.62 * @return The signal to connect to */ @@ -395,11 +444,75 @@ public: // Signals /** * @brief This signal is emitted when the memory level of the device is low. + * Only when the user uses the UiThread, this signal is emitted on the UI thread. + * Otherwise, it is emitted on the main thread. * @SINCE_1_2.62 * @return The signal to connect to */ LowMemorySignalType& LowMemorySignal(); + // TaskSignal + /** + * @brief The user should connect to this signal to determine when they should initialize + * their application. + * Only when the user uses the UiThread, this signal is emitted on the main thread. + * Otherwise, it is not emitted at all. + * @return The signal to connect to + */ + AppSignalType& TaskInitSignal(); + + /** + * @brief The user should connect to this signal to determine when they should terminate + * their application. + * Only when the user uses the UiThread, this signal is emitted on the main thread. + * Otherwise, it is not emitted at all. + * @return The signal to connect to + */ + AppSignalType& TaskTerminateSignal(); + + /** + * @brief This signal is emitted when another application sends a launch request to the application. + * + * When the application is launched, this signal is emitted after the main loop of the application starts up. + * The passed parameter describes the launch request and contains the information about why the application is launched. + * Only when the user uses the UiThread, this signal is emitted on the main thread. + * Otherwise, it is not emitted at all. + * @return The signal to connect to + */ + AppControlSignalType& TaskAppControlSignal(); + + /** + * @brief This signal is emitted when the language is changed on the device. + * Only when the user uses the UiThread, this signal is emitted on the main thread. + * Otherwise, it is not emitted at all. + * @return The signal to connect to + */ + AppSignalType& TaskLanguageChangedSignal(); + + /** + * @brief This signal is emitted when the region of the device is changed. + * Only when the user uses the UiThread, this signal is emitted on the main thread. + * Otherwise, it is not emitted at all. + * @return The signal to connect to + */ + AppSignalType& TaskRegionChangedSignal(); + + /** + * @brief This signal is emitted when the battery level of the device is low. + * Only when the user uses the UiThread, this signal is emitted on the main thread. + * Otherwise, it is not emitted at all. + * @return The signal to connect to + */ + LowBatterySignalType& TaskLowBatterySignal(); + + /** + * @brief This signal is emitted when the memory level of the device is low. + * Only when the user uses the UiThread, this signal is emitted on the main thread. + * Otherwise, it is not emitted at all. + * @return The signal to connect to + */ + LowMemorySignalType& TaskLowMemorySignal(); + public: // Not intended for application developers /// @cond internal /**