[Tizen] Sync for libds
[platform/core/uifw/dali-adaptor.git] / dali / devel-api / adaptor-framework / offscreen-application.h
1 #ifndef DALI_OFFSCREEN_APPLICATION_H
2 #define DALI_OFFSCREEN_APPLICATION_H
3
4 /*
5  * Copyright (c) 2020 Samsung Electronics Co., Ltd.
6  *
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
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
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.
18  *
19  */
20
21 // EXTERNAL INCLUDES
22 #include <dali/public-api/object/any.h>
23 #include <dali/public-api/object/base-handle.h>
24 #include <dali/public-api/signals/dali-signal.h>
25
26 // INTERNAL INCLUDES
27 #include <dali/public-api/dali-adaptor-common.h>
28
29 namespace Dali
30 {
31 /**
32  * @addtogroup dali_adaptor_framework
33  * @{
34  */
35
36 class OffscreenWindow;
37
38 namespace Internal
39 {
40 class OffscreenApplication;
41 }
42
43 /**
44  * @brief Appliations can draw UI on offscreen surface with the OffscreenApplication.
45  * When you use a OffscreenApplication, you don't have to create a Window.
46  */
47 class DALI_ADAPTOR_API OffscreenApplication : public Dali::BaseHandle
48 {
49 public:
50   using OffscreenApplicationSignalType = Signal<void(void)>;
51
52   /**
53    * @brief Enumeration for the render mode
54    */
55   enum class RenderMode
56   {
57     AUTO,  // Scene is rendered automatically
58     MANUAL // Scene is rendered by RenderOnce()
59   };
60
61 public:
62   /**
63    * @brief This is the constructor of OffscreenApplication
64    *
65    * @param[in] width The initial width of the default OffscreenWindow
66    * @param[in] height The initial height of the default OffscreenWindow
67    * @param[in] isTranslucent Whether the OffscreenWindow is translucent or not
68    * @param[in] renderMode The RenderMode of the OffscreenApplication
69    */
70   static OffscreenApplication New(uint16_t width, uint16_t height, bool isTranslucent, RenderMode renderMode = RenderMode::AUTO);
71
72   /**
73    * @brief This is the constructor of OffscreenApplication
74    *
75    * @param[in] surface The native surface handle to create the OffscreenWindow
76    * @param[in] isTranslucent Whether the OffscreenWindow is translucent or not
77    * @param[in] renderMode The RenderMode of the OffscreenApplication
78    */
79   static OffscreenApplication New(Dali::Any surface, bool isTranslucent, RenderMode renderMode = RenderMode::AUTO);
80
81   /**
82    * @brief Constructs an empty handle
83    */
84   OffscreenApplication();
85
86   /**
87    * @brief Copy constructor
88    *
89    * @param [in] offscreenApplication A reference to the copied handle
90    */
91   OffscreenApplication(const OffscreenApplication& offscreenApplication);
92
93   /**
94    * @brief Assignment operator
95    *
96    * @param [in] offscreenApplication A reference to the copied handle
97    * @return A reference to this
98    */
99   OffscreenApplication& operator=(const OffscreenApplication& offscreenApplication);
100
101   /**
102    * @brief Destructor
103    */
104   ~OffscreenApplication();
105
106 public:
107   /**
108    * @brief Starts the OffscreenApplication (rendering, event handling, etc)
109    */
110   void Start();
111
112   /**
113    * @brief Stops the OffscreenApplication
114    */
115   void Stop();
116
117   /**
118    * @brief Get the default OffscreenWindow handle
119    * @return The default OffscreenWindow
120    */
121   OffscreenWindow GetWindow();
122
123   /**
124    * @brief Renders once more even if we're paused
125    */
126   void RenderOnce();
127
128 public: // Signals
129         /**
130    * @brief Signal to notify the client when the application is ready to be initialized
131    *
132    * @note OffscreenApplication::Start() should be called to be initialized
133    *
134    * @return The signal
135    */
136   OffscreenApplicationSignalType& InitSignal();
137
138   /**
139    * @brief Signal to notify the user when the application is about to be terminated
140    *
141    * @return The signal
142    */
143   OffscreenApplicationSignalType& TerminateSignal();
144
145 public: // Not intended for application developers
146   /**
147    * @brief Internal constructor
148    */
149   explicit DALI_INTERNAL OffscreenApplication(Internal::OffscreenApplication* offscreenApplication);
150 };
151
152 /**
153  * @}
154  */
155
156 } // namespace Dali
157
158 #endif // DALI_OFFSCREEN_APPLICATION_H