X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Finternal%2Fwindow-system%2Fcommon%2Fwindow-impl.cpp;h=fd9d99abe97a891d0ae523eb6f1d355283cbc492;hb=e8e185f7d90010214890c2cb78bdd52c732f63ba;hp=2ea6269d5ec6e55245b5193c398d9e2e1c968ff9;hpb=371c360a9d1f5fcf0b28ab01bfcd3ab718c752dc;p=platform%2Fcore%2Fuifw%2Fdali-adaptor.git diff --git a/dali/internal/window-system/common/window-impl.cpp b/dali/internal/window-system/common/window-impl.cpp index 2ea6269..fd9d99a 100644 --- a/dali/internal/window-system/common/window-impl.cpp +++ b/dali/internal/window-system/common/window-impl.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018 Samsung Electronics Co., Ltd. + * Copyright (c) 2019 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. @@ -20,11 +20,13 @@ // EXTERNAL HEADERS #include -#include #include +#include +#include #include #include #include +#include #include // INTERNAL HEADERS @@ -43,6 +45,8 @@ namespace Internal namespace Adaptor { +uint32_t Window::mWindowCounter = 0; + namespace { @@ -61,13 +65,13 @@ Window* Window::New( const PositionSize& positionSize, const std::string& name, } Window::Window() -: mSurface( NULL ), +: mId( mWindowCounter++ ), + mSurface( nullptr ), mWindowBase(), mIndicatorVisible( Dali::Window::INVISIBLE ), // TODO: Enable this after indicator implementation based on tizen 5. mIndicatorIsShown( false ), mShowRotatedIndicatorOnClose( false ), mStarted( false ), - mIsTransparent( false ), mIsFocusAcceptable( true ), mVisible( true ), mIconified( false ), @@ -77,7 +81,6 @@ Window::Window() mIndicatorOrientation( Dali::Window::PORTRAIT ), mNextIndicatorOrientation( Dali::Window::PORTRAIT ), mIndicatorOpacityMode( Dali::Window::OPAQUE ), - mOverlay( NULL ), mAdaptor( NULL ), mType( Dali::Window::NORMAL ), mPreferredOrientation( Dali::Window::PORTRAIT ), @@ -92,10 +95,6 @@ Window::~Window() { if( mIndicator ) { - mOverlay->Remove( mIndicator->GetActor() ); - Dali::RenderTaskList taskList = mOverlay->GetOverlayRenderTasks(); - Dali::RenderTask indicatorTask = taskList.GetTask(0); - mOverlay->GetOverlayRenderTasks().RemoveTask(indicatorTask); mIndicator->Close(); } @@ -103,10 +102,11 @@ Window::~Window() { mAdaptor->RemoveObserver( *this ); mAdaptor->SetDragAndDropDetector( NULL ); + mAdaptor->RemoveWindow( this ); mAdaptor = NULL; } - delete mSurface; + mSurface.reset( nullptr ); } void Window::Initialize(const PositionSize& positionSize, const std::string& name, const std::string& className) @@ -114,8 +114,7 @@ void Window::Initialize(const PositionSize& positionSize, const std::string& nam // Create a window render surface Any surface; auto renderSurfaceFactory = Dali::Internal::Adaptor::GetRenderSurfaceFactory(); - auto windowRenderSurface = renderSurfaceFactory->CreateWindowRenderSurface( positionSize, surface, mIsTransparent ); - mSurface = windowRenderSurface.release(); + mSurface = renderSurfaceFactory->CreateWindowRenderSurface( positionSize, surface, mIsTransparent ); // Get a window base mWindowBase = mSurface->GetWindowBase(); @@ -146,23 +145,18 @@ void Window::SetAdaptor(Dali::Adaptor& adaptor) DALI_ASSERT_ALWAYS( !mStarted && "Adaptor already started" ); mStarted = true; - // Create one overlay for the main window only - Internal::Adaptor::Adaptor& adaptorImpl = Internal::Adaptor::Adaptor::GetImplementation(adaptor); - Integration::Core& core = adaptorImpl.GetCore(); - mOverlay = &core.GetSystemOverlay(); - - // Only create render task list for the overlay once - if (!mOverlay->GetOverlayRenderTasks()) - { - Dali::RenderTaskList overlayRenderTaskList = Integration::RenderTaskList::New(); + PositionSize positionSize = mSurface->GetPositionSize(); + mScene = Dali::Integration::Scene::New( Vector2(positionSize.width, positionSize.height) ); + mScene.SetSurface( *mSurface.get() ); - Dali::Actor overlayRootActor = mOverlay->GetDefaultRootActor(); - Dali::CameraActor overlayCameraActor = mOverlay->GetDefaultCameraActor(); - Integration::RenderTaskList::CreateTask( overlayRenderTaskList, overlayRootActor, overlayCameraActor ); + unsigned int dpiHorizontal, dpiVertical; + dpiHorizontal = dpiVertical = 0; - mOverlay->SetOverlayRenderTasks( overlayRenderTaskList ); - } + mSurface->GetDpi( dpiHorizontal, dpiVertical ); + mScene.SetDpi( Vector2( static_cast( dpiHorizontal ), static_cast( dpiVertical ) ) ); + // Create one overlay for the main window only + Internal::Adaptor::Adaptor& adaptorImpl = Internal::Adaptor::Adaptor::GetImplementation(adaptor); mAdaptor = &adaptorImpl; mAdaptor->AddObserver( *this ); @@ -179,11 +173,13 @@ void Window::SetAdaptor(Dali::Adaptor& adaptor) { mIndicator->SetAdaptor(mAdaptor); } + + mSurface->SetAdaptor( *mAdaptor ); } WindowRenderSurface* Window::GetSurface() { - return mSurface; + return mSurface.get(); } void Window::ShowIndicator( Dali::Window::IndicatorVisibleMode visibleMode ) @@ -239,6 +235,44 @@ void Window::Activate() mWindowBase->Activate(); } +void Window::Add( Dali::Actor actor ) +{ + mScene.Add( actor ); +} + +void Window::Remove( Dali::Actor actor ) +{ + mScene.Remove( actor ); +} + +Dali::Layer Window::GetRootLayer() const +{ + return mScene.GetRootLayer(); +} + +uint32_t Window::GetLayerCount() const +{ + return mScene.GetLayerCount(); +} + +Dali::Layer Window::GetLayer( uint32_t depth ) const +{ + return mScene.GetLayer( depth ); +} + +void Window::SetBackgroundColor( Vector4 color ) +{ + if ( mSurface ) + { + mSurface->SetBackgroundColor( color ); + } +} + +Vector4 Window::GetBackgroundColor() const +{ + return mSurface ? mSurface->GetBackgroundColor() : Vector4(); +} + void Window::AddAvailableOrientation( Dali::Window::WindowOrientation orientation ) { bool found = false; @@ -499,11 +533,11 @@ void Window::SetSize( Dali::Window::WindowSize size ) { Uint16Pair newSize( newRect.width, newRect.height ); - mAdaptor->SurfaceResizePrepare( newSize ); + mAdaptor->SurfaceResizePrepare( mSurface.get(), newSize ); mResizedSignal.Emit( newSize ); - mAdaptor->SurfaceResizeComplete( newSize ); + mAdaptor->SurfaceResizeComplete( mSurface.get(), newSize ); } } @@ -553,11 +587,11 @@ void Window::SetPositionSize( PositionSize positionSize ) { Uint16Pair newSize( newRect.width, newRect.height ); - mAdaptor->SurfaceResizePrepare( newSize ); + mAdaptor->SurfaceResizePrepare( mSurface.get(), newSize ); mResizedSignal.Emit( newSize ); - mAdaptor->SurfaceResizeComplete( newSize ); + mAdaptor->SurfaceResizeComplete( mSurface.get(), newSize ); } } @@ -590,12 +624,12 @@ void Window::RotationDone( int orientation, int width, int height ) { mSurface->RequestRotation( orientation, width, height ); - mAdaptor->SurfaceResizePrepare( Adaptor::SurfaceSize( width, height ) ); + mAdaptor->SurfaceResizePrepare( mSurface.get(), Adaptor::SurfaceSize( width, height ) ); // Emit signal mResizedSignal.Emit( Dali::Window::WindowSize( width, height ) ); - mAdaptor->SurfaceResizeComplete( Adaptor::SurfaceSize( width, height ) ); + mAdaptor->SurfaceResizeComplete( mSurface.get(), Adaptor::SurfaceSize( width, height ) ); } void Window::DoShowIndicator( Dali::Window::WindowOrientation lastOrientation ) @@ -611,7 +645,6 @@ void Window::DoShowIndicator( Dali::Window::WindowOrientation lastOrientation ) mIndicator->SetOpacityMode( mIndicatorOpacityMode ); Dali::Actor actor = mIndicator->GetActor(); SetIndicatorActorRotation(); - mOverlay->Add(actor); } } // else don't create a hidden indicator @@ -732,8 +765,8 @@ void Window::OnFocusChanged( bool focusIn ) void Window::OnOutputTransformed() { PositionSize positionSize = mSurface->GetPositionSize(); - mAdaptor->SurfaceResizePrepare( Adaptor::SurfaceSize( positionSize.width, positionSize.height ) ); - mAdaptor->SurfaceResizeComplete( Adaptor::SurfaceSize( positionSize.width, positionSize.height ) ); + mAdaptor->SurfaceResizePrepare( mSurface.get(), Adaptor::SurfaceSize( positionSize.width, positionSize.height ) ); + mAdaptor->SurfaceResizeComplete( mSurface.get(), Adaptor::SurfaceSize( positionSize.width, positionSize.height ) ); } void Window::OnDeleteRequest() @@ -811,6 +844,11 @@ void Window::OnDestroy() mAdaptor = NULL; } +uint32_t Window::GetId() const +{ + return mId; +} + } // Adaptor } // Internal