1 #ifndef DALI_INTERNAL_APPLICATION_H
2 #define DALI_INTERNAL_APPLICATION_H
5 * Copyright (c) 2021 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.
22 #include <dali/public-api/math/rect.h>
23 #include <dali/public-api/object/base-object.h>
26 #include <dali/devel-api/common/singleton-service.h>
27 #include <dali/public-api/adaptor-framework/application.h>
29 #include <dali/internal/adaptor/common/adaptor-builder-impl.h>
30 #include <dali/internal/adaptor/common/framework.h>
31 #include <dali/internal/system/common/environment-options.h>
45 * @brief Launchpad is used to improve application launch performance.
46 * When an application is pre-initialized, so files are preloaded, some functions are initialized and a window is made in advance.
50 NONE, ///< The default state
51 PRE_INITIALIZED ///< Application is pre-initialized.
54 } // namespace Launchpad
56 class CommandLineOptions;
59 typedef Dali::Rect<int> PositionSize;
62 typedef IntrusivePtr<Application> ApplicationPtr;
65 * Implementation of the Application class.
67 class Application : public BaseObject, public Framework::Observer
70 typedef Dali::Application::LowBatterySignalType LowBatterySignalType;
71 typedef Dali::Application::LowMemorySignalType LowMemorySignalType;
72 typedef Dali::Application::AppSignalType AppSignalType;
73 typedef Dali::Application::AppControlSignalType AppControlSignalType;
74 typedef Dali::Application::WINDOW_MODE WINDOW_MODE;
77 * Create a new application
78 * @param[in] argc A pointer to the number of arguments
79 * @param[in] argv A pointer to the argument list
80 * @param[in] stylesheet The path to user defined theme file
81 * @param[in] windowMode A member of Dali::Application::WINDOW_MODE
82 * @param[in] positionSize A position and a size of the window
83 * @param[in] applicationType A member of Dali::Framework::Type
85 static ApplicationPtr New(int* argc, char** argv[], const std::string& stylesheet, WINDOW_MODE windowMode, const PositionSize& positionSize, Framework::Type applicationType);
88 * @copydoc Dali::DevelApplication::PreInitialize()
90 static void PreInitialize(int* argc, char** argv[]);
94 * @copydoc Dali::Application::MainLoop()
99 * @copydoc Dali::Application::Lower()
104 * @copydoc Dali::Application::Quit()
109 * @copydoc Dali::Application::AddIdle()
111 bool AddIdle(CallbackBase* callback, bool hasReturnValue);
114 * @copydoc Dali::Application::GetAdaptor();
116 Dali::Adaptor& GetAdaptor();
119 * @copydoc Dali::Application::GetWindow();
121 Dali::Window GetWindow();
124 * @copydoc Dali::Application::GetRegion();
126 std::string GetRegion() const;
129 * @copydoc Dali::Application::GetLanguage();
131 std::string GetLanguage() const;
134 * @copydoc Dali::Application::GetObjectRegistry();
136 Dali::ObjectRegistry GetObjectRegistry() const;
139 * @copydoc Dali::Application::GetResourcePath();
141 static std::string GetResourcePath();
144 * @copydoc Dali::DevelApplication::GetDataPath()
146 static std::string GetDataPath();
149 * Retrieves the pre-initialized application.
151 * @return A pointer to the pre-initialized application
153 static ApplicationPtr GetPreInitializedApplication();
156 * Stores PositionSize of window
158 void StoreWindowPositionSize(PositionSize positionSize);
160 public: // From Framework::Observer
162 * Called when the framework is initialised.
164 void OnInit() override;
167 * Called when the framework is terminated.
169 void OnTerminate() override;
172 * Called when the framework is paused.
174 void OnPause() override;
177 * Called when the framework resumes from a paused state.
179 void OnResume() override;
182 * Called when the framework received AppControlSignal.
183 * @param[in] The bundle data of AppControl event.
185 void OnAppControl(void* data) override;
188 * Called when the framework informs the application that it should reset itself.
190 void OnReset() override;
193 * Called when the framework informs the application that the language of the device has changed.
195 void OnLanguageChanged() override;
198 * Called when the framework informs the application that the region of the device has changed.
200 void OnRegionChanged() override;
203 * Called when the framework informs the application that the battery level of the device is low.
205 void OnBatteryLow(Dali::DeviceStatus::Battery::Status status) override;
208 * Called when the framework informs the application that the memory level of the device is low.
210 void OnMemoryLow(Dali::DeviceStatus::Memory::Status status) override;
213 * Called when the framework informs the application that the platform surface is created.
215 void OnSurfaceCreated(Any newSurface) override;
218 * Called when the framework informs the application that the platform surface is destroyed.
220 void OnSurfaceDestroyed(Any newSurface) override;
224 * Sets a user defined theme file.
225 * This should be called before initialization.
226 * @param[in] stylesheet The path to user defined theme file
228 void SetStyleSheet(const std::string& stylesheet);
231 * Sets a command line options.
232 * This is used in case of the preinitialized application.
233 * @param[in] argc A pointer to the number of arguments
234 * @param[in] argv A pointer to the argument list
236 void SetCommandLineOptions(int* argc, char** argv[]);
240 * @copydoc Dali::Application::InitSignal()
242 Dali::Application::AppSignalType& InitSignal()
248 * @copydoc Dali::Application::TerminateSignal()
250 Dali::Application::AppSignalType& TerminateSignal()
252 return mTerminateSignal;
256 * @copydoc Dali::Application::PauseSignal()
258 Dali::Application::AppSignalType& PauseSignal()
264 * @copydoc Dali::Application::ResumeSignal()
266 Dali::Application::AppSignalType& ResumeSignal()
268 return mResumeSignal;
272 * @copydoc Dali::Application::ResetSignal()
274 Dali::Application::AppSignalType& ResetSignal()
280 * @copydoc Dali::Application::AppControlSignal()
282 Dali::Application::AppControlSignalType& AppControlSignal()
284 return mAppControlSignal;
288 * @copydoc Dali::Application::LanguageChangedSignal()
290 Dali::Application::AppSignalType& LanguageChangedSignal()
292 return mLanguageChangedSignal;
296 * @copydoc Dali::Application::RegionChangedSignal()
298 Dali::Application::AppSignalType& RegionChangedSignal()
300 return mRegionChangedSignal;
304 * @copydoc Dali::Application::LowBatterySignal()
306 Dali::Application::LowBatterySignalType& LowBatterySignal()
308 return mLowBatterySignal;
312 * @copydoc Dali::Application:::LowMemorySignal()
314 Dali::Application::LowMemorySignalType& LowMemorySignal()
316 return mLowMemorySignal;
319 // Temporary to test GFXApi
320 Graphics::Controller& GetController();
324 * Private Constructor
325 * @param[in] argc A pointer to the number of arguments
326 * @param[in] argv A pointer to the argument list
327 * @param[in] stylesheet The path to user defined theme file
328 * @param[in] windowMode A member of Dali::Application::WINDOW_MODE
329 * @param[in] positionSize A position and a size of the window
330 * @param[in] applicationType A member of Dali::Framework::Type
332 Application(int* argc, char** argv[], const std::string& stylesheet, WINDOW_MODE windowMode, const PositionSize& positionSize, Framework::Type applicationType);
337 ~Application() override;
340 Application(const Application&);
341 Application& operator=(Application&);
349 * Creates the adaptor
351 void CreateAdaptor();
354 * Creates the adaptor builder
356 void CreateAdaptorBuilder();
359 * Quits from the main loop
361 void QuitFromMainLoop();
364 * Changes size of preInitialized window
366 void ChangePreInitializedWindowSize();
369 AppSignalType mInitSignal;
370 AppSignalType mTerminateSignal;
371 AppSignalType mPauseSignal;
372 AppSignalType mResumeSignal;
373 AppSignalType mResetSignal;
374 AppControlSignalType mAppControlSignal;
375 AppSignalType mLanguageChangedSignal;
376 AppSignalType mRegionChangedSignal;
377 LowBatterySignalType mLowBatterySignal;
378 LowMemorySignalType mLowMemorySignal;
380 EventLoop* mEventLoop;
381 Framework* mFramework;
383 CommandLineOptions* mCommandLineOptions;
385 Dali::Internal::Adaptor::AdaptorBuilder* mAdaptorBuilder; ///< The adaptor builder
386 Dali::Adaptor* mAdaptor;
388 // The Main Window is that window created by the Application during initial startup
389 // (previously this was the only window)
390 Dali::Window mMainWindow; ///< Main Window instance
391 Dali::Application::WINDOW_MODE mMainWindowMode; ///< Window mode of the main window
392 std::string mMainWindowName; ///< Name of the main window as obtained from environment options
394 std::string mStylesheet;
395 EnvironmentOptions mEnvironmentOptions;
396 PositionSize mWindowPositionSize;
397 Launchpad::State mLaunchpadState;
398 bool mUseRemoteSurface;
400 SlotDelegate<Application> mSlotDelegate;
402 static ApplicationPtr gPreInitializedApplication;
405 inline Application& GetImplementation(Dali::Application& application)
407 DALI_ASSERT_ALWAYS(application && "application handle is empty");
409 BaseObject& handle = application.GetBaseObject();
411 return static_cast<Internal::Adaptor::Application&>(handle);
414 inline const Application& GetImplementation(const Dali::Application& application)
416 DALI_ASSERT_ALWAYS(application && "application handle is empty");
418 const BaseObject& handle = application.GetBaseObject();
420 return static_cast<const Internal::Adaptor::Application&>(handle);
423 } // namespace Adaptor
425 } // namespace Internal
429 #endif // DALI_INTERNAL_APPLICATION_H