X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=adaptors%2Fecore%2Fwayland%2Fwindow-impl-ecore-wl.cpp;h=6a71e003b8119bd39b1403f2ef57a232909f55e0;hb=542f365adb39027f50b8d7b957404ad69c767035;hp=73c0c5a5ff1e5c047dc0bd295de16f1aad761eed;hpb=d370ec687e37a2adb6cc230625bb289361f11446;p=platform%2Fcore%2Fuifw%2Fdali-adaptor.git diff --git a/adaptors/ecore/wayland/window-impl-ecore-wl.cpp b/adaptors/ecore/wayland/window-impl-ecore-wl.cpp index 73c0c5a..6a71e00 100644 --- a/adaptors/ecore/wayland/window-impl-ecore-wl.cpp +++ b/adaptors/ecore/wayland/window-impl-ecore-wl.cpp @@ -68,11 +68,7 @@ struct Window::EventHandler */ EventHandler( Window* window ) : mWindow( window ), - mWindowPropertyHandler( NULL ), - mWindowIconifyStateHandler( NULL ), - mWindowVisibilityStateHandler( NULL ), - mWindowFocusInHandler( NULL ), - mWindowFocusOutHandler( NULL ), + mEcoreEventHandler(), mEcoreWindow( 0 ), mDisplay( NULL ), mEventQueue( NULL ), @@ -98,10 +94,11 @@ struct Window::EventHandler if( mWindow->mEcoreEventHander ) { - mWindowIconifyStateHandler = ecore_event_handler_add( ECORE_WL_EVENT_WINDOW_ICONIFY_STATE_CHANGE, EcoreEventWindowIconifyStateChanged, this ); - mWindowVisibilityStateHandler = ecore_event_handler_add( ECORE_WL_EVENT_WINDOW_VISIBILITY_CHANGE, EcoreEventWindowVisibilityChanged, this ); - mWindowFocusInHandler = ecore_event_handler_add( ECORE_WL_EVENT_FOCUS_IN, EcoreEventWindowFocusIn, this ); - mWindowFocusOutHandler = ecore_event_handler_add( ECORE_WL_EVENT_FOCUS_OUT, EcoreEventWindowFocusOut, this ); + mEcoreEventHandler.PushBack( ecore_event_handler_add( ECORE_WL_EVENT_WINDOW_ICONIFY_STATE_CHANGE, EcoreEventWindowIconifyStateChanged, this ) ); + mEcoreEventHandler.PushBack( ecore_event_handler_add( ECORE_WL_EVENT_FOCUS_IN, EcoreEventWindowFocusIn, this ) ); + mEcoreEventHandler.PushBack( ecore_event_handler_add( ECORE_WL_EVENT_FOCUS_OUT, EcoreEventWindowFocusOut, this ) ); + mEcoreEventHandler.PushBack( ecore_event_handler_add( ECORE_WL_EVENT_OUTPUT_TRANSFORM, EcoreEventOutputTransform, this) ); + mEcoreEventHandler.PushBack( ecore_event_handler_add( ECORE_WL_EVENT_IGNORE_OUTPUT_TRANSFORM, EcoreEventIgnoreOutputTransform, this) ); } mDisplay = ecore_wl_display_get(); @@ -130,30 +127,11 @@ struct Window::EventHandler */ ~EventHandler() { - if ( mWindowPropertyHandler ) + for( Dali::Vector< Ecore_Event_Handler* >::Iterator iter = mEcoreEventHandler.Begin(), endIter = mEcoreEventHandler.End(); iter != endIter; ++iter ) { - ecore_event_handler_del( mWindowPropertyHandler ); - } - - if ( mWindowIconifyStateHandler ) - { - ecore_event_handler_del( mWindowIconifyStateHandler ); - } - - if ( mWindowVisibilityStateHandler ) - { - ecore_event_handler_del( mWindowVisibilityStateHandler ); - } - - if( mWindowFocusInHandler ) - { - ecore_event_handler_del( mWindowFocusInHandler ); - } - - if( mWindowFocusOutHandler ) - { - ecore_event_handler_del( mWindowFocusOutHandler ); + ecore_event_handler_del( *iter ); } + mEcoreEventHandler.Clear(); if( mEventQueue ) { @@ -163,12 +141,6 @@ struct Window::EventHandler // Static methods - /// Called when the window properties are changed. - static Eina_Bool EcoreEventWindowPropertyChanged( void* data, int type, void* event ) - { - return EINA_FALSE; - } - /// Called when the window iconify state is changed. static Eina_Bool EcoreEventWindowIconifyStateChanged( void* data, int type, void* event ) { @@ -198,35 +170,6 @@ struct Window::EventHandler return handled; } - /// Called when the window visibility is changed. - static Eina_Bool EcoreEventWindowVisibilityChanged( void* data, int type, void* event ) - { - Ecore_Wl_Event_Window_Visibility_Change* visibilityChangedEvent( static_cast< Ecore_Wl_Event_Window_Visibility_Change* >( event ) ); - EventHandler* handler( static_cast< EventHandler* >( data ) ); - Eina_Bool handled( ECORE_CALLBACK_PASS_ON ); - - if ( handler && handler->mWindow ) - { - WindowVisibilityObserver* observer( handler->mWindow->mAdaptor ); - if ( observer && ( visibilityChangedEvent->win == static_cast< unsigned int >( ecore_wl_window_id_get( handler->mEcoreWindow ) ) ) ) - { - if( visibilityChangedEvent->fully_obscured == 1 ) - { - observer->OnWindowHidden(); - DALI_LOG_INFO( gWindowLogFilter, Debug::General, "Window (%d) full obscured\n", handler->mEcoreWindow ); - } - else - { - observer->OnWindowShown(); - DALI_LOG_INFO( gWindowLogFilter, Debug::General, "Window (%d) Shown\n", handler->mEcoreWindow ); - } - handled = ECORE_CALLBACK_DONE; - } - } - - return handled; - } - /// Called when the window gains focus static Eina_Bool EcoreEventWindowFocusIn( void* data, int type, void* event ) { @@ -259,6 +202,42 @@ struct Window::EventHandler return ECORE_CALLBACK_PASS_ON; } + /// Called when the output is transformed + static Eina_Bool EcoreEventOutputTransform( void* data, int type, void* event ) + { + Ecore_Wl_Event_Output_Transform* transformEvent( static_cast< Ecore_Wl_Event_Output_Transform* >( event ) ); + EventHandler* handler( static_cast< EventHandler* >( data ) ); + + if ( handler && handler->mWindow && transformEvent->output == ecore_wl_window_output_find( handler->mEcoreWindow ) ) + { + ECore::WindowRenderSurface* wlSurface( dynamic_cast< ECore::WindowRenderSurface * >( handler->mWindow->mSurface ) ); + if( wlSurface ) + { + wlSurface->OutputTransformed(); + } + } + + return ECORE_CALLBACK_PASS_ON; + } + + /// Called when the output transform should be ignored + static Eina_Bool EcoreEventIgnoreOutputTransform( void* data, int type, void* event ) + { + Ecore_Wl_Event_Ignore_Output_Transform* ignoreTransformEvent( static_cast< Ecore_Wl_Event_Ignore_Output_Transform* >( event ) ); + EventHandler* handler( static_cast< EventHandler* >( data ) ); + + if ( handler && handler->mWindow && ignoreTransformEvent->win == handler->mEcoreWindow ) + { + ECore::WindowRenderSurface* wlSurface( dynamic_cast< ECore::WindowRenderSurface * >( handler->mWindow->mSurface ) ); + if( wlSurface ) + { + wlSurface->OutputTransformed(); + } + } + + return ECORE_CALLBACK_PASS_ON; + } + static void RegistryGlobalCallback( void* data, struct wl_registry *registry, uint32_t name, const char* interface, uint32_t version ) { Window::EventHandler* eventHandler = static_cast< Window::EventHandler* >( data ); @@ -357,11 +336,7 @@ struct Window::EventHandler // Data Window* mWindow; - Ecore_Event_Handler* mWindowPropertyHandler; - Ecore_Event_Handler* mWindowIconifyStateHandler; - Ecore_Event_Handler* mWindowVisibilityStateHandler; - Ecore_Event_Handler* mWindowFocusInHandler; - Ecore_Event_Handler* mWindowFocusOutHandler; + Dali::Vector< Ecore_Event_Handler* > mEcoreEventHandler; Ecore_Wl_Window* mEcoreWindow; wl_display* mDisplay; @@ -907,43 +882,18 @@ bool Window::IsVisible() const void Window::RotationDone( int orientation, int width, int height ) { - mAdaptor->SurfaceSizeChanged( Dali::Adaptor::SurfaceSize( width, height ) ); + ECore::WindowRenderSurface* wlSurface( dynamic_cast< ECore::WindowRenderSurface * >( mSurface ) ); + if( wlSurface ) + { + wlSurface->RequestRotation( orientation, width, height ); + } + + mAdaptor->SurfaceResizePrepare( Dali::Adaptor::SurfaceSize( width, height ) ); // Emit signal mResizedSignal.Emit( Dali::DevelWindow::WindowSize( width, height ) ); - Dali::Window::WindowOrientation windowOrientation; - switch( orientation ) - { - case 0: - { - windowOrientation = Dali::Window::PORTRAIT; - break; - } - case 90: - { - windowOrientation = Dali::Window::LANDSCAPE; - break; - } - case 180: - { - windowOrientation = Dali::Window::PORTRAIT_INVERSE; - break; - } - case 270: - { - windowOrientation = Dali::Window::LANDSCAPE_INVERSE; - break; - } - default: - { - windowOrientation = Dali::Window::PORTRAIT; - break; - } - } - - ECore::WindowRenderSurface* wlSurface( dynamic_cast< ECore::WindowRenderSurface * >( mSurface ) ); - wlSurface->RequestRotation( windowOrientation, width, height ); + mAdaptor->SurfaceResizeComplete( Dali::Adaptor::SurfaceSize( width, height ) ); } unsigned int Window::GetSupportedAuxiliaryHintCount() @@ -1475,10 +1425,12 @@ void Window::SetSize( Dali::DevelWindow::WindowSize size ) mSurface->MoveResize( positionSize ); - mAdaptor->SurfaceSizeChanged( Dali::Adaptor::SurfaceSize( positionSize.width, positionSize.height ) ); + mAdaptor->SurfaceResizePrepare( Dali::Adaptor::SurfaceSize( positionSize.width, positionSize.height ) ); // Emit signal mResizedSignal.Emit( Dali::DevelWindow::WindowSize( positionSize.width, positionSize.height ) ); + + mAdaptor->SurfaceResizeComplete( Dali::Adaptor::SurfaceSize( positionSize.width, positionSize.height ) ); } } @@ -1518,7 +1470,10 @@ Dali::DevelWindow::WindowPosition Window::GetPosition() void Window::SetTransparency( bool transparent ) { ECore::WindowRenderSurface* wlSurface( dynamic_cast< ECore::WindowRenderSurface * >( mSurface ) ); - wlSurface->SetTransparency( transparent ); + if( wlSurface ) + { + wlSurface->SetTransparency( transparent ); + } } } // Adaptor