+ return mSceneObject ? mSceneObject->GetSurfaceOrientation() : 0;
+}
+
+int32_t Scene::GetCurrentScreenOrientation() const
+{
+ return mSceneObject ? mSceneObject->GetScreenOrientation() : 0;
+}
+
+const Rect<int32_t>& Scene::GetCurrentSurfaceRect() const
+{
+ static Rect<int32_t> emptyRect{};
+ return mSceneObject ? mSceneObject->GetSurfaceRect() : emptyRect;
+}
+
+void Scene::ChangedSurface(float width, float height, int32_t windowOrientation, int32_t screenOrientation)
+{
+ bool changedOrientation = false;
+ Rect<int32_t> newSize(0, 0, static_cast<int32_t>(width), static_cast<int32_t>(height)); // truncated
+ mSize.width = width;
+ mSize.height = height;
+
+ if(mSurfaceOrientation != windowOrientation || mScreenOrientation != screenOrientation)
+ {
+ changedOrientation = true;
+ }
+
+ mSurfaceOrientation = windowOrientation;
+ mScreenOrientation = screenOrientation;
+
+ // Calculates the aspect ratio, near and far clipping planes, field of view and camera Z position.
+ mDefaultCamera->SetPerspectiveProjection(mSize);
+ // Set the surface orientation to Default camera for window/screen rotation
+ if(changedOrientation)
+ {
+ int32_t orientation = (windowOrientation + screenOrientation) % 360;
+ mDefaultCamera->RotateProjection(orientation);
+ }
+
+ mRootLayer->SetSize(width, height);
+
+ // Send the surface rectangle/orientation to SceneGraph::Scene for calculating glViewport/Scissor
+ ThreadLocalStorage* tls = ThreadLocalStorage::GetInternal();
+ DALI_LOG_RELEASE_INFO("Send Surface Rect Message, width[%d], height[%d]\n", newSize.width, newSize.height);
+ SetSurfaceRectMessage(tls->GetEventThreadServices(), *mSceneObject, newSize);
+ if(changedOrientation)
+ {
+ DALI_LOG_RELEASE_INFO("Send Surface Orientation Message, surface orientation[%d], screen orientation[%d]\n", mSurfaceOrientation, mScreenOrientation);
+ SetSurfaceOrientationsMessage(tls->GetEventThreadServices(), *mSceneObject, mSurfaceOrientation, mScreenOrientation);
+ }
+
+ // set default render-task viewport parameters
+ RenderTaskPtr defaultRenderTask = mRenderTaskList->GetTask(0u);
+ defaultRenderTask->SetViewport(newSize);
+ // set overlay render-task viewport parameters
+ RenderTaskPtr overlayRenderTask = mRenderTaskList->GetOverlayTask();
+ if(overlayRenderTask)
+ {
+ overlayRenderTask->SetViewport(newSize);
+ }
+}
+
+bool Scene::IsSurfaceRectChanged() const
+{
+ return mSceneObject ? mSceneObject->IsSurfaceRectChanged() : false;
+}
+
+bool Scene::IsRotationCompletedAcknowledgementSet() const
+{
+ return mSceneObject ? mSceneObject->IsRotationCompletedAcknowledgementSet() : false;
+}
+
+void Scene::SetRotationCompletedAcknowledgement()
+{
+ ThreadLocalStorage* tls = ThreadLocalStorage::GetInternal();
+ SetRotationCompletedAcknowledgementMessage(tls->GetEventThreadServices(), *mSceneObject);
+}
+
+void Scene::SetSurfaceRenderTarget(const Graphics::RenderTargetCreateInfo& renderTargetCreateInfo)
+{
+ // Send the surface render target to SceneGraph::Scene
+ ThreadLocalStorage* tls = ThreadLocalStorage::GetInternal();
+ SetSurfaceRenderTargetCreateInfoMessage(tls->GetEventThreadServices(), *mSceneObject, renderTargetCreateInfo);
+}
+
+bool Scene::EmitKeyEventGeneratedSignal(const Dali::KeyEvent& event)
+{
+ // Emit the KeyEventGenerated signal when KeyEvent is generated
+ Dali::Integration::Scene handle(this);
+ return mKeyEventGeneratedSignal.Emit(event);
+}
+
+bool Scene::EmitInterceptKeyEventSignal(const Dali::KeyEvent& event)
+{
+ // Emit the InterceptKeyEvent signal
+ Dali::Integration::Scene handle(this);
+ return mInterceptKeyEventSignal.Emit(event);