1 #ifndef DALI_INTERNAL_CORE_H
2 #define DALI_INTERNAL_CORE_H
5 * Copyright (c) 2017 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/object/ref-object.h>
23 #include <dali/integration-api/context-notifier.h>
24 #include <dali/internal/common/owner-pointer.h>
25 #include <dali/internal/event/animation/animation-playlist-declarations.h>
26 #include <dali/internal/event/common/stage-def.h>
27 #include <dali/public-api/common/view-mode.h>
28 #include <dali/integration-api/resource-policies.h>
35 class RenderController;
36 class PlatformAbstraction;
39 class GlSyncAbstraction;
50 class NotificationManager;
51 class AnimationPlaylist;
52 class PropertyNotificationManager;
54 class GestureEventProcessor;
57 class RelayoutController;
64 class RenderTaskProcessor;
68 * Internal class for Dali::Integration::Core
75 * Create and initialise a new Core instance
77 Core( Integration::RenderController& renderController,
78 Integration::PlatformAbstraction& platform,
79 Integration::GlAbstraction& glAbstraction,
80 Integration::GlSyncAbstraction& glSyncAbstraction,
81 Integration::GestureManager& gestureManager,
82 ResourcePolicy::DataRetention dataRetentionPolicy );
90 * @copydoc Dali::Integration::Core::GetContextNotifier()
92 Integration::ContextNotifierInterface* GetContextNotifier();
95 * @copydoc Dali::Integration::Core::ContextCreated()
97 void ContextCreated();
100 * @copydoc Dali::Integration::Core::ContextDestroyed()
102 void ContextDestroyed();
105 * @copydoc Dali::Integration::Core::RecoverFromContextLoss()
107 void RecoverFromContextLoss();
110 * @copydoc Dali::Integration::Core::SurfaceResized(unsigned int, unsigned int)
112 void SurfaceResized(unsigned int width, unsigned int height);
115 * @copydoc Dali::Integration::Core::SetTopMargin( unsigned int margin )
117 void SetTopMargin( unsigned int margin );
120 * @copydoc Dali::Integration::Core::SetDpi(unsigned int, unsigned int)
122 void SetDpi(unsigned int dpiHorizontal, unsigned int dpiVertical);
125 * @copydoc Dali::Integration::Core::SetMinimumFrameTimeInterval(unsigned int)
127 void SetMinimumFrameTimeInterval(unsigned int interval);
130 * @copydoc Dali::Integration::Core::Update()
132 void Update( float elapsedSeconds, unsigned int lastVSyncTimeMilliseconds, unsigned int nextVSyncTimeMilliseconds, Integration::UpdateStatus& status );
135 * @copydoc Dali::Integration::Core::Render()
137 void Render( Integration::RenderStatus& status );
140 * @copydoc Dali::Integration::Core::SceneCreated()
145 * @copydoc Dali::Integration::Core::QueueEvent(const Integration::Event&)
147 void QueueEvent( const Integration::Event& event );
150 * @copydoc Dali::Integration::Core::ProcessEvents()
152 void ProcessEvents();
155 * @copydoc Dali::Integration::Core::GetMaximumUpdateCount()
157 unsigned int GetMaximumUpdateCount() const;
160 * @copydoc Dali::Integration::Core::GetSystemOverlay()
162 Integration::SystemOverlay& GetSystemOverlay();
167 * @copydoc Dali::Integration::Core::SetViewMode()
169 void SetViewMode( ViewMode viewMode );
172 * @copydoc Dali::Integration::Core::GetViewMode()
174 ViewMode GetViewMode() const;
177 * @copydoc Dali::Integration::Core::SetStereoBase()
179 void SetStereoBase( float stereoBase );
182 * @copydoc Dali::Integration::Core::GetStereoBase()
184 float GetStereoBase() const;
186 private: // for use by ThreadLocalStorage
189 * Returns the current stage.
190 * @return A smart-pointer to the current stage.
192 StagePtr GetCurrentStage();
195 * Returns the platform abstraction.
196 * @return A reference to the platform abstraction.
198 Integration::PlatformAbstraction& GetPlatform();
201 * Returns the update manager.
202 * @return A reference to the update manager.
204 SceneGraph::UpdateManager& GetUpdateManager();
207 * Returns the render manager.
208 * @return A reference to the render manager.
210 SceneGraph::RenderManager& GetRenderManager();
213 * Returns the notification manager.
214 * @return A reference to the Notification Manager.
216 NotificationManager& GetNotificationManager();
219 * Returns the Shader factory
220 * @return A reference to the Shader binary factory.
222 ShaderFactory& GetShaderFactory();
225 * Returns the gesture event processor.
226 * @return A reference to the gesture event processor.
228 GestureEventProcessor& GetGestureEventProcessor();
231 * Return the relayout controller
232 * @Return Return a reference to the relayout controller
234 RelayoutController& GetRelayoutController();
239 * Undefined copy and assignment operators
241 Core(const Core& core); // No definition
242 Core& operator=(const Core& core); // No definition
245 * Create Thread local storage
247 void CreateThreadLocalStorage();
251 Integration::RenderController& mRenderController; ///< Reference to Render controller to tell it to keep rendering
252 Integration::PlatformAbstraction& mPlatform; ///< The interface providing platform specific services.
254 IntrusivePtr<Stage> mStage; ///< The current stage
255 AnimationPlaylistOwner mAnimationPlaylist; ///< For 'Fire and forget' animation support
256 OwnerPointer<PropertyNotificationManager> mPropertyNotificationManager; ///< For safe signal emmision of property changed notifications
257 IntrusivePtr< RelayoutController > mRelayoutController; ///< Size negotiation relayout controller
258 bool mProcessingEvent : 1; ///< True during ProcessEvents()
260 OwnerPointer<SceneGraph::RenderTaskProcessor> mRenderTaskProcessor; ///< Handles the processing of render tasks
261 OwnerPointer<SceneGraph::RenderManager> mRenderManager; ///< Render manager
262 OwnerPointer<SceneGraph::UpdateManager> mUpdateManager; ///< Update manager
263 OwnerPointer<SceneGraph::DiscardQueue> mDiscardQueue; ///< Used to cleanup nodes & resources when no longer in use.
264 OwnerPointer<ShaderFactory> mShaderFactory; ///< Shader resource factory
265 OwnerPointer<NotificationManager> mNotificationManager; ///< Notification manager
266 OwnerPointer<GestureEventProcessor> mGestureEventProcessor; ///< The gesture event processor
267 OwnerPointer<EventProcessor> mEventProcessor; ///< The event processor
269 friend class ThreadLocalStorage;
273 } // namespace Internal
277 #endif // DALI_INTERNAL_CORE_H