From: Wonsik Jung Date: Mon, 3 Apr 2023 09:59:52 +0000 (+0900) Subject: Fix the calculating logic for input region X-Git-Tag: dali_2.2.21~2^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2a3cd3da0c514177fe60d9048cff40fca49191e1;p=platform%2Fcore%2Fuifw%2Fdali-adaptor.git Fix the calculating logic for input region Fix the calculating logic for input region when window orientation is changed. Change-Id: I74afbe15745ac45706c31c7c39cf931d45747507 --- diff --git a/dali/internal/window-system/common/window-impl.cpp b/dali/internal/window-system/common/window-impl.cpp index a309df3..e7fdf0d 100644 --- a/dali/internal/window-system/common/window-impl.cpp +++ b/dali/internal/window-system/common/window-impl.cpp @@ -604,11 +604,8 @@ unsigned int Window::GetAuxiliaryHintId(const std::string& hint) const void Window::SetInputRegion(const Rect& inputRegion) { - Rect convertRegion = RecalculateRect(inputRegion); - - DALI_LOG_INFO(gWindowLogFilter, Debug::Verbose, "Window (%p), WinId (%d), SetInputRegion, RecalculateRegion, (%d,%d), (%d x %d)\n", this, mNativeWindowId, convertRegion.x, convertRegion.y, convertRegion.width, convertRegion.height); - - mWindowBase->SetInputRegion(convertRegion); + DALI_LOG_RELEASE_INFO("Window (%p), WinId (%d), SetInputRegion, (%d,%d), (%d x %d)\n", this, mNativeWindowId, inputRegion.x, inputRegion.y, inputRegion.width, inputRegion.height); + mWindowBase->SetInputRegion(inputRegion); } void Window::SetType(WindowType type) @@ -1284,58 +1281,16 @@ void Window::EnableFloatingMode(bool enable) mWindowBase->EnableFloatingMode(enable); } -Rect Window::RecalculateRect(const Rect& rect) -{ - Rect newRect; - int screenWidth, screenHeight; - - WindowSystem::GetScreenSize(screenWidth, screenHeight); - - if(mRotationAngle == 90) - { - newRect.x = rect.y; - newRect.y = screenHeight - (rect.x + rect.width); - newRect.width = rect.height; - newRect.height = rect.width; - } - else if(mRotationAngle == 180) - { - newRect.x = screenWidth - (rect.x + rect.width); - newRect.y = screenHeight - (rect.y + rect.height); - newRect.width = rect.width; - newRect.height = rect.height; - } - else if(mRotationAngle == 270) - { - newRect.x = screenWidth - (rect.y + rect.height); - newRect.y = rect.x; - newRect.width = rect.height; - newRect.height = rect.width; - } - else - { - newRect.x = rect.x; - newRect.y = rect.y; - newRect.width = rect.width; - newRect.height = rect.height; - } - return newRect; -} - void Window::IncludeInputRegion(const Rect& inputRegion) { - Rect convertRegion = RecalculateRect(inputRegion); - - DALI_LOG_RELEASE_INFO("Window (%p), WinId (%d), IncludeInputRegion, RecalculateRegion, (%d,%d), (%d x %d)\n", this, mNativeWindowId, convertRegion.x, convertRegion.y, convertRegion.width, convertRegion.height); - mWindowBase->IncludeInputRegion(convertRegion); + DALI_LOG_RELEASE_INFO("Window (%p), WinId (%d), IncludeInputRegion, (%d,%d), (%d x %d)\n", this, mNativeWindowId, inputRegion.x, inputRegion.y, inputRegion.width, inputRegion.height); + mWindowBase->IncludeInputRegion(inputRegion); } void Window::ExcludeInputRegion(const Rect& inputRegion) { - Rect convertRegion = RecalculateRect(inputRegion); - - DALI_LOG_RELEASE_INFO("Window (%p), WinId (%d), ExcludeInputRegion, RecalculateRegion, (%d,%d), (%d x %d)\n", this, mNativeWindowId, convertRegion.x, convertRegion.y, convertRegion.width, convertRegion.height); - mWindowBase->ExcludeInputRegion(convertRegion); + DALI_LOG_RELEASE_INFO("Window (%p), WinId (%d), ExcludeInputRegion, (%d,%d), (%d x %d)\n", this, mNativeWindowId, inputRegion.x, inputRegion.y, inputRegion.width, inputRegion.height); + mWindowBase->ExcludeInputRegion(inputRegion); } void Window::SetNeedsRotationCompletedAcknowledgement(bool needAcknowledgement) diff --git a/dali/internal/window-system/common/window-impl.h b/dali/internal/window-system/common/window-impl.h index d0d6866..bb49a8d 100644 --- a/dali/internal/window-system/common/window-impl.h +++ b/dali/internal/window-system/common/window-impl.h @@ -620,20 +620,6 @@ private: */ bool IsOrientationAvailable(WindowOrientation orientation) const; - /** - * @brief Return the rect value to recalulate with the default system coordinates. - * - * Some native window APIs work the geometry value based on the default system coordinates. - * IncludeInputRegion() and ExcludeInputRegion() are one of them. - * When the window is rotated, current window's geometry already were set with the rotated angle. - * If IncludeInputRegion() or ExcludeInputRegion() are called with rotated angle by application, - * the rect's area should be re-calcuated on the default system coordinates. - * - * @param[in] rect the window's current position and size with current window rotation angle. - * @return the re-calculated rect on the default system coordinates. - */ - Rect RecalculateRect(const Rect& rect); - private: // Dali::Internal::Adaptor::SceneHolder /** * @copydoc Dali::Internal::Adaptor::SceneHolder::OnAdaptorSet 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 f7993df..133e1c7 100644 --- 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 @@ -2064,15 +2064,53 @@ unsigned int WindowBaseEcoreWl2::GetAuxiliaryHintId(const std::string& hint) con return 0; } + +Rect WindowBaseEcoreWl2::RecalculateInputRect(const Rect& rect) +{ + Rect newRect; + + if(mWindowRotationAngle == 90) + { + newRect.x = rect.y; + newRect.y = mWindowPositionSize.height - (rect.x + rect.width); + newRect.width = rect.height; + newRect.height = rect.width; + } + else if(mWindowRotationAngle == 180) + { + newRect.x = mWindowPositionSize.width - (rect.x + rect.width); + newRect.y = mWindowPositionSize.height - (rect.y + rect.height); + newRect.width = rect.width; + newRect.height = rect.height; + } + else if(mWindowRotationAngle == 270) + { + newRect.x = mWindowPositionSize.width - (rect.y + rect.height); + newRect.y = rect.x; + newRect.width = rect.height; + newRect.height = rect.width; + } + else + { + newRect.x = rect.x; + newRect.y = rect.y; + newRect.width = rect.width; + newRect.height = rect.height; + } + return newRect; +} + void WindowBaseEcoreWl2::SetInputRegion(const Rect& inputRegion) { - DALI_LOG_RELEASE_INFO("%p, Set input rect (%d, %d, %d x %d)\n", mEcoreWindow, inputRegion.x, inputRegion.y, inputRegion.width, inputRegion.height); + Rect convertRegion = RecalculateInputRect(inputRegion); + Eina_Rectangle rect; - rect.x = inputRegion.x; - rect.y = inputRegion.y; - rect.w = inputRegion.width; - rect.h = inputRegion.height; + rect.x = convertRegion.x; + rect.y = convertRegion.y; + rect.w = convertRegion.width; + rect.h = convertRegion.height; + DALI_LOG_RELEASE_INFO("%p, Set input rect (%d, %d, %d x %d)\n", mEcoreWindow, rect.x, rect.y, rect.w, rect.h); ecore_wl2_window_input_rect_set(mEcoreWindow, &rect); ecore_wl2_window_commit(mEcoreWindow, EINA_TRUE); } @@ -2881,11 +2919,13 @@ bool WindowBaseEcoreWl2::IsFloatingModeEnabled() const void WindowBaseEcoreWl2::IncludeInputRegion(const Rect& inputRegion) { + Rect convertRegion = RecalculateInputRect(inputRegion); Eina_Rectangle rect; - rect.x = inputRegion.x; - rect.y = inputRegion.y; - rect.w = inputRegion.width; - rect.h = inputRegion.height; + + rect.x = convertRegion.x; + rect.y = convertRegion.y; + rect.w = convertRegion.width; + rect.h = convertRegion.height; DALI_LOG_RELEASE_INFO("%p, Add input_rect(%d, %d, %d x %d)\n", mEcoreWindow, rect.x, rect.y, rect.w, rect.h); ecore_wl2_window_input_rect_add(mEcoreWindow, &rect); @@ -2894,11 +2934,13 @@ void WindowBaseEcoreWl2::IncludeInputRegion(const Rect& inputRegion) void WindowBaseEcoreWl2::ExcludeInputRegion(const Rect& inputRegion) { + Rect convertRegion = RecalculateInputRect(inputRegion); Eina_Rectangle rect; - rect.x = inputRegion.x; - rect.y = inputRegion.y; - rect.w = inputRegion.width; - rect.h = inputRegion.height; + + rect.x = convertRegion.x; + rect.y = convertRegion.y; + rect.w = convertRegion.width; + rect.h = convertRegion.height; DALI_LOG_RELEASE_INFO("%p, Subtract input_rect(%d, %d, %d x %d)\n", mEcoreWindow, rect.x, rect.y, rect.w, rect.h); ecore_wl2_window_input_rect_subtract(mEcoreWindow, &rect); 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 00ca5bd..ee2ed72 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 @@ -577,6 +577,21 @@ private: */ PositionSize RecalculatePositionSizeToCurrentOrientation(PositionSize positionSize); + + /** + * @brief Return the rect value to recalulate with the default system coordinates. + * + * Some native window APIs work the geometry value based on the default system coordinates. + * IncludeInputRegion() and ExcludeInputRegion() are one of them. + * When the window is rotated, current window's geometry already were set with the rotated angle. + * If IncludeInputRegion() or ExcludeInputRegion() are called with rotated angle by application, + * the rect's area should be re-calcuated on the default system coordinates. + * + * @param[in] rect the window's current position and size with current window rotation angle. + * @return the re-calculated rect on the default system coordinates. + */ + Rect RecalculateInputRect(const Rect& rect); + protected: // Undefined WindowBaseEcoreWl2(const WindowBaseEcoreWl2&) = delete;