X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Finternal%2Fevent%2Fcommon%2Fscene-impl.cpp;h=56ed507756bf385c62114311380bb8607789c755;hb=eacc080fe975c523d722dd17c044652317ddd6e8;hp=ba881526451b413bd4dd5fd14fe10622d748c60b;hpb=9502baa1298289b85dcf263d723521ce6a400fd6;p=platform%2Fcore%2Fuifw%2Fdali-core.git diff --git a/dali/internal/event/common/scene-impl.cpp b/dali/internal/event/common/scene-impl.cpp index ba88152..56ed507 100644 --- a/dali/internal/event/common/scene-impl.cpp +++ b/dali/internal/event/common/scene-impl.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 Samsung Electronics Co., Ltd. + * Copyright (c) 2022 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -41,12 +41,12 @@ namespace Dali { namespace Internal { -ScenePtr Scene::New(Size size, int32_t orientation) +ScenePtr Scene::New(Size size, int32_t windowOrientation, int32_t screenOrientation) { ScenePtr scene = new Scene; // Second-phase construction - scene->Initialize(size, orientation); + scene->Initialize(size, windowOrientation, screenOrientation); return scene; } @@ -58,7 +58,8 @@ Scene::Scene() mBackgroundColor(DEFAULT_BACKGROUND_COLOR), mDepthTreeDirty(false), mEventProcessor(*this, ThreadLocalStorage::GetInternal()->GetGestureEventProcessor()), - mSurfaceOrientation(0) + mSurfaceOrientation(0), + mScreenOrientation(0) { } @@ -84,6 +85,11 @@ Scene::~Scene() mRootLayer.Reset(); } + if(mOverlayLayer) + { + mOverlayLayer.Reset(); + } + if(mRenderTaskList) { mRenderTaskList.Reset(); @@ -93,7 +99,7 @@ Scene::~Scene() // When this destructor is called, the scene has either already been removed from Core or Core has already been destroyed } -void Scene::Initialize(Size size, int32_t orientation) +void Scene::Initialize(Size size, int32_t windowOrientation, int32_t screenOrientation) { ThreadLocalStorage* tls = ThreadLocalStorage::GetInternal(); @@ -135,7 +141,7 @@ void Scene::Initialize(Size size, int32_t orientation) OwnerPointer transferOwnership(const_cast(mSceneObject)); AddSceneMessage(updateManager, transferOwnership); - SurfaceRotated(size.width, size.height, orientation); + SurfaceRotated(size.width, size.height, windowOrientation, screenOrientation); } void Scene::Add(Actor& actor) @@ -173,6 +179,26 @@ Dali::Layer Scene::GetRootLayer() const return Dali::Layer(mRootLayer.Get()); } +Dali::Layer Scene::GetOverlayLayer() +{ + if(!mOverlayLayer) + { + // Creates overlay layer. + mOverlayLayer = Layer::New(); + mOverlayLayer->SetName("OverlayLayer"); + mOverlayLayer->SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS); + mOverlayLayer->SetParentOrigin(Dali::ParentOrigin::TOP_LEFT); + mOverlayLayer->SetAnchorPoint(Dali::AnchorPoint::TOP_LEFT); + mRootLayer->Add(*mOverlayLayer); + + // Create the overlay render-task and set exclusive to true. + RenderTaskPtr renderTask = mRenderTaskList->CreateOverlayTask(mOverlayLayer.Get(), mDefaultCamera.Get()); + renderTask->SetExclusive(true); + renderTask->SetInputEnabled(true); + } + return Dali::Layer(mOverlayLayer.Get()); +} + LayerList& Scene::GetLayerList() const { return *mLayerList; @@ -202,7 +228,7 @@ void Scene::SurfaceResized(float width, float height) { if((fabsf(mSize.width - width) > Math::MACHINE_EPSILON_1) || (fabsf(mSize.height - height) > Math::MACHINE_EPSILON_1)) { - ChangedSurface(width, height, mSurfaceOrientation); + ChangedSurface(width, height, mSurfaceOrientation, mScreenOrientation); } } @@ -277,10 +303,9 @@ void Scene::EmitKeyEventSignal(const Dali::KeyEvent& event) } } -void Scene::SurfaceRotated(float width, float height, int32_t orientation) +void Scene::SurfaceRotated(float width, float height, int32_t windowOrientation, int32_t screenOrientation) { - mSurfaceOrientation = orientation; - ChangedSurface(width, height, orientation); + ChangedSurface(width, height, windowOrientation, screenOrientation); } int32_t Scene::GetCurrentSurfaceOrientation() const @@ -288,32 +313,61 @@ int32_t Scene::GetCurrentSurfaceOrientation() const return mSceneObject->GetSurfaceOrientation(); } +int32_t Scene::GetCurrentScreenOrientation() const +{ + return mSceneObject->GetScreenOrientation(); +} + const Rect& Scene::GetCurrentSurfaceRect() const { return mSceneObject->GetSurfaceRect(); } -void Scene::ChangedSurface(float width, float height, int32_t orientation) +void Scene::ChangedSurface(float width, float height, int32_t windowOrientation, int32_t screenOrientation) { + bool changedOrientation = false; Rect newSize(0, 0, static_cast(width), static_cast(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 - mDefaultCamera->RotateProjection(orientation); + 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); - SetSurfaceOrientationMessage(tls->GetEventThreadServices(), *mSceneObject, static_cast(orientation)); + 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 @@ -332,11 +386,11 @@ void Scene::SetRotationCompletedAcknowledgement() SetRotationCompletedAcknowledgementMessage(tls->GetEventThreadServices(), *mSceneObject); } -void Scene::SetSurfaceRenderTarget(Graphics::RenderTarget* renderTarget) +void Scene::SetSurfaceRenderTarget(const Graphics::RenderTargetCreateInfo& renderTargetCreateInfo) { // Send the surface render target to SceneGraph::Scene ThreadLocalStorage* tls = ThreadLocalStorage::GetInternal(); - SetSurfaceRenderTargetMessage(tls->GetEventThreadServices(), *mSceneObject, renderTarget); + SetSurfaceRenderTargetCreateInfoMessage(tls->GetEventThreadServices(), *mSceneObject, renderTargetCreateInfo); } bool Scene::EmitKeyEventGeneratedSignal(const Dali::KeyEvent& event) @@ -346,6 +400,13 @@ bool Scene::EmitKeyEventGeneratedSignal(const Dali::KeyEvent& event) return mKeyEventGeneratedSignal.Emit(event); } +bool Scene::EmitInterceptKeyEventSignal(const Dali::KeyEvent& event) +{ + // Emit the InterceptKeyEvent signal + Dali::Integration::Scene handle(this); + return mInterceptKeyEventSignal.Emit(event); +} + void Scene::EmitEventProcessingFinishedSignal() { if(!mEventProcessingFinishedSignal.Empty()) @@ -373,6 +434,13 @@ void Scene::EmitWheelEventSignal(const Dali::WheelEvent& event) } } +bool Scene::EmitWheelEventGeneratedSignal(const Dali::WheelEvent& event) +{ + // Emit the WheelEventGenerated signal when WheelEvent is generated + Dali::Integration::Scene handle(this); + return mWheelEventGeneratedSignal.Emit(event); +} + void Scene::AddFrameRenderedCallback(std::unique_ptr callback, int32_t frameId) { ThreadLocalStorage* tls = ThreadLocalStorage::GetInternal(); @@ -405,6 +473,11 @@ Integration::Scene::KeyEventGeneratedSignalType& Scene::KeyEventGeneratedSignal( return mKeyEventGeneratedSignal; } +Integration::Scene::KeyEventGeneratedSignalType& Scene::InterceptKeyEventSignal() +{ + return mInterceptKeyEventSignal; +} + Integration::Scene::EventProcessingFinishedSignalType& Scene::EventProcessingFinishedSignal() { return mEventProcessingFinishedSignal; @@ -420,6 +493,11 @@ Integration::Scene::WheelEventSignalType& Scene::WheelEventSignal() return mWheelEventSignal; } +Integration::Scene::WheelEventGeneratedSignalType& Scene::WheelEventGeneratedSignal() +{ + return mWheelEventGeneratedSignal; +} + } // namespace Internal } // namespace Dali