From f002cb565a15fbf7d31de49c2a226930aeceb380 Mon Sep 17 00:00:00 2001 From: Wonsik Jung Date: Fri, 22 Jul 2022 13:16:12 +0900 Subject: [PATCH] Add Window Moved event If window is moved by server, sever will notify that to the client. This event is for that. Change-Id: I30149ca315517ac8efed394f1fee4c1dfa1b2e62 --- dali/devel-api/adaptor-framework/window-devel.cpp | 5 ++++ dali/devel-api/adaptor-framework/window-devel.h | 17 ++++++++++++ dali/internal/window-system/common/window-impl.cpp | 31 +++++++++++++++++++--- dali/internal/window-system/common/window-impl.h | 10 +++++++ 4 files changed, 60 insertions(+), 3 deletions(-) diff --git a/dali/devel-api/adaptor-framework/window-devel.cpp b/dali/devel-api/adaptor-framework/window-devel.cpp index 43565ed..df1d3a5 100644 --- a/dali/devel-api/adaptor-framework/window-devel.cpp +++ b/dali/devel-api/adaptor-framework/window-devel.cpp @@ -111,6 +111,11 @@ AccessibilityHighlightSignalType& AccessibilityHighlightSignal(Window window) return GetImplementation(window).AccessibilityHighlightSignal(); } +MovedSignalType& MovedSignal(Window window) +{ + return GetImplementation(window).MovedSignal(); +} + 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 883cdaa..6a64084 100644 --- a/dali/devel-api/adaptor-framework/window-devel.h +++ b/dali/devel-api/adaptor-framework/window-devel.h @@ -46,6 +46,7 @@ typedef Signal typedef Signal AuxiliaryMessageSignalType; ///< Auxiliary message signal type typedef Signal AccessibilityHighlightSignalType; ///< Accessibility Highlight signal type typedef Signal InterceptKeyEventSignalType; ///< Intercept Key event signal type +typedef Signal MovedSignalType; ///< Window Moved signal type /** * @brief Creates an initialized handle to a new Window. @@ -532,6 +533,22 @@ DALI_ADAPTOR_API const TouchEvent& GetLastTouchEvent(Window window); */ DALI_ADAPTOR_API InterceptKeyEventSignalType& InterceptKeyEventSignal(Window window); +/** + * @brief This signal is emitted when the window is moved. + * + * A callback of the following type may be connected: + * @code + * void YourCallbackName( Window window, Uint16Pair position ); + * @endcode + * The parameters are the moved x and y coordinates. + * and window means this signal was called from what window + * + * @param[in] window The window instance. + * @return The signal to connect to + */ +DALI_ADAPTOR_API MovedSignalType& MovedSignal(Window window); + + } // namespace DevelWindow } // namespace Dali diff --git a/dali/internal/window-system/common/window-impl.cpp b/dali/internal/window-system/common/window-impl.cpp index f298a76..67bf27c 100644 --- a/dali/internal/window-system/common/window-impl.cpp +++ b/dali/internal/window-system/common/window-impl.cpp @@ -92,6 +92,7 @@ Window::Window() mTransitionEffectEventSignal(), mKeyboardRepeatSettingsChangedSignal(), mAuxiliaryMessageSignal(), + mMovedSignal(), mLastKeyEvent(), mLastTouchEvent(), mIsTransparent(false), @@ -721,11 +722,18 @@ PositionSize Window::GetPositionSize() const void Window::SetPositionSize(PositionSize positionSize) { PositionSize oldRect = mSurface->GetPositionSize(); + Dali::Window handle(this); mWindowSurface->MoveResize(positionSize); PositionSize newRect = mSurface->GetPositionSize(); + if((oldRect.x != newRect.x) || (oldRect.y != newRect.y)) + { + Dali::Window::WindowPosition position(newRect.x, newRect.y); + mMovedSignal.Emit(handle, position); + } + // When surface size is updated, inform adaptor of resizing and emit ResizeSignal if((oldRect.width != newRect.width) || (oldRect.height != newRect.height)) { @@ -739,7 +747,6 @@ void Window::SetPositionSize(PositionSize positionSize) mAdaptor->SurfaceResizePrepare(mSurface.get(), newSize); DALI_LOG_RELEASE_INFO("Window (%p), WinId (%d), current angle (%d), SetPositionSize():resize signal [%d x %d]\n", this, mNativeWindowId, mRotationAngle, newRect.width, newRect.height); - Dali::Window handle(this); mResizeSignal.Emit(handle, newSize); mAdaptor->SurfaceResizeComplete(mSurface.get(), newSize); } @@ -873,15 +880,34 @@ void Window::OnWindowRedrawRequest() void Window::OnUpdatePositionSize(Dali::PositionSize& positionSize) { + bool resized = false; + bool moved = false; + Dali::Window handle(this); PositionSize oldRect = mSurface->GetPositionSize(); mWindowSurface->UpdatePositionSize(positionSize); PositionSize newRect = positionSize; - // When surface size is updated, inform adaptor of resizing and emit ResizeSignal + if((oldRect.x != newRect.x) || (oldRect.y != newRect.y)) + { + moved = true; + } + if((oldRect.width != newRect.width) || (oldRect.height != newRect.height)) { + resized = true; + } + + if(moved) + { + Dali::Window::WindowPosition position(newRect.x, newRect.y); + mMovedSignal.Emit(handle, position); + } + + // When surface size is updated, inform adaptor of resizing and emit ResizeSignal + if(resized) + { Uint16Pair newSize(newRect.width, newRect.height); mWindowWidth = newRect.width; @@ -892,7 +918,6 @@ void Window::OnUpdatePositionSize(Dali::PositionSize& positionSize) mAdaptor->SurfaceResizePrepare(mSurface.get(), newSize); DALI_LOG_RELEASE_INFO("Window (%p), WinId (%d), Updated PositionSize by server :resize signal [%d x %d]\n", this, mNativeWindowId, newRect.width, newRect.height); - Dali::Window handle(this); mResizeSignal.Emit(handle, newSize); mAdaptor->SurfaceResizeComplete(mSurface.get(), newSize); } diff --git a/dali/internal/window-system/common/window-impl.h b/dali/internal/window-system/common/window-impl.h index fe61dfe..a639431 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::DevelWindow::KeyboardRepeatSettingsChangedSignalType KeyboardRepeatSettingsChangedSignalType; typedef Dali::DevelWindow::AuxiliaryMessageSignalType AuxiliaryMessageSignalType; typedef Dali::DevelWindow::AccessibilityHighlightSignalType AccessibilityHighlightSignalType; + typedef Dali::DevelWindow::MovedSignalType MovedSignalType; typedef Signal SignalType; /** @@ -728,6 +729,14 @@ public: // Signals return mAccessibilityHighlightSignal; } + /** + * @copydoc Dali::DevelWindow::MovedSignal() + */ + MovedSignalType& MovedSignal() + { + return mMovedSignal; + } + private: WindowRenderSurface* mWindowSurface; ///< The window rendering surface WindowBase* mWindowBase; @@ -756,6 +765,7 @@ private: KeyboardRepeatSettingsChangedSignalType mKeyboardRepeatSettingsChangedSignal; AuxiliaryMessageSignalType mAuxiliaryMessageSignal; AccessibilityHighlightSignalType mAccessibilityHighlightSignal; + MovedSignalType mMovedSignal; Dali::KeyEvent mLastKeyEvent; Dali::TouchEvent mLastTouchEvent; -- 2.7.4