X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Finternal%2Fwindow-system%2Fcommon%2Fwindow-impl.cpp;h=fdb01bd83a526a1325503f3541a01713d8373e0a;hb=15cb030e9396d29dab2de0bd298c1daf810bcf5f;hp=564ff1469268655e44972f2302960caa033e20a0;hpb=cbd5f6a3aa51671c2fceb1ec93f3576e7ba2a93d;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 564ff14..fdb01bd 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,9 +27,15 @@ #include #include #include +#include + +#ifdef DALI_ADAPTOR_COMPILATION +#include +#else +#include +#endif // INTERNAL HEADERS -#include #include #include #include @@ -46,8 +51,6 @@ namespace Internal namespace Adaptor { -uint32_t Window::mWindowCounter = 0; - namespace { @@ -66,37 +69,32 @@ Window* Window::New( const PositionSize& positionSize, const std::string& name, } Window::Window() -: mId( mWindowCounter++ ), - mSurface( nullptr ), +: mWindowSurface( nullptr ), mWindowBase(), - mStarted( false ), mIsTransparent( false ), mIsFocusAcceptable( true ), - mVisible( true ), mIconified( false ), mOpaqueState( false ), mResizeEnabled( false ), - mAdaptor( NULL ), mType( Dali::Window::NORMAL ), + mParentWindow( NULL ), mPreferredOrientation( Dali::Window::PORTRAIT ), + mRotationAngle( 0 ), + mWindowWidth( 0 ), + mWindowHeight( 0 ), mFocusChangedSignal(), mResizedSignal(), - mDeleteRequestSignal() + mDeleteRequestSignal(), + mFocusChangeSignal(), + mResizeSignal() { } Window::~Window() { - if ( mAdaptor ) - { - mAdaptor->RemoveObserver( *this ); - mAdaptor->RemoveWindow( this ); - mAdaptor = NULL; - } - if ( mEventHandler ) { - mEventHandler->SetRotationObserver( nullptr ); + mEventHandler->RemoveObserver( *this ); } } @@ -106,16 +104,17 @@ void Window::Initialize(const PositionSize& positionSize, const std::string& nam Any surface; auto renderSurfaceFactory = Dali::Internal::Adaptor::GetRenderSurfaceFactory(); mSurface = renderSurfaceFactory->CreateWindowRenderSurface( positionSize, surface, mIsTransparent ); + mWindowSurface = static_cast( mSurface.get() ); // Get a window base - mWindowBase = mSurface->GetWindowBase(); + mWindowBase = mWindowSurface->GetWindowBase(); // Connect signals mWindowBase->IconifyChangedSignal().Connect( this, &Window::OnIconifyChanged ); mWindowBase->FocusChangedSignal().Connect( this, &Window::OnFocusChanged ); mWindowBase->DeleteRequestSignal().Connect( this, &Window::OnDeleteRequest ); - mSurface->OutputTransformedSignal().Connect( this, &Window::OnOutputTransformed ); + mWindowSurface->OutputTransformedSignal().Connect( this, &Window::OnOutputTransformed ); if( !positionSize.IsEmpty() ) { @@ -125,73 +124,20 @@ void Window::Initialize(const PositionSize& positionSize, const std::string& nam SetClass( name, className ); - mSurface->Map(); + mWindowSurface->Map(); mOrientation = Orientation::New( this ); } -void Window::SetAdaptor(Dali::Adaptor& adaptor) +void Window::OnAdaptorSet(Dali::Adaptor& adaptor) { - Window::SetAdaptor( Internal::Adaptor::Adaptor::GetImplementation( adaptor ) ); -} - -void Window::SetAdaptor(Adaptor& adaptor) -{ - if( mStarted ) - { - return; - } - - mStarted = true; - - // Create scene for the window - 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; - - mSurface->GetDpi( dpiHorizontal, dpiVertical ); - mScene.SetDpi( Vector2( static_cast( dpiHorizontal ), static_cast( dpiVertical ) ) ); - - // Add the window to the adaptor observers - mAdaptor = &adaptor; - mAdaptor->AddObserver( *this ); - - // Can only create the detector when we know the Core has been instantiated. - mDragAndDropDetector = DragAndDropDetector::New(); - - mSurface->SetAdaptor( *mAdaptor ); - - mEventHandler = EventHandlerPtr( - new EventHandler( mScene, *mAdaptor, *mAdaptor->GetGestureManager(), *mAdaptor ) ); - - // TODO: Orientation should be passed into the constructor of EventHandler - if( mOrientation ) - { - SetRotationObserver( &(*mOrientation) ); - } + mEventHandler = EventHandlerPtr(new EventHandler( mWindowSurface, *mAdaptor ) ); + mEventHandler->AddObserver( *this ); } -WindowRenderSurface* Window::GetSurface() const +void Window::OnSurfaceSet( Dali::RenderSurfaceInterface* surface ) { - return mSurface.get(); -} - -void Window::SetSurface(WindowRenderSurface* surface) -{ - mSurface.reset( surface ); - - mScene.SetSurface( *mSurface.get() ); - - unsigned int dpiHorizontal, dpiVertical; - dpiHorizontal = dpiVertical = 0; - - mSurface->GetDpi( dpiHorizontal, dpiVertical ); - mScene.SetDpi( Vector2( static_cast( dpiHorizontal ), static_cast( dpiVertical ) ) ); - - mSurface->SetAdaptor( *mAdaptor ); + mWindowSurface = static_cast( surface ); } void Window::ShowIndicator( Dali::Window::IndicatorVisibleMode visibleMode ) @@ -213,11 +159,6 @@ void Window::SetClass( std::string name, std::string className ) mWindowBase->SetClass( name, className ); } -std::string Window::GetName() const -{ - return mName; -} - std::string Window::GetClassName() const { return mClassName; @@ -226,31 +167,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(); -} - -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(); + DALI_LOG_RELEASE_INFO( "Window (%p) Activate() \n", this ); } uint32_t Window::GetLayerCount() const @@ -263,17 +192,9 @@ Dali::Layer Window::GetLayer( uint32_t depth ) const return mScene.GetLayer( depth ); } -void Window::SetBackgroundColor( Vector4 color ) +Dali::RenderTaskList Window::GetRenderTaskList() const { - if ( mSurface ) - { - mSurface->SetBackgroundColor( color ); - } -} - -Vector4 Window::GetBackgroundColor() const -{ - return mSurface ? mSurface->GetBackgroundColor() : Vector4(); + return mScene.GetRenderTaskList(); } void Window::AddAvailableOrientation( Dali::Window::WindowOrientation orientation ) @@ -343,14 +264,9 @@ Dali::Window::WindowOrientation Window::GetPreferredOrientation() return mPreferredOrientation; } -Dali::DragAndDropDetector Window::GetDragAndDropDetector() const -{ - return mDragAndDropDetector; -} - Dali::Any Window::GetNativeHandle() const { - return mSurface->GetNativeWindow(); + return mWindowSurface->GetNativeWindow(); } void Window::SetAcceptFocus( bool accept ) @@ -397,7 +313,7 @@ void Window::Hide() bool Window::IsVisible() const { - return mVisible; + return mVisible && !mIconified; } unsigned int Window::GetSupportedAuxiliaryHintCount() const @@ -529,7 +445,7 @@ void Window::SetSize( Dali::Window::WindowSize size ) PositionSize oldRect = mSurface->GetPositionSize(); - mSurface->MoveResize( PositionSize( oldRect.x, oldRect.y, size.GetWidth(), size.GetHeight() ) ); + mWindowSurface->MoveResize( PositionSize( oldRect.x, oldRect.y, size.GetWidth(), size.GetHeight() ) ); PositionSize newRect = mSurface->GetPositionSize(); @@ -538,9 +454,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 ); } @@ -563,7 +489,7 @@ void Window::SetPosition( Dali::Window::WindowPosition position ) PositionSize oldRect = mSurface->GetPositionSize(); - mSurface->MoveResize( PositionSize( position.GetX(), position.GetY(), oldRect.width, oldRect.height ) ); + mWindowSurface->MoveResize( PositionSize( position.GetX(), position.GetY(), oldRect.width, oldRect.height ) ); } Dali::Window::WindowPosition Window::GetPosition() const @@ -583,7 +509,7 @@ void Window::SetPositionSize( PositionSize positionSize ) PositionSize oldRect = mSurface->GetPositionSize(); - mSurface->MoveResize( positionSize ); + mWindowSurface->MoveResize( positionSize ); PositionSize newRect = mSurface->GetPositionSize(); @@ -592,22 +518,31 @@ 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 ); } } -Dali::Layer Window::GetRootLayer() +Dali::Layer Window::GetRootLayer() const { return mScene.GetRootLayer(); } void Window::SetTransparency( bool transparent ) { - mSurface->SetTransparency( transparent ); + mWindowSurface->SetTransparency( transparent ); } bool Window::GrabKey( Dali::KEY key, KeyGrab::KeyGrabMode grabMode ) @@ -630,18 +565,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 ) -{ - mSurface->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 ) @@ -672,12 +595,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 ) ); } @@ -687,83 +618,139 @@ void Window::OnDeleteRequest() mDeleteRequestSignal.Emit(); } -void Window::OnStart() +void Window::OnTouchPoint( Dali::Integration::Point& point, int timeStamp ) { + FeedTouchPoint( point, timeStamp ); } -void Window::OnPause() +void Window::OnWheelEvent( Dali::Integration::WheelEvent& wheelEvent ) { + FeedWheelEvent( wheelEvent ); } -void Window::OnResume() +void Window::OnKeyEvent( Dali::Integration::KeyEvent& keyEvent ) { + FeedKeyEvent( keyEvent ); } -void Window::OnStop() +void Window::OnRotation( const RotationEvent& rotation ) { -} + mRotationAngle = rotation.angle; + mWindowWidth = rotation.width; + mWindowHeight = rotation.height; -void Window::OnDestroy() -{ - mAdaptor = NULL; -} + // Notify that the orientation is changed + mOrientation->OnOrientationChange( rotation ); -uint32_t Window::GetId() const -{ - return mId; -} + mWindowSurface->RequestRotation( mRotationAngle, mWindowWidth, mWindowHeight ); -void Window::FeedTouchPoint( TouchPoint& point, int timeStamp ) -{ - if( mEventHandler ) + bool forceUpdate = false; + if( mWindowBase->IsEglWindowRotationSupported() ) { - mEventHandler->FeedTouchPoint( point, timeStamp ); + 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::FeedWheelEvent( WheelEvent& wheelEvent ) +void Window::OnPause() { if( mEventHandler ) { - mEventHandler->FeedWheelEvent( wheelEvent ); + mEventHandler->Pause(); } } -void Window::FeedKeyEvent( KeyEvent& keyEvent ) +void Window::OnResume() { if( mEventHandler ) { - mEventHandler->FeedKeyEvent( keyEvent ); + mEventHandler->Resume(); } } -void Window::Pause() +void Window::RecalculateTouchPosition( Integration::Point& point ) { - if( mEventHandler ) + Vector2 position = point.GetScreenPosition(); + Vector2 convertedPosition; + + switch( mRotationAngle ) { - mEventHandler->Pause(); + 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; + } } + + point.SetScreenPosition( convertedPosition ); } -void Window::Resume() +Dali::Window Window::Get( Dali::Actor actor ) { - if( mEventHandler ) + Internal::Adaptor::Window* windowImpl = nullptr; + + if ( Internal::Adaptor::Adaptor::IsAvailable() ) { - mEventHandler->Resume(); + Dali::Internal::Adaptor::Adaptor& adaptor = Internal::Adaptor::Adaptor::GetImplementation( Internal::Adaptor::Adaptor::Get() ); + windowImpl = static_cast( adaptor.GetWindow( actor ) ); } + + return Dali::Window( windowImpl ); } -bool Window::SetRotationObserver( RotationObserver* observer ) +void Window::SetParent( Dali::Window& parent ) { - if( mEventHandler ) + if ( DALI_UNLIKELY( parent ) ) { - mEventHandler->SetRotationObserver( observer ); - return true; + mParentWindow = parent; + Dali::Window grandParent = Dali::DevelWindow::GetParent( parent ); + // check circular parent window setting + if ( DALI_UNLIKELY( grandParent ) && mWindowBase->IsMatchedWindow( grandParent.GetNativeHandle() ) ) + { + Dali::DevelWindow::Unparent( parent ); + } + mWindowBase->SetParent( parent.GetNativeHandle() ); } +} - return false; +void Window::Unparent() +{ + Any parent; + mWindowBase->SetParent( parent ); } +Dali::Window Window::GetParent() +{ + return mParentWindow; +} } // Adaptor