X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Finternal%2Fevent%2Fcommon%2Fscene-impl.cpp;h=cdec748736c8e324ac515fa4208f9e363e94d6bf;hb=c68dd2a2caec4ae0daa28755bfd95e23c911e35d;hp=e4aa616b32635d0732082ed648df1e42370bf377;hpb=7f071616b5c85d198bdc48d3afc68d7af17c0612;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 old mode 100755 new mode 100644 index e4aa616..cdec748 --- a/dali/internal/event/common/scene-impl.cpp +++ b/dali/internal/event/common/scene-impl.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 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. @@ -19,31 +19,29 @@ #include // INTERNAL INCLUDES +#include #include #include -#include +#include #include -#include #include -#include -#include -#include +#include +#include +#include #include +#include +#include #include #include #include -#include -#include using Dali::Internal::SceneGraph::Node; namespace Dali { - namespace Internal { - -ScenePtr Scene::New(Size size, int orientation) +ScenePtr Scene::New(Size size, int32_t orientation) { ScenePtr scene = new Scene; @@ -66,27 +64,27 @@ Scene::Scene() Scene::~Scene() { - if( EventThreadServices::IsCoreRunning() && mSceneObject ) + if(EventThreadServices::IsCoreRunning() && mSceneObject) { ThreadLocalStorage* tls = ThreadLocalStorage::GetInternal(); - RemoveSceneMessage( tls->GetUpdateManager(), *mSceneObject ); + RemoveSceneMessage(tls->GetUpdateManager(), *mSceneObject); } - if( mDefaultCamera ) + if(mDefaultCamera) { // its enough to release the handle so the object is released // don't need to remove it from root actor as root actor will delete the object mDefaultCamera.Reset(); } - if( mRootLayer ) + if(mRootLayer) { // we are closing down so just delete the root, no point emit disconnect // signals or send messages to update mRootLayer.Reset(); } - if( mRenderTaskList ) + if(mRenderTaskList) { mRenderTaskList.Reset(); } @@ -95,33 +93,33 @@ 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, int orientation) +void Scene::Initialize(Size size, int32_t orientation) { ThreadLocalStorage* tls = ThreadLocalStorage::GetInternal(); - DALI_ASSERT_ALWAYS( tls && "Attempt to create scene before core exists!" ); + DALI_ASSERT_ALWAYS(tls && "Attempt to create scene before core exists!"); - tls->AddScene( this ); + tls->AddScene(this); SceneGraph::UpdateManager& updateManager = tls->GetUpdateManager(); // Create the ordered list of layers - mLayerList = LayerList::New( updateManager ); + mLayerList = LayerList::New(updateManager); // The scene owns the default layer - mRootLayer = Layer::NewRoot( *mLayerList ); + mRootLayer = Layer::NewRoot(*mLayerList); mRootLayer->SetName("RootLayer"); - mRootLayer->SetScene( *this ); + mRootLayer->SetScene(*this); // The root layer needs to have a fixed resize policy (as opposed to the default USE_NATURAL_SIZE). // This stops actors parented to the stage having their relayout requests propagating // up to the root layer, and down through other children unnecessarily. - mRootLayer->SetResizePolicy( ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS ); + mRootLayer->SetResizePolicy(ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS); // Create the default camera actor first; this is needed by the RenderTaskList // The default camera attributes and position is such that children of the default layer, // can be positioned at (0,0) and be at the top-left of the viewport. - mDefaultCamera = CameraActor::New( size ); + mDefaultCamera = CameraActor::New(size); mDefaultCamera->SetParentOrigin(ParentOrigin::CENTER); Add(*(mDefaultCamera.Get())); @@ -129,25 +127,25 @@ void Scene::Initialize(Size size, int orientation) mRenderTaskList = RenderTaskList::New(); // Create the default render-task and ensure clear is enabled on it to show the background color - RenderTaskPtr renderTask = mRenderTaskList->CreateTask( mRootLayer.Get(), mDefaultCamera.Get() ); + RenderTaskPtr renderTask = mRenderTaskList->CreateTask(mRootLayer.Get(), mDefaultCamera.Get()); renderTask->SetClearEnabled(true); // Create scene graph object mSceneObject = new SceneGraph::Scene(); - OwnerPointer< SceneGraph::Scene > transferOwnership( const_cast< SceneGraph::Scene* >( mSceneObject ) ); - AddSceneMessage( updateManager, transferOwnership ); + OwnerPointer transferOwnership(const_cast(mSceneObject)); + AddSceneMessage(updateManager, transferOwnership); - SurfaceRotated( size.width, size.height, orientation ); + SurfaceRotated(size.width, size.height, orientation); } void Scene::Add(Actor& actor) { - mRootLayer->Add( actor ); + mRootLayer->Add(actor); } void Scene::Remove(Actor& actor) { - mRootLayer->Remove( actor ); + mRootLayer->Remove(actor); } Size Scene::GetSize() const @@ -172,7 +170,7 @@ RenderTaskList& Scene::GetRenderTaskList() const Dali::Layer Scene::GetRootLayer() const { - return Dali::Layer( mRootLayer.Get() ); + return Dali::Layer(mRootLayer.Get()); } LayerList& Scene::GetLayerList() const @@ -185,12 +183,12 @@ uint32_t Scene::GetLayerCount() const return mLayerList->GetLayerCount(); } -Dali::Layer Scene::GetLayer( uint32_t depth ) const +Dali::Layer Scene::GetLayer(uint32_t depth) const { - return Dali::Layer(mLayerList->GetLayer( depth )); + return Dali::Layer(mLayerList->GetLayer(depth)); } -CameraActor& Scene::GetDefaultCameraActor() +CameraActor& Scene::GetDefaultCameraActor() const { return *mDefaultCamera; } @@ -210,19 +208,19 @@ void Scene::SurfaceResized(float width, float height) void Scene::SurfaceReplaced() { - if ( mSceneObject ) + if(mSceneObject) { ThreadLocalStorage* tls = ThreadLocalStorage::GetInternal(); - SurfaceReplacedMessage( tls->GetUpdateManager(), *mSceneObject ); + SurfaceReplacedMessage(tls->GetUpdateManager(), *mSceneObject); } } void Scene::Discard() { - if( ThreadLocalStorage::Created() ) + if(ThreadLocalStorage::Created()) { ThreadLocalStorage* tls = ThreadLocalStorage::GetInternal(); - tls->RemoveScene( this ); + tls->RemoveScene(this); } } @@ -231,9 +229,9 @@ void Scene::RequestRebuildDepthTree() mDepthTreeDirty = true; } -void Scene::QueueEvent( const Integration::Event& event ) +void Scene::QueueEvent(const Integration::Event& event) { - mEventProcessor.QueueEvent( event ); + mEventProcessor.QueueEvent(event); } void Scene::ProcessEvents() @@ -244,20 +242,20 @@ void Scene::ProcessEvents() void Scene::RebuildDepthTree() { // If the depth tree needs rebuilding, do it in this frame only. - if( mDepthTreeDirty ) + if(mDepthTreeDirty) { - ActorPtr actor( mRootLayer.Get() ); + ActorPtr actor(mRootLayer.Get()); actor->RebuildDepthTree(); mDepthTreeDirty = false; } } -void Scene::SetBackgroundColor( const Vector4& color ) +void Scene::SetBackgroundColor(const Vector4& color) { mBackgroundColor = color; - mRenderTaskList->GetTask( 0u )->SetClearColor( color ); - mRenderTaskList->GetTask( 0u )->SetClearEnabled( true ); + mRenderTaskList->GetTask(0u)->SetClearColor(color); + mRenderTaskList->GetTask(0u)->SetClearEnabled(true); } Vector4 Scene::GetBackgroundColor() const @@ -272,25 +270,30 @@ SceneGraph::Scene* Scene::GetSceneObject() const void Scene::EmitKeyEventSignal(const Dali::KeyEvent& event) { - if ( !mKeyEventSignal.Empty() ) + if(!mKeyEventSignal.Empty()) { - Dali::Integration::Scene handle( this ); - mKeyEventSignal.Emit( event ); + Dali::Integration::Scene handle(this); + mKeyEventSignal.Emit(event); } } -void Scene::SurfaceRotated(float width, float height, int orientation) +void Scene::SurfaceRotated(float width, float height, int32_t orientation) { mSurfaceOrientation = orientation; ChangedSurface(width, height, orientation); } -int Scene::GetSurfaceOrientation() +int32_t Scene::GetCurrentSurfaceOrientation() const { - return mSurfaceOrientation; + return mSceneObject->GetSurfaceOrientation(); } -void Scene::ChangedSurface(float width, float height, int orientation) +const Rect& Scene::GetCurrentSurfaceRect() const +{ + return mSceneObject->GetSurfaceRect(); +} + +void Scene::ChangedSurface(float width, float height, int32_t orientation) { Rect newSize(0, 0, static_cast(width), static_cast(height)); // truncated mSize.width = width; @@ -304,7 +307,7 @@ void Scene::ChangedSurface(float width, float height, int orientation) mRootLayer->SetSize(width, height); // Send the surface rectangle/orientation to SceneGraph::Scene for calculating glViewport/Scissor - ThreadLocalStorage* tls = ThreadLocalStorage::GetInternal(); + ThreadLocalStorage* tls = ThreadLocalStorage::GetInternal(); SetSurfaceRectMessage(tls->GetEventThreadServices(), *mSceneObject, newSize); SetSurfaceOrientationMessage(tls->GetEventThreadServices(), *mSceneObject, static_cast(orientation)); @@ -318,60 +321,92 @@ bool Scene::IsSurfaceRectChanged() const return mSceneObject->IsSurfaceRectChanged(); } +bool Scene::IsRotationCompletedAcknowledgementSet() const +{ + return mSceneObject->IsRotationCompletedAcknowledgementSet(); +} + +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 ); + 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); } void Scene::EmitEventProcessingFinishedSignal() { - if ( !mEventProcessingFinishedSignal.Empty() ) + if(!mEventProcessingFinishedSignal.Empty()) { - Dali::Integration::Scene handle( this ); + Dali::Integration::Scene handle(this); mEventProcessingFinishedSignal.Emit(); } } -void Scene::EmitTouchedSignal( const Dali::TouchEvent& touch ) +void Scene::EmitTouchedSignal(const Dali::TouchEvent& touch) { - Dali::Integration::Scene handle( this ); - if ( !mTouchedSignal.Empty() ) + Dali::Integration::Scene handle(this); + if(!mTouchedSignal.Empty()) { - mTouchedSignal.Emit( touch ); + mTouchedSignal.Emit(touch); } } void Scene::EmitWheelEventSignal(const Dali::WheelEvent& event) { - if ( !mWheelEventSignal.Empty() ) + if(!mWheelEventSignal.Empty()) { - Dali::Integration::Scene handle( this ); - mWheelEventSignal.Emit( event ); + Dali::Integration::Scene handle(this); + mWheelEventSignal.Emit(event); } } -void Scene::AddFrameRenderedCallback( std::unique_ptr< CallbackBase > callback, int32_t frameId ) +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(); - AddFrameRenderedCallbackMessage( tls->GetEventThreadServices(), *mSceneObject, callback.release(), frameId ); + AddFrameRenderedCallbackMessage(tls->GetEventThreadServices(), *mSceneObject, callback.release(), frameId); } -void Scene::AddFramePresentedCallback( std::unique_ptr< CallbackBase > callback, int32_t frameId ) +void Scene::AddFramePresentedCallback(std::unique_ptr callback, int32_t frameId) { ThreadLocalStorage* tls = ThreadLocalStorage::GetInternal(); - AddFramePresentedCallbackMessage( tls->GetEventThreadServices(), *mSceneObject, callback.release(), frameId ); + AddFramePresentedCallbackMessage(tls->GetEventThreadServices(), *mSceneObject, callback.release(), frameId); } -void Scene::GetFrameRenderedCallback( Dali::Integration::Scene::FrameCallbackContainer& callbacks ) +void Scene::GetFrameRenderedCallback(Dali::Integration::Scene::FrameCallbackContainer& callbacks) { - mSceneObject->GetFrameRenderedCallback( callbacks ); + mSceneObject->GetFrameRenderedCallback(callbacks); } -void Scene::GetFramePresentedCallback( Dali::Integration::Scene::FrameCallbackContainer& callbacks ) +void Scene::GetFramePresentedCallback(Dali::Integration::Scene::FrameCallbackContainer& callbacks) { - mSceneObject->GetFramePresentedCallback( callbacks ); + mSceneObject->GetFramePresentedCallback(callbacks); } Integration::Scene::KeyEventSignalType& Scene::KeyEventSignal() @@ -384,6 +419,11 @@ Integration::Scene::KeyEventGeneratedSignalType& Scene::KeyEventGeneratedSignal( return mKeyEventGeneratedSignal; } +Integration::Scene::KeyEventGeneratedSignalType& Scene::InterceptKeyEventSignal() +{ + return mInterceptKeyEventSignal; +} + Integration::Scene::EventProcessingFinishedSignalType& Scene::EventProcessingFinishedSignal() { return mEventProcessingFinishedSignal; @@ -399,11 +439,11 @@ Integration::Scene::WheelEventSignalType& Scene::WheelEventSignal() return mWheelEventSignal; } -std::vector& Scene::GetItemsDirtyRects() +Integration::Scene::WheelEventGeneratedSignalType& Scene::WheelEventGeneratedSignal() { - return mItemsDirtyRects; + return mWheelEventGeneratedSignal; } -} // Internal +} // namespace Internal -} // Dali +} // namespace Dali