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=4e414ba6fb387b8c731944971977e90b1052f736;hpb=c515b14cdbaa95d243e4f7550c02dc02e985aeac;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 4e414ba6..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,9 +20,13 @@ // EXTERNAL HEADERS #include -#include +#include +#include +#include +#include #include #include +#include #include // INTERNAL HEADERS @@ -41,6 +45,8 @@ namespace Internal namespace Adaptor { +uint32_t Window::mWindowCounter = 0; + namespace { @@ -59,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 ), @@ -75,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 ), @@ -90,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(); } @@ -101,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) @@ -112,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(); @@ -144,14 +145,18 @@ void Window::SetAdaptor(Dali::Adaptor& adaptor) DALI_ASSERT_ALWAYS( !mStarted && "Adaptor already started" ); mStarted = true; - // Only create one overlay per window - Internal::Adaptor::Adaptor& adaptorImpl = Internal::Adaptor::Adaptor::GetImplementation(adaptor); - Integration::Core& core = adaptorImpl.GetCore(); - mOverlay = &core.GetSystemOverlay(); + PositionSize positionSize = mSurface->GetPositionSize(); + mScene = Dali::Integration::Scene::New( Vector2(positionSize.width, positionSize.height) ); + mScene.SetSurface( *mSurface.get() ); + + unsigned int dpiHorizontal, dpiVertical; + dpiHorizontal = dpiVertical = 0; - Dali::RenderTaskList taskList = mOverlay->GetOverlayRenderTasks(); - taskList.CreateTask(); + 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 ); @@ -168,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 ) @@ -228,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; @@ -477,21 +522,22 @@ void Window::SetSize( Dali::Window::WindowSize size ) mResizeEnabled = true; } - PositionSize positionSize = mSurface->GetPositionSize(); + PositionSize oldRect = mSurface->GetPositionSize(); - if( positionSize.width != size.GetWidth() || positionSize.height != size.GetHeight() ) - { - positionSize.width = size.GetWidth(); - positionSize.height = size.GetHeight(); + mSurface->MoveResize( PositionSize( oldRect.x, oldRect.y, size.GetWidth(), size.GetHeight() ) ); - mSurface->MoveResize( positionSize ); + PositionSize newRect = mSurface->GetPositionSize(); + + // When surface size is updated, inform adaptor of resizing and emit ResizeSignal + if( ( oldRect.width != newRect.width ) || ( oldRect.height != newRect.height ) ) + { + Uint16Pair newSize( newRect.width, newRect.height ); - mAdaptor->SurfaceResizePrepare( Adaptor::SurfaceSize( positionSize.width, positionSize.height ) ); + mAdaptor->SurfaceResizePrepare( mSurface.get(), newSize ); - // Emit signal - mResizedSignal.Emit( Dali::Window::WindowSize( positionSize.width, positionSize.height ) ); + mResizedSignal.Emit( newSize ); - mAdaptor->SurfaceResizeComplete( Adaptor::SurfaceSize( positionSize.width, positionSize.height ) ); + mAdaptor->SurfaceResizeComplete( mSurface.get(), newSize ); } } @@ -510,15 +556,9 @@ void Window::SetPosition( Dali::Window::WindowPosition position ) mResizeEnabled = true; } - PositionSize positionSize = mSurface->GetPositionSize(); - - if( positionSize.x != position.GetX() || positionSize.y != position.GetY() ) - { - positionSize.x = position.GetX(); - positionSize.y = position.GetY(); + PositionSize oldRect = mSurface->GetPositionSize(); - mSurface->MoveResize( positionSize ); - } + mSurface->MoveResize( PositionSize( position.GetX(), position.GetY(), oldRect.width, oldRect.height ) ); } Dali::Window::WindowPosition Window::GetPosition() const @@ -528,6 +568,33 @@ Dali::Window::WindowPosition Window::GetPosition() const return Dali::Window::WindowPosition( positionSize.x, positionSize.y ); } +void Window::SetPositionSize( PositionSize positionSize ) +{ + if( !mResizeEnabled ) + { + AddAuxiliaryHint( "wm.policy.win.user.geometry", "1" ); + mResizeEnabled = true; + } + + PositionSize oldRect = mSurface->GetPositionSize(); + + mSurface->MoveResize( positionSize ); + + PositionSize newRect = mSurface->GetPositionSize(); + + // When surface size is updated, inform adaptor of resizing and emit ResizeSignal + if( ( oldRect.width != newRect.width ) || ( oldRect.height != newRect.height ) ) + { + Uint16Pair newSize( newRect.width, newRect.height ); + + mAdaptor->SurfaceResizePrepare( mSurface.get(), newSize ); + + mResizedSignal.Emit( newSize ); + + mAdaptor->SurfaceResizeComplete( mSurface.get(), newSize ); + } +} + void Window::SetTransparency( bool transparent ) { mSurface->SetTransparency( transparent ); @@ -557,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 ) @@ -578,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 @@ -699,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() @@ -778,6 +844,11 @@ void Window::OnDestroy() mAdaptor = NULL; } +uint32_t Window::GetId() const +{ + return mId; +} + } // Adaptor } // Internal