return GetImplementation( window ).VisibilityChangedSignal();
}
+TransitionEffectEventSignalType& TransitionEffectEventSignal( Window window )
+{
+ return GetImplementation( window ).TransitionEffectEventSignal();
+}
+
void SetParent( Window window, Window parent )
{
GetImplementation( window ).SetParent( parent );
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
typedef Signal< void ( Window, bool ) > VisibilityChangedSignalType; ///< Visibility changed 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.
*
DALI_ADAPTOR_API VisibilityChangedSignalType& VisibilityChangedSignal( 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.
mSelectionDataSendSignal(),
mSelectionDataReceivedSignal(),
mStyleChangedSignal(),
- mAccessibilitySignal()
+ mAccessibilitySignal(),
+ mTransitionEffectEventSignal()
{
}
return mAccessibilitySignal;
}
+WindowBase::TransitionEffectEventSignalType& WindowBase::TransitionEffectEventSignal()
+{
+ return mTransitionEffectEventSignal;
+}
+
} // namespace Adaptor
} // namespace Internal
#include <dali/public-api/adaptor-framework/window.h>
#include <dali/public-api/adaptor-framework/key-grab.h>
#include <dali/public-api/adaptor-framework/style-change.h>
+#include <dali/devel-api/adaptor-framework/window-devel.h>
#include <dali/internal/window-system/common/damage-observer.h>
#include <dali/internal/window-system/common/rotation-event.h>
#include <dali/internal/graphics/gles/egl-implementation.h>
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;
*/
AccessibilitySignalType& AccessibilitySignal();
+ /**
+ * @brief This signal is emitted when window's transition animation is started or ended.
+ */
+ TransitionEffectEventSignalType& TransitionEffectEventSignal();
+
protected:
// Undefined
SelectionSignalType mSelectionDataReceivedSignal;
StyleSignalType mStyleChangedSignal;
AccessibilitySignalType mAccessibilitySignal;
+ TransitionEffectEventSignalType mTransitionEffectEventSignal;
};
} // namespace Adaptor
mDeleteRequestSignal(),
mFocusChangeSignal(),
mResizeSignal(),
- mVisibilityChangedSignal()
+ mVisibilityChangedSignal(),
+ mTransitionEffectEventSignal()
{
}
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 );
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 );
typedef Dali::Window::FocusChangeSignalType FocusChangeSignalType;
typedef Dali::Window::ResizeSignalType ResizeSignalType;
typedef Dali::DevelWindow::VisibilityChangedSignalType VisibilityChangedSignalType;
+ typedef Dali::DevelWindow::TransitionEffectEventSignalType TransitionEffectEventSignalType;
typedef Signal< void () > SignalType;
/**
*/
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
/**
*/
Dali::DevelWindow::EventProcessingFinishedSignalType& EventProcessingFinishedSignal() { return mScene.EventProcessingFinishedSignal(); }
+ /**
+ * @copydoc Dali::DevelWindow::TransitionEffectEventSignal()
+ */
+ TransitionEffectEventSignalType& TransitionEffectEventSignal() { return mTransitionEffectEventSignal; }
+
private:
WindowRenderSurface* mWindowSurface; ///< The window rendering surface
FocusChangeSignalType mFocusChangeSignal;
ResizeSignalType mResizeSignal;
VisibilityChangedSignalType mVisibilityChangedSignal;
+ TransitionEffectEventSignalType mTransitionEffectEventSignal;
};
} // namespace Adaptor
}
/////////////////////////////////////////////////////////////////////////////////////////////////
+// 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<Ecore_Wl2_Event_Effect_Start*>( 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<DevelWindow::EffectType>( 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<Ecore_Wl2_Event_Effect_Start*>( 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<DevelWindow::EffectType>( effectEnd->type ) );
+ }
+ }
+ return ECORE_CALLBACK_PASS_ON;
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////////////
// Font Callbacks
/////////////////////////////////////////////////////////////////////////////////////////////////
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 );
#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 )
*/
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.