From 2a78611579429fd810dbbada3b6dff2f222ea592 Mon Sep 17 00:00:00 2001 From: Wonsik Jung Date: Thu, 5 Aug 2021 08:10:13 +0900 Subject: [PATCH] [Tizen] Add input region APIs Add input region APIs about including and excluding. Change-Id: Ie79dac83f202450b58b73401f0fd146a2284cb87 --- .../src/dali-adaptor/utc-Dali-Window.cpp | 36 ++++++++++++++++++++++ dali/devel-api/adaptor-framework/window-devel.cpp | 10 ++++++ dali/devel-api/adaptor-framework/window-devel.h | 33 ++++++++++++++++++++ .../window-system/android/window-base-android.cpp | 8 +++++ .../window-system/android/window-base-android.h | 10 ++++++ dali/internal/window-system/common/window-base.h | 12 ++++++++ dali/internal/window-system/common/window-impl.cpp | 10 ++++++ dali/internal/window-system/common/window-impl.h | 10 ++++++ .../internal/window-system/macos/window-base-mac.h | 10 ++++++ .../window-system/macos/window-base-mac.mm | 8 +++++ .../ecore-wl/window-base-ecore-wl.cpp | 8 +++++ .../tizen-wayland/ecore-wl/window-base-ecore-wl.h | 10 ++++++ .../ecore-wl2/window-base-ecore-wl2.cpp | 24 +++++++++++++++ .../ecore-wl2/window-base-ecore-wl2.h | 10 ++++++ .../ubuntu-x11/window-base-ecore-x.cpp | 8 +++++ .../window-system/ubuntu-x11/window-base-ecore-x.h | 10 ++++++ .../window-system/windows/window-base-win.cpp | 8 +++++ .../window-system/windows/window-base-win.h | 10 ++++++ 18 files changed, 235 insertions(+) diff --git a/automated-tests/src/dali-adaptor/utc-Dali-Window.cpp b/automated-tests/src/dali-adaptor/utc-Dali-Window.cpp index e0580d0..cab5d0a 100644 --- a/automated-tests/src/dali-adaptor/utc-Dali-Window.cpp +++ b/automated-tests/src/dali-adaptor/utc-Dali-Window.cpp @@ -1350,3 +1350,39 @@ int UtcDaliWindowSetParentNegative(void) } END_TEST; } + +int UtcDaliWindowAddInputRegion(void) +{ + Dali::Window instance; + try + { + Rect includedInputRegion(0,0,720,640); + DevelWindow::IncludeInputRegion(instance, includedInputRegion); + DALI_TEST_CHECK(false); // Should not get here + } + catch(...) + { + DALI_TEST_CHECK(true); // We expect an assert + } + END_TEST; +} + +int UtcDaliWindowSubtractInputRegion(void) +{ + Dali::Window instance; + try + { + Rect includedInputRegion(0,0,720,1280); + DevelWindow::IncludeInputRegion(instance, includedInputRegion); + + Rect excludedInputRegion(0,641,720,640); + DevelWindow::ExcludeInputRegion(instance, excludedInputRegion); + + DALI_TEST_CHECK(false); // Should not get here + } + catch(...) + { + DALI_TEST_CHECK(true); // We expect an assert + } + END_TEST; +} diff --git a/dali/devel-api/adaptor-framework/window-devel.cpp b/dali/devel-api/adaptor-framework/window-devel.cpp index 886d56b..908a8ae 100644 --- a/dali/devel-api/adaptor-framework/window-devel.cpp +++ b/dali/devel-api/adaptor-framework/window-devel.cpp @@ -171,6 +171,16 @@ void EnableFloatingMode(Window window, bool enable) GetImplementation(window).EnableFloatingMode(enable); } +void IncludeInputRegion(Window window, const Rect& inputRegion) +{ + GetImplementation(window).IncludeInputRegion(inputRegion); +} + +void ExcludeInputRegion(Window window, const Rect& inputRegion) +{ + GetImplementation(window).ExcludeInputRegion(inputRegion); +} + } // namespace DevelWindow } // namespace Dali diff --git a/dali/devel-api/adaptor-framework/window-devel.h b/dali/devel-api/adaptor-framework/window-devel.h index 20adb92..108b4f4 100644 --- a/dali/devel-api/adaptor-framework/window-devel.h +++ b/dali/devel-api/adaptor-framework/window-devel.h @@ -308,6 +308,39 @@ DALI_ADAPTOR_API void RequestResizeToServer(Window window, WindowResizeDirection */ DALI_ADAPTOR_API void EnableFloatingMode(Window window, bool enable); +/** + * @brief Includes input region. + * + * This function inlcudes input regions. + * It can be used multiple times and supports multiple regions. + * It means input region will be extended. + * + * This input is related to mouse and touch event. + * If device has touch screen, this function is useful. + * Otherwise device does not have that, we can use it after connecting mouse to the device. + * + * @param[in] window The window instance. + * @param[in] inputRegion The added region to accept input events. + */ +DALI_ADAPTOR_API void IncludeInputRegion(Window window, const Rect& inputRegion); + +/** + * @brief Excludes input region. + * + * This function excludes input regions. + * It can be used multiple times and supports multiple regions. + * It means input region will be reduced. + * Nofice, should be set input area by IncludeInputRegion() before this function is used. + * + * This input is related to mouse and touch event. + * If device has touch screen, this function is useful. + * Otherwise device does not have that, we can use it after connecting mouse to the device. + * + * @param[in] window The window instance. + * @param[in] inputRegion The subtracted region to except input events. + */ +DALI_ADAPTOR_API void ExcludeInputRegion(Window window, const Rect& inputRegion); + } // namespace DevelWindow } // namespace Dali diff --git a/dali/internal/window-system/android/window-base-android.cpp b/dali/internal/window-system/android/window-base-android.cpp index 98d8b20..99e1dee 100644 --- a/dali/internal/window-system/android/window-base-android.cpp +++ b/dali/internal/window-system/android/window-base-android.cpp @@ -389,6 +389,14 @@ bool WindowBaseAndroid::IsFloatingModeEnabled() const return false; } +void WindowBaseAndroid::IncludeInputRegion(const Rect& inputRegion) +{ +} + +void WindowBaseAndroid::ExcludeInputRegion(const Rect& inputRegion) +{ +} + } // namespace Adaptor } // namespace Internal diff --git a/dali/internal/window-system/android/window-base-android.h b/dali/internal/window-system/android/window-base-android.h index c3c52b3..8ba0a14 100644 --- a/dali/internal/window-system/android/window-base-android.h +++ b/dali/internal/window-system/android/window-base-android.h @@ -404,6 +404,16 @@ public: */ bool IsFloatingModeEnabled() const override; + /** + * @copydoc Dali::Internal::Adaptor::WindowBase::IncludeInputRegion() + */ + void IncludeInputRegion(const Rect& inputRegion) override; + + /** + * @copydoc Dali::Internal::Adaptor::WindowBase::ExcludeInputRegion() + */ + void ExcludeInputRegion(const Rect& inputRegion) override; + private: /** * Second stage initialization diff --git a/dali/internal/window-system/common/window-base.h b/dali/internal/window-system/common/window-base.h index 389e7c5..7983f45 100644 --- a/dali/internal/window-system/common/window-base.h +++ b/dali/internal/window-system/common/window-base.h @@ -406,6 +406,18 @@ public: */ virtual void ImeWindowReadyToRender() = 0; + /** + * @brief Includes input region. + * @param[in] inputRegion The added region to accept input events. + */ + virtual void IncludeInputRegion(const Rect& inputRegion) = 0; + + /** + * @brief Excludes input region. + * @param[in] inputRegion The subtracted region to except input events. + */ + virtual void ExcludeInputRegion(const Rect& inputRegion) = 0; + // Signals /** diff --git a/dali/internal/window-system/common/window-impl.cpp b/dali/internal/window-system/common/window-impl.cpp index 79228af..1bc3188 100644 --- a/dali/internal/window-system/common/window-impl.cpp +++ b/dali/internal/window-system/common/window-impl.cpp @@ -995,6 +995,16 @@ void Window::EnableFloatingMode(bool enable) mWindowBase->EnableFloatingMode(enable); } +void Window::IncludeInputRegion(const Rect& inputRegion) +{ + mWindowBase->IncludeInputRegion(inputRegion); +} + +void Window::ExcludeInputRegion(const Rect& inputRegion) +{ + mWindowBase->ExcludeInputRegion(inputRegion); +} + } // namespace Adaptor } // namespace Internal diff --git a/dali/internal/window-system/common/window-impl.h b/dali/internal/window-system/common/window-impl.h index b7c1d61..761bb0e 100644 --- a/dali/internal/window-system/common/window-impl.h +++ b/dali/internal/window-system/common/window-impl.h @@ -391,6 +391,16 @@ public: // Dali::Internal::Adaptor::SceneHolder */ void EnableFloatingMode(bool enable); + /** + * @copydoc Dali::DevelWindow::IncludeInputRegion() + */ + void IncludeInputRegion(const Rect& inputRegion); + + /** + * @copydoc Dali::DevelWindow::ExcludeInputRegion() + */ + void ExcludeInputRegion(const Rect& inputRegion); + private: /** * @brief Enumeration for orietation mode. diff --git a/dali/internal/window-system/macos/window-base-mac.h b/dali/internal/window-system/macos/window-base-mac.h index 41bc806..b967686 100644 --- a/dali/internal/window-system/macos/window-base-mac.h +++ b/dali/internal/window-system/macos/window-base-mac.h @@ -337,6 +337,16 @@ public: */ bool IsFloatingModeEnabled() const override; + /** + * @copydoc Dali::Internal::Adaptor::WindowBase::IncludeInputRegion() + */ + void IncludeInputRegion(const Rect& inputRegion) override; + + /** + * @copydoc Dali::Internal::Adaptor::WindowBase::ExcludeInputRegion() + */ + void ExcludeInputRegion(const Rect& inputRegion) override; + private: // Undefined WindowBaseCocoa(const WindowBaseCocoa&) = delete; diff --git a/dali/internal/window-system/macos/window-base-mac.mm b/dali/internal/window-system/macos/window-base-mac.mm index e4c06ac..594a186 100644 --- a/dali/internal/window-system/macos/window-base-mac.mm +++ b/dali/internal/window-system/macos/window-base-mac.mm @@ -680,6 +680,14 @@ bool WindowBaseCocoa::IsFloatingModeEnabled() const return false; } +void WindowBaseCocoa::IncludeInputRegion(const Rect& inputRegion) +{ +} + +void WindowBaseCocoa::ExcludeInputRegion(const Rect& inputRegion) +{ +} + } // namespace Dali::Internal::Adaptor @implementation CocoaView diff --git a/dali/internal/window-system/tizen-wayland/ecore-wl/window-base-ecore-wl.cpp b/dali/internal/window-system/tizen-wayland/ecore-wl/window-base-ecore-wl.cpp index 37f992c..55c6a7e 100644 --- a/dali/internal/window-system/tizen-wayland/ecore-wl/window-base-ecore-wl.cpp +++ b/dali/internal/window-system/tizen-wayland/ecore-wl/window-base-ecore-wl.cpp @@ -2209,6 +2209,14 @@ bool WindowBaseEcoreWl::IsFloatingModeEnabled() const return false; } +void WindowBaseEcoreWl::IncludeInputRegion(const Rect& inputRegion) +{ +} + +void WindowBaseEcoreWl::ExcludeInputRegion(const Rect& inputRegion) +{ +} + } // namespace Adaptor } // namespace Internal diff --git a/dali/internal/window-system/tizen-wayland/ecore-wl/window-base-ecore-wl.h b/dali/internal/window-system/tizen-wayland/ecore-wl/window-base-ecore-wl.h index 003fdfa..8cca415 100644 --- a/dali/internal/window-system/tizen-wayland/ecore-wl/window-base-ecore-wl.h +++ b/dali/internal/window-system/tizen-wayland/ecore-wl/window-base-ecore-wl.h @@ -470,6 +470,16 @@ public: */ bool IsFloatingModeEnabled() const override; + /** + * @copydoc Dali::Internal::Adaptor::WindowBase::IncludeInputRegion() + */ + void IncludeInputRegion(const Rect& inputRegion) override; + + /** + * @copydoc Dali::Internal::Adaptor::WindowBase::ExcludeInputRegion() + */ + void ExcludeInputRegion(const Rect& inputRegion) override; + private: /** * Second stage initialization 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 d467bb3..403337a 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 @@ -2720,6 +2720,30 @@ bool WindowBaseEcoreWl2::IsFloatingModeEnabled() const return ecore_wl2_window_floating_mode_get(mEcoreWindow); } +void WindowBaseEcoreWl2::IncludeInputRegion(const Rect& inputRegion) +{ + Eina_Rectangle rect; + rect.x = inputRegion.x; + rect.y = inputRegion.y; + rect.w = inputRegion.width; + rect.h = inputRegion.height; + + ecore_wl2_window_input_rect_add(mEcoreWindow, &rect); + ecore_wl2_window_commit(mEcoreWindow, EINA_TRUE); +} + +void WindowBaseEcoreWl2::ExcludeInputRegion(const Rect& inputRegion) +{ + Eina_Rectangle rect; + rect.x = inputRegion.x; + rect.y = inputRegion.y; + rect.w = inputRegion.width; + rect.h = inputRegion.height; + + ecore_wl2_window_input_rect_subtract(mEcoreWindow, &rect); + ecore_wl2_window_commit(mEcoreWindow, EINA_TRUE); +} + } // namespace Adaptor } // namespace Internal 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 9c71f52..d05c99a 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 @@ -502,6 +502,16 @@ public: */ bool IsFloatingModeEnabled() const override; + /** + * @copydoc Dali::Internal::Adaptor::WindowBase::IncludeInputRegion() + */ + void IncludeInputRegion(const Rect& inputRegion) override; + + /** + * @copydoc Dali::Internal::Adaptor::WindowBase::ExcludeInputRegion() + */ + void ExcludeInputRegion(const Rect& inputRegion) override; + private: /** * Second stage initialization diff --git a/dali/internal/window-system/ubuntu-x11/window-base-ecore-x.cpp b/dali/internal/window-system/ubuntu-x11/window-base-ecore-x.cpp index fa125d8..67cb784 100644 --- a/dali/internal/window-system/ubuntu-x11/window-base-ecore-x.cpp +++ b/dali/internal/window-system/ubuntu-x11/window-base-ecore-x.cpp @@ -955,6 +955,14 @@ bool WindowBaseEcoreX::IsFloatingModeEnabled() const return false; } +void WindowBaseEcoreX::IncludeInputRegion(const Rect& inputRegion) +{ +} + +void WindowBaseEcoreX::ExcludeInputRegion(const Rect& inputRegion) +{ +} + } // namespace Adaptor } // namespace Internal diff --git a/dali/internal/window-system/ubuntu-x11/window-base-ecore-x.h b/dali/internal/window-system/ubuntu-x11/window-base-ecore-x.h index 03ffbcc..2a34f8f 100644 --- a/dali/internal/window-system/ubuntu-x11/window-base-ecore-x.h +++ b/dali/internal/window-system/ubuntu-x11/window-base-ecore-x.h @@ -404,6 +404,16 @@ public: */ bool IsFloatingModeEnabled() const override; + /** + * @copydoc Dali::Internal::Adaptor::WindowBase::IncludeInputRegion() + */ + void IncludeInputRegion(const Rect& inputRegion) override; + + /** + * @copydoc Dali::Internal::Adaptor::WindowBase::ExcludeInputRegion() + */ + void ExcludeInputRegion(const Rect& inputRegion) override; + private: /** * Second stage initialization diff --git a/dali/internal/window-system/windows/window-base-win.cpp b/dali/internal/window-system/windows/window-base-win.cpp index 748f707..cb903ef 100644 --- a/dali/internal/window-system/windows/window-base-win.cpp +++ b/dali/internal/window-system/windows/window-base-win.cpp @@ -611,6 +611,14 @@ bool WindowBaseWin::IsFloatingModeEnabled() const return false; } +void WindowBaseWin::IncludeInputRegion(const Rect& inputRegion) +{ +} + +void WindowBaseWin::ExcludeInputRegion(const Rect& inputRegion) +{ +} + } // namespace Adaptor } // namespace Internal diff --git a/dali/internal/window-system/windows/window-base-win.h b/dali/internal/window-system/windows/window-base-win.h index 854e66c..6e0f7db 100644 --- a/dali/internal/window-system/windows/window-base-win.h +++ b/dali/internal/window-system/windows/window-base-win.h @@ -391,6 +391,16 @@ public: */ bool IsFloatingModeEnabled() const override; + /** + * @copydoc Dali::Internal::Adaptor::WindowBase::IncludeInputRegion() + */ + void IncludeInputRegion(const Rect& inputRegion) override; + + /** + * @copydoc Dali::Internal::Adaptor::WindowBase::ExcludeInputRegion() + */ + void ExcludeInputRegion(const Rect& inputRegion) override; + private: /** * Second stage initialization -- 2.7.4