X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Finternal%2Fwindow-system%2Fcommon%2Fwindow-impl.cpp;h=7e9a4fd60249eb6582f368f8f9c70a1c2c141bb8;hb=ea1bf2eb95d5f8b3529580da2f20c824dafba3a0;hp=443f86a3ff543c8eb6a593658e38b78b3ba10d40;hpb=3be8f9c4ecf53b680e158acdcb4a95af1a9c0878;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 443f86a..7e9a4fd 100644 --- a/dali/internal/window-system/common/window-impl.cpp +++ b/dali/internal/window-system/common/window-impl.cpp @@ -20,7 +20,6 @@ // EXTERNAL HEADERS #include -#include #include #include #include @@ -28,14 +27,10 @@ #include #include #include - -#ifdef DALI_ADAPTOR_COMPILATION -#include -#else -#include -#endif +#include // INTERNAL HEADERS +#include #include #include #include @@ -77,10 +72,18 @@ Window::Window() mOpaqueState( false ), mResizeEnabled( false ), mType( Dali::Window::NORMAL ), + mParentWindow( NULL ), mPreferredOrientation( Dali::Window::PORTRAIT ), + mRotationAngle( 0 ), + mWindowWidth( 0 ), + mWindowHeight( 0 ), mFocusChangedSignal(), mResizedSignal(), - mDeleteRequestSignal() + mDeleteRequestSignal(), + mFocusChangeSignal(), + mResizeSignal(), + mVisibilityChangedSignal(), + mTransitionEffectEventSignal() { } @@ -88,7 +91,7 @@ Window::~Window() { if ( mEventHandler ) { - mEventHandler->SetRotationObserver( nullptr ); + mEventHandler->RemoveObserver( *this ); } } @@ -107,6 +110,7 @@ void Window::Initialize(const PositionSize& positionSize, const std::string& nam mWindowBase->IconifyChangedSignal().Connect( this, &Window::OnIconifyChanged ); mWindowBase->FocusChangedSignal().Connect( this, &Window::OnFocusChanged ); mWindowBase->DeleteRequestSignal().Connect( this, &Window::OnDeleteRequest ); + mWindowBase->TransitionEffectEventSignal().Connect( this, &Window::OnTransitionEffectEvent ); mWindowSurface->OutputTransformedSignal().Connect( this, &Window::OnOutputTransformed ); @@ -125,13 +129,8 @@ void Window::Initialize(const PositionSize& positionSize, const std::string& nam void Window::OnAdaptorSet(Dali::Adaptor& adaptor) { - mEventHandler = EventHandlerPtr(new EventHandler( mScene, *mAdaptor, *mAdaptor ) ); - - // TODO: Orientation should be passed into the constructor of EventHandler - if( mOrientation ) - { - SetRotationObserver( &(*mOrientation) ); - } + mEventHandler = EventHandlerPtr(new EventHandler( mWindowSurface, *mAdaptor ) ); + mEventHandler->AddObserver( *this ); } void Window::OnSurfaceSet( Dali::RenderSurfaceInterface* surface ) @@ -166,16 +165,19 @@ std::string Window::GetClassName() const void Window::Raise() { mWindowBase->Raise(); + DALI_LOG_RELEASE_INFO( "Window (%p) Raise() \n", this ); } void Window::Lower() { mWindowBase->Lower(); + DALI_LOG_RELEASE_INFO( "Window (%p) Lower() \n", this ); } void Window::Activate() { mWindowBase->Activate(); + DALI_LOG_RELEASE_INFO( "Window (%p) Activate() \n", this ); } uint32_t Window::GetLayerCount() const @@ -188,6 +190,11 @@ Dali::Layer Window::GetLayer( uint32_t depth ) const return mScene.GetLayer( depth ); } +Dali::RenderTaskList Window::GetRenderTaskList() const +{ + return mScene.GetRenderTaskList(); +} + void Window::AddAvailableOrientation( Dali::Window::WindowOrientation orientation ) { bool found = false; @@ -282,6 +289,9 @@ void Window::Show() { WindowVisibilityObserver* observer( mAdaptor ); observer->OnWindowShown(); + + Dali::Window handle( this ); + mVisibilityChangedSignal.Emit( handle, true ); } DALI_LOG_RELEASE_INFO( "Window (%p) Show(): iconified = %d\n", this, mIconified ); @@ -297,6 +307,9 @@ void Window::Hide() { WindowVisibilityObserver* observer( mAdaptor ); observer->OnWindowHidden(); + + Dali::Window handle( this ); + mVisibilityChangedSignal.Emit( handle, false ); } DALI_LOG_RELEASE_INFO( "Window (%p) Hide(): iconified = %d\n", this, mIconified ); @@ -445,9 +458,19 @@ void Window::SetSize( Dali::Window::WindowSize size ) { Uint16Pair newSize( newRect.width, newRect.height ); + bool forceUpdate = false; + if( mWindowBase->IsEglWindowRotationSupported() ) + { + forceUpdate = true; + } + + SurfaceResized( forceUpdate ); + mAdaptor->SurfaceResizePrepare( mSurface.get(), newSize ); + Dali::Window handle( this ); mResizedSignal.Emit( newSize ); + mResizeSignal.Emit( handle, newSize ); mAdaptor->SurfaceResizeComplete( mSurface.get(), newSize ); } @@ -499,10 +522,19 @@ void Window::SetPositionSize( PositionSize positionSize ) { Uint16Pair newSize( newRect.width, newRect.height ); + bool forceUpdate = false; + if( mWindowBase->IsEglWindowRotationSupported() ) + { + forceUpdate = true; + } + + SurfaceResized( forceUpdate ); + mAdaptor->SurfaceResizePrepare( mSurface.get(), newSize ); + Dali::Window handle( this ); mResizedSignal.Emit( newSize ); - + mResizeSignal.Emit( handle, newSize ); mAdaptor->SurfaceResizeComplete( mSurface.get(), newSize ); } } @@ -537,18 +569,6 @@ bool Window::UngrabKeyList( const Dali::Vector< Dali::KEY >& key, Dali::Vector< return mWindowBase->UngrabKeyList( key, result ); } -void Window::RotationDone( int orientation, int width, int height ) -{ - mWindowSurface->RequestRotation( orientation, width, height ); - - mAdaptor->SurfaceResizePrepare( mSurface.get(), Adaptor::SurfaceSize( width, height ) ); - - // Emit signal - mResizedSignal.Emit( Dali::Window::WindowSize( width, height ) ); - - mAdaptor->SurfaceResizeComplete( mSurface.get(), Adaptor::SurfaceSize( width, height ) ); -} - void Window::OnIconifyChanged( bool iconified ) { if( iconified ) @@ -559,6 +579,9 @@ void Window::OnIconifyChanged( bool iconified ) { WindowVisibilityObserver* observer( mAdaptor ); observer->OnWindowHidden(); + + Dali::Window handle( this ); + mVisibilityChangedSignal.Emit( handle, false ); } DALI_LOG_RELEASE_INFO( "Window (%p) Iconified: visible = %d\n", this, mVisible ); @@ -571,6 +594,9 @@ void Window::OnIconifyChanged( bool iconified ) { WindowVisibilityObserver* observer( mAdaptor ); observer->OnWindowShown(); + + Dali::Window handle( this ); + mVisibilityChangedSignal.Emit( handle, true ); } DALI_LOG_RELEASE_INFO( "Window (%p) Deiconified: visible = %d\n", this, mVisible ); @@ -579,12 +605,20 @@ void Window::OnIconifyChanged( bool iconified ) void Window::OnFocusChanged( bool focusIn ) { + Dali::Window handle( this ); mFocusChangedSignal.Emit( focusIn ); + mFocusChangeSignal.Emit( handle, focusIn ); } void Window::OnOutputTransformed() { + bool forceUpdate = false; + if( mWindowBase->IsEglWindowRotationSupported() ) + { + forceUpdate = true; + } PositionSize positionSize = mSurface->GetPositionSize(); + SurfaceResized( forceUpdate ); mAdaptor->SurfaceResizePrepare( mSurface.get(), Adaptor::SurfaceSize( positionSize.width, positionSize.height ) ); mAdaptor->SurfaceResizeComplete( mSurface.get(), Adaptor::SurfaceSize( positionSize.width, positionSize.height ) ); } @@ -594,28 +628,54 @@ void Window::OnDeleteRequest() mDeleteRequestSignal.Emit(); } -void Window::FeedTouchPoint( TouchPoint& point, int timeStamp ) +void Window::OnTransitionEffectEvent( DevelWindow::EffectState state, DevelWindow::EffectType type ) { - if( mEventHandler ) - { - mEventHandler->FeedTouchPoint( point, timeStamp ); - } + Dali::Window handle( this ); + mTransitionEffectEventSignal.Emit( handle, state, type ); } -void Window::FeedWheelEvent( WheelEvent& wheelEvent ) +void Window::OnTouchPoint( Dali::Integration::Point& point, int timeStamp ) { - if( mEventHandler ) - { - mEventHandler->FeedWheelEvent( wheelEvent ); - } + FeedTouchPoint( point, timeStamp ); } -void Window::FeedKeyEvent( KeyEvent& keyEvent ) +void Window::OnWheelEvent( Dali::Integration::WheelEvent& wheelEvent ) { - if( mEventHandler ) + FeedWheelEvent( wheelEvent ); +} + +void Window::OnKeyEvent( Dali::Integration::KeyEvent& keyEvent ) +{ + FeedKeyEvent( keyEvent ); +} + +void Window::OnRotation( const RotationEvent& rotation ) +{ + mRotationAngle = rotation.angle; + mWindowWidth = rotation.width; + mWindowHeight = rotation.height; + + // Notify that the orientation is changed + mOrientation->OnOrientationChange( rotation ); + + mWindowSurface->RequestRotation( mRotationAngle, mWindowWidth, mWindowHeight ); + + bool forceUpdate = false; + if( mWindowBase->IsEglWindowRotationSupported() ) { - mEventHandler->FeedKeyEvent( keyEvent ); + forceUpdate = true; } + + SurfaceResized( forceUpdate ); + + mAdaptor->SurfaceResizePrepare( mSurface.get(), Adaptor::SurfaceSize( mWindowWidth, mWindowHeight ) ); + + // Emit signal + Dali::Window handle( this ); + mResizedSignal.Emit( Dali::Window::WindowSize( mWindowWidth, mWindowHeight ) ); + mResizeSignal.Emit( handle, Dali::Window::WindowSize( mWindowWidth, mWindowHeight ) ); + + mAdaptor->SurfaceResizeComplete( mSurface.get(), Adaptor::SurfaceSize( mWindowWidth, mWindowHeight ) ); } void Window::OnPause() @@ -634,15 +694,39 @@ void Window::OnResume() } } -bool Window::SetRotationObserver( RotationObserver* observer ) +void Window::RecalculateTouchPosition( Integration::Point& point ) { - if( mEventHandler ) + Vector2 position = point.GetScreenPosition(); + Vector2 convertedPosition; + + switch( mRotationAngle ) { - mEventHandler->SetRotationObserver( observer ); - return true; + case 90: + { + convertedPosition.x = static_cast( mWindowWidth ) - position.y; + convertedPosition.y = position.x; + break; + } + case 180: + { + convertedPosition.x = static_cast( mWindowWidth ) - position.x; + convertedPosition.y = static_cast( mWindowHeight ) - position.y; + break; + } + case 270: + { + convertedPosition.x = position.y; + convertedPosition.y = static_cast( mWindowHeight ) - position.x; + break; + } + default: + { + convertedPosition = position; + break; + } } - return false; + point.SetScreenPosition( convertedPosition ); } Dali::Window Window::Get( Dali::Actor actor ) @@ -658,6 +742,32 @@ Dali::Window Window::Get( Dali::Actor actor ) return Dali::Window( windowImpl ); } +void Window::SetParent( Dali::Window& parent ) +{ + if ( DALI_UNLIKELY( parent ) ) + { + mParentWindow = parent; + Dali::Window self = Dali::Window( this ); + // check circular parent window setting + if ( Dali::DevelWindow::GetParent( parent ) == self ) + { + Dali::DevelWindow::Unparent( parent ); + } + mWindowBase->SetParent( GetImplementation( mParentWindow ).mWindowBase ); + } +} + +void Window::Unparent() +{ + mWindowBase->SetParent( nullptr ); + mParentWindow.Reset(); +} + +Dali::Window Window::GetParent() +{ + return mParentWindow; +} + } // Adaptor } // Internal