From 7f88db61bcdf7f900878752c47b7e8e0a5a31bd5 Mon Sep 17 00:00:00 2001 From: Jiyun Yang Date: Mon, 14 Oct 2019 15:23:58 +0900 Subject: [PATCH] [Tizen] Add Effect Start/End signal This reverts commit 69a5d36b6582848c57f59625ca61330e42521a75. Change-Id: Ia3f0fd43f986e61616db55ef83a3511165fab723 --- dali/devel-api/adaptor-framework/window-devel.cpp | 5 +++ dali/devel-api/adaptor-framework/window-devel.h | 36 ++++++++++++++++ dali/internal/window-system/common/window-base.cpp | 8 +++- dali/internal/window-system/common/window-base.h | 8 ++++ dali/internal/window-system/common/window-impl.cpp | 10 ++++- dali/internal/window-system/common/window-impl.h | 12 ++++++ .../ecore-wl2/window-base-ecore-wl2.cpp | 49 ++++++++++++++++++++++ .../ecore-wl2/window-base-ecore-wl2.h | 5 +++ 8 files changed, 131 insertions(+), 2 deletions(-) diff --git a/dali/devel-api/adaptor-framework/window-devel.cpp b/dali/devel-api/adaptor-framework/window-devel.cpp index 9d93348..c16a520 100644 --- a/dali/devel-api/adaptor-framework/window-devel.cpp +++ b/dali/devel-api/adaptor-framework/window-devel.cpp @@ -65,6 +65,11 @@ WheelEventSignalType& WheelEventSignal( Window window ) return GetImplementation( window ).WheelEventSignal(); } +TransitionEffectEventSignalType& TransitionEffectEventSignal( Window window ) +{ + return GetImplementation( window ).TransitionEffectEventSignal(); +} + void SetParent( Window window, Window parent ) { GetImplementation( window ).SetParent( parent ); diff --git a/dali/devel-api/adaptor-framework/window-devel.h b/dali/devel-api/adaptor-framework/window-devel.h index ca90c51..da532d3 100644 --- a/dali/devel-api/adaptor-framework/window-devel.h +++ b/dali/devel-api/adaptor-framework/window-devel.h @@ -30,6 +30,25 @@ class RenderTaskList; namespace DevelWindow { +/** + * @brief Enumeration for transition effect's state. + */ +enum class EffectState +{ + NONE = 0, ///< None state + START, ///< Transition effect is started. + END ///< Transition effect is ended. +}; + +/** + * @brief Enumeration for transition effect's type. + */ +enum class EffectType +{ + NONE = 0, ///< None type + SHOW, ///< Window show effect. + HIDE, ///< Window hide effect. +}; typedef Signal< void () > EventProcessingFinishedSignalType; ///< Event Processing finished signal type @@ -39,6 +58,8 @@ typedef Signal< void (const TouchData&) > TouchSignalType; ///< Touch si typedef Signal< void (const WheelEvent&) > WheelEventSignalType; ///< Touched signal type +typedef Signal< void (Window, EffectState, EffectType) > TransitionEffectEventSignalType; ///< Effect signal type and state + /** * @brief Sets position and size of the window. This API guarantees that both moving and resizing of window will appear on the screen at once. * @@ -114,6 +135,21 @@ DALI_ADAPTOR_API TouchSignalType& TouchSignal( Window window ); DALI_ADAPTOR_API WheelEventSignalType& WheelEventSignal( Window window ); /** + * @brief This signal is emitted for transition effect. + * + * The transition animation is appeared when the window is shown/hidden. + * When the animation is started, START signal is emitted. + * Then the animation is ended, END signal is emitted, too. + * A callback of the following type may be connected: + * @code + * void YourCallbackName( Window window, EffectState state, EffectType type ); + * @endcode + * @param[in] window The window instance + * @return The signal to connect to + */ +DALI_ADAPTOR_API TransitionEffectEventSignalType& TransitionEffectEventSignal( Window window ); + +/** * @brief Sets parent window of the window. * * After setting that, these windows do together when raise-up, lower and iconified/deiconified. diff --git a/dali/internal/window-system/common/window-base.cpp b/dali/internal/window-system/common/window-base.cpp index 8c63be3..f3101b6 100644 --- a/dali/internal/window-system/common/window-base.cpp +++ b/dali/internal/window-system/common/window-base.cpp @@ -40,7 +40,8 @@ WindowBase::WindowBase() mSelectionDataSendSignal(), mSelectionDataReceivedSignal(), mStyleChangedSignal(), - mAccessibilitySignal() + mAccessibilitySignal(), + mTransitionEffectEventSignal() { } @@ -113,6 +114,11 @@ WindowBase::AccessibilitySignalType& WindowBase::AccessibilitySignal() return mAccessibilitySignal; } +WindowBase::TransitionEffectEventSignalType& WindowBase::TransitionEffectEventSignal() +{ + return mTransitionEffectEventSignal; +} + } // namespace Adaptor } // namespace Internal diff --git a/dali/internal/window-system/common/window-base.h b/dali/internal/window-system/common/window-base.h index 2246d6c..86cb25b 100644 --- a/dali/internal/window-system/common/window-base.h +++ b/dali/internal/window-system/common/window-base.h @@ -30,6 +30,7 @@ #include #include #include +#include #include #include #include @@ -69,6 +70,7 @@ public: typedef Signal< void ( ) > DeleteSignalType; typedef Signal< void ( const DamageArea& ) > DamageSignalType; typedef Signal< void ( const RotationEvent& ) > RotationSignalType; + typedef Signal< void ( DevelWindow::EffectState, DevelWindow::EffectType ) > TransitionEffectEventSignalType; // Input events typedef Signal< void ( Integration::Point&, uint32_t ) > TouchEventSignalType; @@ -411,6 +413,11 @@ public: */ AccessibilitySignalType& AccessibilitySignal(); + /** + * @brief This signal is emitted when window's transition animation is started or ended. + */ + TransitionEffectEventSignalType& TransitionEffectEventSignal(); + protected: // Undefined @@ -434,6 +441,7 @@ protected: SelectionSignalType mSelectionDataReceivedSignal; StyleSignalType mStyleChangedSignal; AccessibilitySignalType mAccessibilitySignal; + TransitionEffectEventSignalType mTransitionEffectEventSignal; }; } // namespace Adaptor diff --git a/dali/internal/window-system/common/window-impl.cpp b/dali/internal/window-system/common/window-impl.cpp index d5f8383..0db7230 100644 --- a/dali/internal/window-system/common/window-impl.cpp +++ b/dali/internal/window-system/common/window-impl.cpp @@ -86,7 +86,8 @@ Window::Window() mResizedSignal(), mDeleteRequestSignal(), mFocusChangeSignal(), - mResizeSignal() + mResizeSignal(), + mTransitionEffectEventSignal() { } @@ -113,6 +114,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 ); @@ -618,6 +620,12 @@ void Window::OnDeleteRequest() mDeleteRequestSignal.Emit(); } +void Window::OnTransitionEffectEvent( DevelWindow::EffectState state, DevelWindow::EffectType type ) +{ + Dali::Window handle( this ); + mTransitionEffectEventSignal.Emit( handle, state, type ); +} + void Window::OnTouchPoint( Dali::Integration::Point& point, int timeStamp ) { FeedTouchPoint( point, timeStamp ); diff --git a/dali/internal/window-system/common/window-impl.h b/dali/internal/window-system/common/window-impl.h index bebb11b..cca3643 100644 --- a/dali/internal/window-system/common/window-impl.h +++ b/dali/internal/window-system/common/window-impl.h @@ -67,6 +67,7 @@ public: typedef Dali::Window::ResizedSignalType ResizedSignalType; typedef Dali::Window::FocusChangeSignalType FocusChangeSignalType; typedef Dali::Window::ResizeSignalType ResizeSignalType; + typedef Dali::DevelWindow::TransitionEffectEventSignalType TransitionEffectEventSignalType; typedef Signal< void () > SignalType; /** @@ -400,6 +401,11 @@ private: */ void OnDeleteRequest(); + /** + * Called when the window receives a Transition effect-start/end event. + */ + void OnTransitionEffectEvent( DevelWindow::EffectState state, DevelWindow::EffectType type ); + private: // Dali::Internal::Adaptor::SceneHolder /** @@ -484,6 +490,11 @@ public: // Signals */ Dali::DevelWindow::EventProcessingFinishedSignalType& EventProcessingFinishedSignal() { return mScene.EventProcessingFinishedSignal(); } + /** + * @copydoc Dali::DevelWindow::TransitionEffectEventSignal() + */ + TransitionEffectEventSignalType& TransitionEffectEventSignal() { return mTransitionEffectEventSignal; } + private: WindowRenderSurface* mWindowSurface; ///< The window rendering surface @@ -515,6 +526,7 @@ private: SignalType mDeleteRequestSignal; FocusChangeSignalType mFocusChangeSignal; ResizeSignalType mResizeSignal; + TransitionEffectEventSignalType mTransitionEffectEventSignal; }; } // namespace Adaptor diff --git a/dali/internal/window-system/tizen-wayland/ecore-wl2/window-base-ecore-wl2.cpp b/dali/internal/window-system/tizen-wayland/ecore-wl2/window-base-ecore-wl2.cpp index 0149f41..de1c76d 100755 --- a/dali/internal/window-system/tizen-wayland/ecore-wl2/window-base-ecore-wl2.cpp +++ b/dali/internal/window-system/tizen-wayland/ecore-wl2/window-base-ecore-wl2.cpp @@ -432,6 +432,46 @@ static Eina_Bool EcoreEventDataReceive( void* data, int type, void* event ) } ///////////////////////////////////////////////////////////////////////////////////////////////// +// Effect Start/End Callbacks +///////////////////////////////////////////////////////////////////////////////////////////////// + +/** + * Called when transition animation of the window's shown/hidden is started by window manager. + */ +static Eina_Bool EcoreEventEffectStart(void *data, int type, void *event) +{ + WindowBaseEcoreWl2* windowBase = static_cast< WindowBaseEcoreWl2* >( data ); + Ecore_Wl2_Event_Effect_Start *effectStart = static_cast( event ); + DALI_LOG_INFO( gWindowBaseLogFilter, Debug::General, "WindowBaseEcoreWl2::EcoreEventEffectStart, effect type[ %d ]\n", effectStart->type ); + if( windowBase ) + { + if( effectStart->type < 3 ) // only under restack + { + windowBase->OnTransitionEffectEvent( DevelWindow::EffectState::START, static_cast( effectStart->type ) ); + } + } + return ECORE_CALLBACK_PASS_ON; +} + +/** + * Called when transition animation of the window's shown/hidden is ended by window manager. + */ +static Eina_Bool EcoreEventEffectEnd(void *data, int type, void *event) +{ + Ecore_Wl2_Event_Effect_Start *effectEnd = static_cast( event ); + WindowBaseEcoreWl2* windowBase = static_cast< WindowBaseEcoreWl2* >( data ); + DALI_LOG_INFO( gWindowBaseLogFilter, Debug::General, "WindowBaseEcoreWl2::EcoreEventEffectEnd, effect type[ %d ]\n", effectEnd->type ); + if( windowBase ) + { + if( effectEnd->type < 3 ) // only under restack + { + windowBase->OnTransitionEffectEvent( DevelWindow::EffectState::END, static_cast( effectEnd->type ) ); + } + } + return ECORE_CALLBACK_PASS_ON; +} + +///////////////////////////////////////////////////////////////////////////////////////////////// // Font Callbacks ///////////////////////////////////////////////////////////////////////////////////////////////// @@ -707,6 +747,10 @@ void WindowBaseEcoreWl2::Initialize( PositionSize positionSize, Any surface, boo mEcoreEventHandler.PushBack( ecore_event_handler_add( ECORE_WL2_EVENT_DATA_SOURCE_SEND, EcoreEventDataSend, this ) ); mEcoreEventHandler.PushBack( ecore_event_handler_add( ECORE_WL2_EVENT_SELECTION_DATA_READY, EcoreEventDataReceive, this ) ); + // Register Effect Start/End event + mEcoreEventHandler.PushBack( ecore_event_handler_add( ECORE_WL2_EVENT_EFFECT_START, EcoreEventEffectStart, this ) ); + mEcoreEventHandler.PushBack( ecore_event_handler_add( ECORE_WL2_EVENT_EFFECT_END, EcoreEventEffectEnd, this ) ); + // Register Vconf notify - font name and size vconf_notify_key_changed( DALI_VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_NAME, VconfNotifyFontNameChanged, this ); vconf_notify_key_changed( VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE, VconfNotifyFontSizeChanged, this ); @@ -1147,6 +1191,11 @@ void WindowBaseEcoreWl2::OnEcoreElDBusAccessibilityNotification( void* context, #endif } +void WindowBaseEcoreWl2::OnTransitionEffectEvent( DevelWindow::EffectState state, DevelWindow::EffectType type ) +{ + mTransitionEffectEventSignal.Emit( state, type ); +} + void WindowBaseEcoreWl2::RegistryGlobalCallback( void* data, struct wl_registry *registry, uint32_t name, const char* interface, uint32_t version ) { if( strcmp( interface, tizen_policy_interface.name ) == 0 ) diff --git a/dali/internal/window-system/tizen-wayland/ecore-wl2/window-base-ecore-wl2.h b/dali/internal/window-system/tizen-wayland/ecore-wl2/window-base-ecore-wl2.h index a9edd4e..b64a873 100644 --- a/dali/internal/window-system/tizen-wayland/ecore-wl2/window-base-ecore-wl2.h +++ b/dali/internal/window-system/tizen-wayland/ecore-wl2/window-base-ecore-wl2.h @@ -155,6 +155,11 @@ public: */ void OnFontSizeChanged(); + /** + * @brief Called when a transition effect-start/end event is received. + */ + void OnTransitionEffectEvent( DevelWindow::EffectState state, DevelWindow::EffectType type ); + #ifdef DALI_ELDBUS_AVAILABLE /** * @brief Called when Ecore ElDBus accessibility event is received. -- 2.7.4