Remove SystemOverlay.
[platform/core/uifw/dali-core.git] / dali / internal / common / core-impl.h
1 #ifndef DALI_INTERNAL_CORE_H
2 #define DALI_INTERNAL_CORE_H
3
4 /*
5  * Copyright (c) 2018 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 // INTERNAL INCLUDES
22 #include <dali/public-api/common/dali-vector.h>
23 #include <dali/public-api/object/ref-object.h>
24 #include <dali/integration-api/context-notifier.h>
25 #include <dali/integration-api/core-enumerations.h>
26 #include <dali/internal/common/owner-pointer.h>
27 #include <dali/internal/event/animation/animation-playlist-declarations.h>
28 #include <dali/internal/event/common/stage-def.h>
29 #include <dali/integration-api/resource-policies.h>
30
31 namespace Dali
32 {
33
34 namespace Integration
35 {
36 class Processor;
37 class RenderController;
38 class PlatformAbstraction;
39 class GestureManager;
40 class GlAbstraction;
41 class GlSyncAbstraction;
42 class UpdateStatus;
43 class RenderStatus;
44 struct Event;
45 struct TouchData;
46 }
47
48 namespace Internal
49 {
50
51 class NotificationManager;
52 class AnimationPlaylist;
53 class PropertyNotificationManager;
54 class EventProcessor;
55 class GestureEventProcessor;
56 class ShaderFactory;
57 class TouchResampler;
58 class RelayoutController;
59
60 namespace SceneGraph
61 {
62 class UpdateManager;
63 class RenderManager;
64 class DiscardQueue;
65 class RenderTaskProcessor;
66 }
67
68 /**
69  * Internal class for Dali::Integration::Core
70  */
71 class Core
72 {
73 public:
74
75   /**
76    * Create and initialise a new Core instance
77    */
78   Core( Integration::RenderController& renderController,
79         Integration::PlatformAbstraction& platform,
80         Integration::GlAbstraction& glAbstraction,
81         Integration::GlSyncAbstraction& glSyncAbstraction,
82         Integration::GestureManager& gestureManager,
83         ResourcePolicy::DataRetention dataRetentionPolicy,
84         Integration::RenderToFrameBuffer renderToFboEnabled,
85         Integration::DepthBufferAvailable depthBufferAvailable,
86         Integration::StencilBufferAvailable stencilBufferAvailable );
87
88   /**
89    * Destructor
90    */
91   ~Core();
92
93   /**
94    * @copydoc Dali::Integration::Core::GetContextNotifier()
95    */
96   Integration::ContextNotifierInterface* GetContextNotifier();
97
98   /**
99    * @copydoc Dali::Integration::Core::ContextCreated()
100    */
101   void ContextCreated();
102
103   /**
104    * @copydoc Dali::Integration::Core::ContextDestroyed()
105    */
106   void ContextDestroyed();
107
108   /**
109    * @copydoc Dali::Integration::Core::RecoverFromContextLoss()
110    */
111   void RecoverFromContextLoss();
112
113   /**
114    * @copydoc Dali::Integration::Core::SurfaceResized(uint32_t, uint32_t)
115    */
116   void SurfaceResized(uint32_t width, uint32_t height);
117
118   /**
119    * @copydoc Dali::Integration::Core::SetTopMargin( uint32_t margin )
120    */
121   void SetTopMargin( uint32_t margin );
122
123   /**
124    * @copydoc Dali::Integration::Core::SetDpi(uint32_t, uint32_t)
125    */
126   void SetDpi(uint32_t dpiHorizontal, uint32_t dpiVertical);
127
128   /**
129    * @copydoc Dali::Integration::Core::SetMinimumFrameTimeInterval(uint32_t)
130    */
131   void SetMinimumFrameTimeInterval(uint32_t interval);
132
133   /**
134    * @copydoc Dali::Integration::Core::Update()
135    */
136   void Update( float elapsedSeconds, uint32_t lastVSyncTimeMilliseconds, uint32_t nextVSyncTimeMilliseconds, Integration::UpdateStatus& status, bool renderToFboEnabled, bool isRenderingToFbo );
137
138   /**
139    * @copydoc Dali::Integration::Core::Render()
140    */
141   void Render( Integration::RenderStatus& status, bool forceClear );
142
143   /**
144    * @copydoc Dali::Integration::Core::SceneCreated()
145    */
146   void SceneCreated();
147
148   /**
149    * @copydoc Dali::Integration::Core::QueueEvent(const Integration::Event&)
150    */
151   void QueueEvent( const Integration::Event& event );
152
153   /**
154    * @copydoc Dali::Integration::Core::ProcessEvents()
155    */
156   void ProcessEvents();
157
158   /**
159    * @copydoc Dali::Integration::Core::GetMaximumUpdateCount()
160    */
161   uint32_t GetMaximumUpdateCount() const;
162
163   /**
164    * @copydoc Dali::Integration::Core::RegisterProcessor
165    */
166   void RegisterProcessor( Dali::Integration::Processor& processor );
167
168   /**
169    * @copydoc Dali::Integration::Core::UnregisterProcessor
170    */
171   void UnregisterProcessor( Dali::Integration::Processor& processor );
172
173 private:
174   /**
175    * Run each registered processor
176    */
177   void RunProcessors();
178
179   // for use by ThreadLocalStorage
180
181   /**
182    * Returns the current stage.
183    * @return A smart-pointer to the current stage.
184    */
185   StagePtr GetCurrentStage();
186
187   /**
188    * Returns the platform abstraction.
189    * @return A reference to the platform abstraction.
190    */
191   Integration::PlatformAbstraction& GetPlatform();
192
193   /**
194    * Returns the update manager.
195    * @return A reference to the update manager.
196    */
197   SceneGraph::UpdateManager& GetUpdateManager();
198
199   /**
200    * Returns the render manager.
201    * @return A reference to the render manager.
202    */
203   SceneGraph::RenderManager& GetRenderManager();
204
205   /**
206    * Returns the notification manager.
207    * @return A reference to the Notification Manager.
208    */
209   NotificationManager& GetNotificationManager();
210
211   /**
212    * Returns the Shader factory
213    * @return A reference to the Shader binary factory.
214    */
215   ShaderFactory& GetShaderFactory();
216
217   /**
218    * Returns the gesture event processor.
219    * @return A reference to the gesture event processor.
220    */
221   GestureEventProcessor& GetGestureEventProcessor();
222
223   /**
224    * Return the relayout controller
225    * @Return Return a reference to the relayout controller
226    */
227   RelayoutController& GetRelayoutController();
228
229 private:
230
231   /**
232    * Undefined copy and assignment operators
233    */
234   Core(const Core& core);  // No definition
235   Core& operator=(const Core& core);  // No definition
236
237   /**
238    * Create Thread local storage
239    */
240   void CreateThreadLocalStorage();
241
242 private:
243
244   Integration::RenderController&            mRenderController;            ///< Reference to Render controller to tell it to keep rendering
245   Integration::PlatformAbstraction&         mPlatform;                    ///< The interface providing platform specific services.
246
247   IntrusivePtr<Stage>                       mStage;                       ///< The current stage
248   AnimationPlaylistOwner                    mAnimationPlaylist;           ///< For 'Fire and forget' animation support
249   OwnerPointer<PropertyNotificationManager> mPropertyNotificationManager; ///< For safe signal emmision of property changed notifications
250   IntrusivePtr< RelayoutController >        mRelayoutController;          ///< Size negotiation relayout controller
251   bool                                      mProcessingEvent  : 1;        ///< True during ProcessEvents()
252
253   OwnerPointer<SceneGraph::RenderTaskProcessor> mRenderTaskProcessor;         ///< Handles the processing of render tasks
254   OwnerPointer<SceneGraph::RenderManager>       mRenderManager;               ///< Render manager
255   OwnerPointer<SceneGraph::UpdateManager>       mUpdateManager;               ///< Update manager
256   OwnerPointer<SceneGraph::DiscardQueue>        mDiscardQueue;                ///< Used to cleanup nodes & resources when no longer in use.
257   OwnerPointer<ShaderFactory>                   mShaderFactory;               ///< Shader resource factory
258   OwnerPointer<NotificationManager>             mNotificationManager;         ///< Notification manager
259   OwnerPointer<GestureEventProcessor>           mGestureEventProcessor;       ///< The gesture event processor
260   OwnerPointer<EventProcessor>                  mEventProcessor;              ///< The event processor
261   Dali::Vector<Integration::Processor*>         mProcessors;                  ///< Registered processors (not owned)
262
263   friend class ThreadLocalStorage;
264
265 };
266
267 } // namespace Internal
268
269 } // namespace Dali
270
271 #endif // DALI_INTERNAL_CORE_H