From bd0526397602e2273a458b4f59a11508fc8b497a Mon Sep 17 00:00:00 2001 From: "joogab.yun" Date: Wed, 31 May 2023 14:21:47 +0900 Subject: [PATCH] Add ecore api about RelativeMove 1. ecore_wl2_window_pointer_constraints_lock_pointer 2. ecore_wl2_window_pointer_constraints_unlock_pointer 3. ecore_wl2_window_locked_pointer_region_set 4. ecore_wl2_window_locked_pointer_cursor_position_hint_set 5. ECORE_EVENT_MOUSE_RELATIVE_MOVE Change-Id: I612c7f358e0aeb093d5ec6b92771a150094a42d6 --- .../src/dali-adaptor/utc-Dali-Window.cpp | 15 ++++ .../adaptor-framework/mouse-relative-event.h | 79 ++++++++++++++++++++ dali/devel-api/adaptor-framework/window-devel.cpp | 30 ++++++++ dali/devel-api/adaptor-framework/window-devel.h | 61 ++++++++++++++++ dali/devel-api/file.list | 1 + .../window-system/android/window-base-android.cpp | 25 ++++++- .../window-system/android/window-base-android.h | 29 +++++++- dali/internal/window-system/common/window-base.cpp | 6 ++ dali/internal/window-system/common/window-base.h | 46 ++++++++++++ dali/internal/window-system/common/window-impl.cpp | 34 +++++++++ dali/internal/window-system/common/window-impl.h | 51 +++++++++++-- .../internal/window-system/macos/window-base-mac.h | 29 +++++++- .../window-system/macos/window-base-mac.mm | 26 ++++++- .../tizen-wayland/ecore-wl/window-base-ecore-wl.h | 29 +++++++- .../ecore-wl2/window-base-ecore-wl2.cpp | 85 ++++++++++++++++++---- .../ecore-wl2/window-base-ecore-wl2.h | 30 ++++++++ .../ubuntu-x11/window-base-ecore-x.cpp | 23 ++++++ .../window-system/ubuntu-x11/window-base-ecore-x.h | 25 +++++++ .../window-system/windows/window-base-win.cpp | 25 ++++++- .../window-system/windows/window-base-win.h | 27 ++++++- dali/internal/window-system/x11/window-base-x.cpp | 23 ++++++ dali/internal/window-system/x11/window-base-x.h | 27 ++++++- 22 files changed, 696 insertions(+), 30 deletions(-) create mode 100644 dali/devel-api/adaptor-framework/mouse-relative-event.h diff --git a/automated-tests/src/dali-adaptor/utc-Dali-Window.cpp b/automated-tests/src/dali-adaptor/utc-Dali-Window.cpp index f224d97..cd0c8e5 100644 --- a/automated-tests/src/dali-adaptor/utc-Dali-Window.cpp +++ b/automated-tests/src/dali-adaptor/utc-Dali-Window.cpp @@ -1608,6 +1608,21 @@ int UtcDaliWindowMouseInOutSignalNegative(void) END_TEST; } +int UtcDaliWindowMouseRelativeSignalNegative(void) +{ + Dali::Window instance; + try + { + DevelWindow::MouseRelativeEventSignal(instance); + DALI_TEST_CHECK(false); // Should not get here + } + catch(...) + { + DALI_TEST_CHECK(true); // We expect an assert + } + END_TEST; +} + int UtcDaliWindowMoveCompletedSignalNegative(void) { Dali::Window instance; diff --git a/dali/devel-api/adaptor-framework/mouse-relative-event.h b/dali/devel-api/adaptor-framework/mouse-relative-event.h new file mode 100644 index 0000000..c368c5e --- /dev/null +++ b/dali/devel-api/adaptor-framework/mouse-relative-event.h @@ -0,0 +1,79 @@ +#ifndef DALI_WINDOW_DEVEL_MOUSE_RELATIVE_EVENT_H +#define DALI_WINDOW_DEVEL_MOUSE_RELATIVE_EVENT_H + +/* + * Copyright (c) 2023 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// EXTERNAL INCLUDES +#include +#include + +// INTERNAL INCLUDES +#include + +namespace Dali +{ +namespace DevelWindow +{ +/** + * @brief MouseRelativeEvent occurs when relative mouse movement occurs in the window. + * + * A signal is emitted when relative mouse movement occurs in the window. + */ +struct DALI_ADAPTOR_API MouseRelativeEvent +{ + enum class Type + { + NONE = 0, + RELATIVE_MOVE + }; + + /** + * @brief Constructor which creates a MouseRelativeEvent instance + * @param[in] type The type of the event. + * @param[in] modifiers The modifier keys pressed during the event (such as shift, alt and control). + * @param[in] timeStamp The time when the event being started. + * @param[in] diffPosition The co-ordinates of the cursor relative to the top-left of the screen + * @param[in] unaccelatedPosition The co-ordinates of the cursor relative to the top-left of the screen + * @param[in] deviceClass The device class the event originated from. + * @param[in] deviceSubclass The device subclass the event originated from. + */ + MouseRelativeEvent(Type type, uint32_t modifiers, uint32_t timeStamp, Vector2 diffPosition, Vector2 unaccelatedPosition, const Device::Class::Type deviceClass, const Device::Subclass::Type deviceSubclass) + : type(type), + modifiers(modifiers), + timeStamp(timeStamp), + diffPosition(diffPosition), + unaccelatedPosition(unaccelatedPosition), + deviceClass(deviceClass), + deviceSubclass(deviceSubclass) + { + } + + Type type; + uint32_t modifiers; + uint32_t timeStamp; + Vector2 diffPosition; + Vector2 unaccelatedPosition; + const Device::Class::Type deviceClass; + const Device::Subclass::Type deviceSubclass; +}; + +} // namespace DevelWindow + +} // namespace Dali + +#endif // DALI_WINDOW_DEVEL_MOUSE_RELATIVE_EVENT_H diff --git a/dali/devel-api/adaptor-framework/window-devel.cpp b/dali/devel-api/adaptor-framework/window-devel.cpp index 3fab555..ef0847e 100644 --- a/dali/devel-api/adaptor-framework/window-devel.cpp +++ b/dali/devel-api/adaptor-framework/window-devel.cpp @@ -299,6 +299,31 @@ const TouchEvent& GetLastTouchEvent(Window window) return GetImplementation(window).GetLastTouchEvent(); } +bool PointerConstraintsLock(Window window) +{ + return GetImplementation(window).PointerConstraintsLock(); +} + +bool PointerConstraintsUnlock(Window window) +{ + return GetImplementation(window).PointerConstraintsUnlock(); +} + +void LockedPointerRegionSet(Window window, int32_t x, int32_t y, int32_t width, int32_t height) +{ + GetImplementation(window).LockedPointerRegionSet(x, y, width, height); +} + +void LockedPointerCursorPositionHintSet(Window window, int32_t x, int32_t y) +{ + GetImplementation(window).LockedPointerCursorPositionHintSet(x, y); +} + +bool PointerWarp(Window window, int32_t x, int32_t y) +{ + return GetImplementation(window).PointerWarp(x, y); +} + InterceptKeyEventSignalType& InterceptKeyEventSignal(Window window) { return GetImplementation(window).InterceptKeyEventSignal(); @@ -314,6 +339,11 @@ InsetsChangedSignalType& InsetsChangedSignal(Window window) return GetImplementation(window).InsetsChangedSignal(); } +MouseRelativeEventSignalType& MouseRelativeEventSignal(Window window) +{ + return GetImplementation(window).MouseRelativeEventSignal(); +} + } // 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 287005a..979fcc7 100644 --- a/dali/devel-api/adaptor-framework/window-devel.h +++ b/dali/devel-api/adaptor-framework/window-devel.h @@ -23,6 +23,7 @@ // INTERNAL INCLUDES #include +#include #include #include #include @@ -50,6 +51,7 @@ typedef Signal typedef Signal MovedSignalType; ///< Window Moved signal type typedef Signal OrientationChangedSignalType; ///< Window orientation changed signal type typedef Signal MouseInOutEventSignalType; ///< MouseInOutEvent signal type +typedef Signal MouseRelativeEventSignalType; ///< MouseRelativeEvent signal type typedef Signal MoveCompletedSignalType; ///< Window Moved by Server signal type typedef Signal ResizeCompletedSignalType; ///< Window Resized by Server signal type typedef Signal InsetsChangedSignalType; ///< InsetsChanged signal type @@ -536,6 +538,52 @@ DALI_ADAPTOR_API const KeyEvent& GetLastKeyEvent(Window window); DALI_ADAPTOR_API const TouchEvent& GetLastTouchEvent(Window window); /** + * @brief Sets the pointer constraints lock. + * + * @param[in] window The window instance. + * @return Returns true if PointerConstraintsLock succeeds. + */ +DALI_ADAPTOR_API bool PointerConstraintsLock(Window window); + +/** + * @brief Sets the pointer constraints unlock. + * + * @param[in] window The window instance. + * @return Returns true if PointerConstraintsUnlock succeeds. + */ +DALI_ADAPTOR_API bool PointerConstraintsUnlock(Window window); + +/** + * @brief Sets the locked pointer region + * + * @param[in] window The window instance. + * @param[in] x The x position. + * @param[in] y The y position. + * @param[in] width The width. + * @param[in] height The height + */ +DALI_ADAPTOR_API void LockedPointerRegionSet(Window window, int32_t x, int32_t y, int32_t width, int32_t height); + +/** + * @brief Sets the locked pointer cursor position hintset + * + * @param[in] window The window instance. + * @param[in] x The x position. + * @param[in] y The y position. + */ +DALI_ADAPTOR_API void LockedPointerCursorPositionHintSet(Window window, int32_t x, int32_t y); + +/** + * @brief Sets the pointer warp. The pointer moves to the set coordinates. + * + * @param[in] window The window instance. + * @param[in] x The x position. + * @param[in] y The y position. + * @return Returns true if PointerWarp succeeds. + */ +DALI_ADAPTOR_API bool PointerWarp(Window window, int32_t x, int32_t y); + +/** * @brief The user would connect to this signal to intercept a KeyEvent at window. * * Intercepts KeyEvents in the window before dispatching KeyEvents to the control. @@ -593,6 +641,19 @@ DALI_ADAPTOR_API OrientationChangedSignalType& OrientationChangedSignal(Window w DALI_ADAPTOR_API MouseInOutEventSignalType& MouseInOutEventSignal(Window window); /** + * @brief This signal is emitted when the mouse relative event is received. + * + * A callback of the following type may be connected: + * @code + * void YourCallbackName( Window window, Dali::MouseRelativeEvent event ); + * @endcode + * + * @param[in] window The window instance. + * @return The signal to connect to + */ +DALI_ADAPTOR_API MouseRelativeEventSignalType& MouseRelativeEventSignal(Window window); + +/** * @brief This signal is emitted when window has been moved by the display server. * To make the window move by display server, RequestMoveToServer() should be called. * After the moving job is completed, this function will be called. diff --git a/dali/devel-api/file.list b/dali/devel-api/file.list index ed878ce..a6829f1 100755 --- a/dali/devel-api/file.list +++ b/dali/devel-api/file.list @@ -86,6 +86,7 @@ SET( devel_api_adaptor_framework_header_files ${adaptor_devel_api_dir}/adaptor-framework/keyboard.h ${adaptor_devel_api_dir}/adaptor-framework/lifecycle-controller.h ${adaptor_devel_api_dir}/adaptor-framework/mouse-in-out-event.h + ${adaptor_devel_api_dir}/adaptor-framework/mouse-relative-event.h ${adaptor_devel_api_dir}/adaptor-framework/native-image-source-devel.h ${adaptor_devel_api_dir}/adaptor-framework/native-image-source-queue.h ${adaptor_devel_api_dir}/adaptor-framework/orientation.h diff --git a/dali/internal/window-system/android/window-base-android.cpp b/dali/internal/window-system/android/window-base-android.cpp index 8a83136..6c975b2 100644 --- a/dali/internal/window-system/android/window-base-android.cpp +++ b/dali/internal/window-system/android/window-base-android.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Samsung Electronics Co., Ltd. + * Copyright (c) 2023 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -432,6 +432,29 @@ void WindowBaseAndroid::ExcludeInputRegion(const Rect& inputRegion) { } +bool WindowBaseAndroid::PointerConstraintsLock() +{ + return false; +} + +bool WindowBaseAndroid::PointerConstraintsUnlock() +{ + return false; +} + +void WindowBaseAndroid::LockedPointerRegionSet(int32_t x, int32_t y, int32_t width, int32_t height) +{ +} + +void WindowBaseAndroid::LockedPointerCursorPositionHintSet(int32_t x, int32_t y) +{ +} + +bool WindowBaseAndroid::PointerWarp(int32_t x, int32_t y) +{ + return false; +} + } // 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 1f6463d..2978d18 100644 --- a/dali/internal/window-system/android/window-base-android.h +++ b/dali/internal/window-system/android/window-base-android.h @@ -2,7 +2,7 @@ #define DALI_INTERNAL_WINDOWSYSTEM_ANDROID_WINDOW_BASE_ANDROID_H /* - * Copyright (c) 2022 Samsung Electronics Co., Ltd. + * Copyright (c) 2023 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -178,7 +178,7 @@ public: */ void MoveResize(PositionSize positionSize) override; - /** + /** * @copydoc Dali::Internal::Adaptor::WindowBase::SetLayout() */ void SetLayout(unsigned int numCols, unsigned int numRows, unsigned int column, unsigned int row, unsigned int colSpan, unsigned int rowSpan) override; @@ -454,6 +454,31 @@ public: */ void ExcludeInputRegion(const Rect& inputRegion) override; + /** + * @copydoc Dali::Internal::Adaptor::WindowBase::PointerConstraintsLock() + */ + bool PointerConstraintsLock() override; + + /** + * @copydoc Dali::Internal::Adaptor::WindowBase::PointerConstraintsUnlock() + */ + bool PointerConstraintsUnlock() override; + + /** + * @copydoc Dali::Internal::Adaptor::WindowBase::LockedPointerRegionSet() + */ + void LockedPointerRegionSet(int32_t x, int32_t y, int32_t width, int32_t height) override; + + /** + * @copydoc Dali::Internal::Adaptor::WindowBase::LockedPointerCursorPositionHintSet() + */ + void LockedPointerCursorPositionHintSet(int32_t x, int32_t y) override; + + /** + * @copydoc Dali::Internal::Adaptor::WindowBase::PointerWarp() + */ + bool PointerWarp(int32_t x, int32_t y) override; + private: /** * Second stage initialization diff --git a/dali/internal/window-system/common/window-base.cpp b/dali/internal/window-system/common/window-base.cpp index 19417d2..b74d7a5 100644 --- a/dali/internal/window-system/common/window-base.cpp +++ b/dali/internal/window-system/common/window-base.cpp @@ -43,6 +43,7 @@ WindowBase::WindowBase() mUpdatePositionSizeSignal(), mAuxiliaryMessageSignal(), mMouseInOutEventSignal(), + mMouseRelativeEventSignal(), mMoveCompletedSignal(), mResizeCompletedSignal(), mInsetsChangedSignal() @@ -148,6 +149,11 @@ WindowBase::MouseInOutEventSignalType& WindowBase::MouseInOutEventSignal() return mMouseInOutEventSignal; } +WindowBase::MouseRelativeEventSignalType& WindowBase::MouseRelativeEventSignal() +{ + return mMouseRelativeEventSignal; +} + WindowBase::MoveCompletedSignalType& WindowBase::MoveCompletedSignal() { return mMoveCompletedSignal; diff --git a/dali/internal/window-system/common/window-base.h b/dali/internal/window-system/common/window-base.h index d014379..e058c6d 100644 --- a/dali/internal/window-system/common/window-base.h +++ b/dali/internal/window-system/common/window-base.h @@ -77,6 +77,7 @@ public: typedef Signal UpdatePositionSizeType; typedef Signal AuxiliaryMessageSignalType; typedef Signal MouseInOutEventSignalType; + typedef Signal MouseRelativeEventSignalType; typedef Signal MoveCompletedSignalType; typedef Signal ResizeCompletedSignalType; typedef Signal InsetsChangedSignalType; @@ -466,6 +467,45 @@ public: */ virtual void ExcludeInputRegion(const Rect& inputRegion) = 0; + /** + * @brief Sets the pointer constraints lock. + * @return Returns true if PointerConstraintsLock succeeds. + */ + virtual bool PointerConstraintsLock() = 0; + + /** + * @brief Sets the pointer constraints unlock. + * @return Returns true if PointerConstraintsUnlock succeeds. + */ + virtual bool PointerConstraintsUnlock() = 0; + + /** + * @brief Sets the locked pointer region + * + * @param[in] x The x position. + * @param[in] y The y position. + * @param[in] width The width. + * @param[in] height The height + */ + virtual void LockedPointerRegionSet(int32_t x, int32_t y, int32_t width, int32_t height) = 0; + + /** + * @brief Sets the locked pointer cursor position hintset + * + * @param[in] x The x position. + * @param[in] y The y position. + */ + virtual void LockedPointerCursorPositionHintSet(int32_t x, int32_t y) = 0; + + /** + * @brief Sets the pointer warp. The pointer moves to the set coordinates. + * + * @param[in] x The x position. + * @param[in] y The y position. + * @return Returns true if PointerWarp succeeds. + */ + virtual bool PointerWarp(int32_t x, int32_t y) = 0; + // Signals /** @@ -565,6 +605,11 @@ public: MouseInOutEventSignalType& MouseInOutEventSignal(); /** + * @brief This signal is emitted when a mouse relative event is recevied. + */ + MouseRelativeEventSignalType& MouseRelativeEventSignal(); + + /** * @brief This signal is emitted when window has been moved by then display server. * To be moved the window by display server, RequestMoveToServer() should be called. * After the moving job is finished, this function will be called. @@ -610,6 +655,7 @@ protected: UpdatePositionSizeType mUpdatePositionSizeSignal; AuxiliaryMessageSignalType mAuxiliaryMessageSignal; MouseInOutEventSignalType mMouseInOutEventSignal; + MouseRelativeEventSignalType mMouseRelativeEventSignal; MoveCompletedSignalType mMoveCompletedSignal; ResizeCompletedSignalType mResizeCompletedSignal; InsetsChangedSignalType mInsetsChangedSignal; diff --git a/dali/internal/window-system/common/window-impl.cpp b/dali/internal/window-system/common/window-impl.cpp index 3048d9e..ae3a117 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() mMovedSignal(), mOrientationChangedSignal(), mMouseInOutEventSignal(), + mMouseRelativeEventSignal(), mMoveCompletedSignal(), mResizeCompletedSignal(), mInsetsChangedSignal(), @@ -163,6 +164,7 @@ void Window::Initialize(Any surface, const PositionSize& positionSize, const std mWindowBase->UpdatePositionSizeSignal().Connect(this, &Window::OnUpdatePositionSize); mWindowBase->AuxiliaryMessageSignal().Connect(this, &Window::OnAuxiliaryMessage); mWindowBase->MouseInOutEventSignal().Connect(this, &Window::OnMouseInOutEvent); + mWindowBase->MouseRelativeEventSignal().Connect(this, &Window::OnMouseRelativeEvent); mWindowBase->MoveCompletedSignal().Connect(this, &Window::OnMoveCompleted); mWindowBase->ResizeCompletedSignal().Connect(this, &Window::OnResizeCompleted); @@ -1079,6 +1081,13 @@ void Window::OnMouseInOutEvent(const Dali::DevelWindow::MouseInOutEvent& mouseIn mMouseInOutEventSignal.Emit(handle, mouseInOutEvent); } +void Window::OnMouseRelativeEvent(const Dali::DevelWindow::MouseRelativeEvent& MouseRelativeEvent) +{ + Dali::Window handle(this); + + mMouseRelativeEventSignal.Emit(handle, MouseRelativeEvent); +} + void Window::OnRotation(const RotationEvent& rotation) { PositionSize newPositionSize(rotation.x, rotation.y, rotation.width, rotation.height); @@ -1396,6 +1405,31 @@ void Window::SetUserGeometryPolicy() DALI_LOG_RELEASE_INFO("Window (%p), WinId (%d), window user.geometry is changed\n", this, mNativeWindowId); } +bool Window::PointerConstraintsLock() +{ + return mWindowBase->PointerConstraintsLock(); +} + +bool Window::PointerConstraintsUnlock() +{ + return mWindowBase->PointerConstraintsUnlock(); +} + +void Window::LockedPointerRegionSet(int32_t x, int32_t y, int32_t width, int32_t height) +{ + mWindowBase->LockedPointerRegionSet(x, y, width, height); +} + +void Window::LockedPointerCursorPositionHintSet(int32_t x, int32_t y) +{ + mWindowBase->LockedPointerCursorPositionHintSet(x, y); +} + +bool Window::PointerWarp(int32_t x, int32_t y) +{ + return mWindowBase->PointerWarp(x, y); +} + } // 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 8d15f61..8143ba1 100644 --- a/dali/internal/window-system/common/window-impl.h +++ b/dali/internal/window-system/common/window-impl.h @@ -49,10 +49,11 @@ class WindowRenderSurface; class WindowBase; class Window; -using WindowPtr = IntrusivePtr; -using OrientationPtr = IntrusivePtr; -using MouseInOutEventPtr = IntrusivePtr; -using EventHandlerPtr = IntrusivePtr; +using WindowPtr = IntrusivePtr; +using OrientationPtr = IntrusivePtr; +using MouseInOutEventPtr = IntrusivePtr; +using MouseRelativeEventPtr = IntrusivePtr; +using EventHandlerPtr = IntrusivePtr; /** * Window provides a surface to render onto with orientation & indicator properties. @@ -70,6 +71,7 @@ public: typedef Dali::DevelWindow::MovedSignalType MovedSignalType; typedef Dali::DevelWindow::OrientationChangedSignalType OrientationChangedSignalType; typedef Dali::DevelWindow::MouseInOutEventSignalType MouseInOutEventSignalType; + typedef Dali::DevelWindow::MouseRelativeEventSignalType MouseRelativeEventSignalType; typedef Dali::DevelWindow::MoveCompletedSignalType MoveCompletedSignalType; typedef Dali::DevelWindow::ResizeCompletedSignalType ResizeCompletedSignalType; typedef Dali::DevelWindow::InsetsChangedSignalType InsetsChangedSignalType; @@ -509,6 +511,31 @@ public: // Dali::Internal::Adaptor::SceneHolder */ const Dali::TouchEvent& GetLastTouchEvent() const; + /** + * @copydoc Dali::DevelWindow::PointerConstraintsLock() + */ + bool PointerConstraintsLock(); + + /** + * @copydoc Dali::DevelWindow::PointerConstraintsUnlock() + */ + bool PointerConstraintsUnlock(); + + /** + * @copydoc Dali::DevelWindow::LockedPointerRegionSet() + */ + void LockedPointerRegionSet(int32_t x, int32_t y, int32_t width, int32_t height); + + /** + * @copydoc Dali::DevelWindow::LockedPointerCursorPositionHintSet() + */ + void LockedPointerCursorPositionHintSet(int32_t x, int32_t y); + + /** + * @copydoc Dali::DevelWindow::PointerWarp() + */ + bool PointerWarp(int32_t x, int32_t y); + private: /** * @brief Enumeration for orietation mode. @@ -623,6 +650,12 @@ private: void OnMouseInOutEvent(const Dali::DevelWindow::MouseInOutEvent& mouseInOutEvent); /** + * @brief Called when the mouse relative event is received. + * @param[in] MouseRelativeEvent the mouse event + */ + void OnMouseRelativeEvent(const Dali::DevelWindow::MouseRelativeEvent& MouseRelativeEvent); + + /** * @brief Called when the window is moved by display server. * * @param[in] position the moved window's position. @@ -673,7 +706,6 @@ private: */ void OnInsetsChanged(WindowInsetsPartType partType, WindowInsetsPartState partState, const Extents& insets); - private: // Dali::Internal::Adaptor::SceneHolder /** * @copydoc Dali::Internal::Adaptor::SceneHolder::OnAdaptorSet @@ -819,6 +851,14 @@ public: // Signals } /** + * @copydoc Dali::DevelWindow::MouseRelativeEventSignal() + */ + MouseRelativeEventSignalType& MouseRelativeEventSignal() + { + return mMouseRelativeEventSignal; + } + + /** * @copydoc Dali::DevelWindow::MoveCompletedSignal() */ MoveCompletedSignalType& MoveCompletedSignal() @@ -873,6 +913,7 @@ private: MovedSignalType mMovedSignal; OrientationChangedSignalType mOrientationChangedSignal; MouseInOutEventSignalType mMouseInOutEventSignal; + MouseRelativeEventSignalType mMouseRelativeEventSignal; MoveCompletedSignalType mMoveCompletedSignal; ResizeCompletedSignalType mResizeCompletedSignal; InsetsChangedSignalType mInsetsChangedSignal; diff --git a/dali/internal/window-system/macos/window-base-mac.h b/dali/internal/window-system/macos/window-base-mac.h index 4d3f047..63e77a8 100644 --- a/dali/internal/window-system/macos/window-base-mac.h +++ b/dali/internal/window-system/macos/window-base-mac.h @@ -1,7 +1,7 @@ #pragma once /* - * Copyright (c) 2022 Samsung Electronics Co., Ltd. + * Copyright (c) 2023 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -107,7 +107,7 @@ public: */ void MoveResize(PositionSize positionSize) override; - /** + /** * @copydoc Dali::Internal::Adaptor::WindowBase::SetLayout() */ void SetLayout(unsigned int numCols, unsigned int numRows, unsigned int column, unsigned int row, unsigned int colSpan, unsigned int rowSpan) override; @@ -387,6 +387,31 @@ public: */ void ExcludeInputRegion(const Rect& inputRegion) override; + /** + * @copydoc Dali::Internal::Adaptor::WindowBase::PointerConstraintsLock() + */ + bool PointerConstraintsLock() override; + + /** + * @copydoc Dali::Internal::Adaptor::WindowBase::PointerConstraintsUnlock() + */ + bool PointerConstraintsUnlock() override; + + /** + * @copydoc Dali::Internal::Adaptor::WindowBase::LockedPointerRegionSet() + */ + void LockedPointerRegionSet(int32_t x, int32_t y, int32_t width, int32_t height) override; + + /** + * @copydoc Dali::Internal::Adaptor::WindowBase::LockedPointerCursorPositionHintSet() + */ + void LockedPointerCursorPositionHintSet(int32_t x, int32_t y) override; + + /** + * @copydoc Dali::Internal::Adaptor::WindowBase::PointerWarp() + */ + bool PointerWarp(int32_t x, int32_t y) 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 16d2f75..675370b 100644 --- a/dali/internal/window-system/macos/window-base-mac.mm +++ b/dali/internal/window-system/macos/window-base-mac.mm @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Samsung Electronics Co., Ltd. + * Copyright (c) 2023 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -723,6 +723,29 @@ void WindowBaseCocoa::ExcludeInputRegion(const Rect& inputRegion) { } +bool WindowBaseCocoa::PointerConstraintsLock() +{ + return false; +} + +bool WindowBaseCocoa::PointerConstraintsUnlock() +{ + return false; +} + +void WindowBaseCocoa::LockedPointerRegionSet(int32_t x, int32_t y, int32_t width, int32_t height) +{ +} + +void WindowBaseCocoa::LockedPointerCursorPositionHintSet(int32_t x, int32_t y) +{ +} + +bool WindowBaseCocoa::PointerWarp(int32_t x, int32_t y) +{ + return false; +} + } // namespace Dali::Internal::Adaptor @implementation CocoaView @@ -841,4 +864,3 @@ void WindowBaseCocoa::ExcludeInputRegion(const Rect& inputRegion) [NSApp stop:nil]; } @end - 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 94ad113..c56dae2 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 @@ -2,7 +2,7 @@ #define DALI_INTERNAL_WINDOWSYSTEM_TIZENWAYLAND_WINDOW_BASE_ECORE_WL_H /* - * Copyright (c) 2022 Samsung Electronics Co., Ltd. + * Copyright (c) 2023 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -234,7 +234,7 @@ public: */ void MoveResize(PositionSize positionSize) override; - /** + /** * @copydoc Dali::Internal::Adaptor::WindowBase::SetLayout() */ void SetLayout(unsigned int numCols, unsigned int numRows, unsigned int column, unsigned int row, unsigned int colSpan, unsigned int rowSpan) override; @@ -509,6 +509,31 @@ public: */ void ExcludeInputRegion(const Rect& inputRegion) override; + /** + * @copydoc Dali::Internal::Adaptor::WindowBase::PointerConstraintsLock() + */ + bool PointerConstraintsLock() override; + + /** + * @copydoc Dali::Internal::Adaptor::WindowBase::PointerConstraintsUnlock() + */ + bool PointerConstraintsUnlock() override; + + /** + * @copydoc Dali::Internal::Adaptor::WindowBase::LockedPointerRegionSet() + */ + void LockedPointerRegionSet(int32_t x, int32_t y, int32_t width, int32_t height) override; + + /** + * @copydoc Dali::Internal::Adaptor::WindowBase::LockedPointerCursorPositionHintSet() + */ + void LockedPointerCursorPositionHintSet(int32_t x, int32_t y) override; + + /** + * @copydoc Dali::Internal::Adaptor::WindowBase::PointerWarp() + */ + bool PointerWarp(int32_t x, int32_t y) 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 7dd0015..e6207aa 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 @@ -459,6 +459,19 @@ static Eina_Bool EcoreEventMouseButtonMove(void* data, int type, void* event) } /** + * Called when a touch motion is received. + */ +static Eina_Bool EcoreEventMouseButtonRelativeMove(void* data, int type, void* event) +{ + WindowBaseEcoreWl2* windowBase = static_cast(data); + if(windowBase) + { + windowBase->OnMouseButtonRelativeMove(data, type, event); + } + return ECORE_CALLBACK_PASS_ON; +} + +/** * Called when a touch is canceled. */ static Eina_Bool EcoreEventMouseButtonCancel(void* data, int type, void* event) @@ -965,6 +978,7 @@ void WindowBaseEcoreWl2::Initialize(PositionSize positionSize, Any surface, bool mEcoreEventHandler.PushBack(ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_UP, EcoreEventMouseButtonUp, this)); mEcoreEventHandler.PushBack(ecore_event_handler_add(ECORE_EVENT_MOUSE_MOVE, EcoreEventMouseButtonMove, this)); mEcoreEventHandler.PushBack(ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_CANCEL, EcoreEventMouseButtonCancel, this)); + mEcoreEventHandler.PushBack(ecore_event_handler_add(ECORE_EVENT_MOUSE_RELATIVE_MOVE, EcoreEventMouseButtonRelativeMove, this)); // Register Mouse wheel events mEcoreEventHandler.PushBack(ecore_event_handler_add(ECORE_EVENT_MOUSE_WHEEL, EcoreEventMouseWheel, this)); @@ -1327,6 +1341,26 @@ void WindowBaseEcoreWl2::OnMouseButtonMove(void* data, int type, void* event) } } +void WindowBaseEcoreWl2::OnMouseButtonRelativeMove(void* data, int type, void* event) +{ + Ecore_Event_Mouse_Relative_Move* relativeMoveEvent = static_cast(event); + + if(relativeMoveEvent->window == static_cast(ecore_wl2_window_id_get(mEcoreWindow))) + { + DALI_TRACE_SCOPE(gTraceFilter, "DALI_ON_MOUSE_RELATIVE_MOVE"); + + Device::Class::Type deviceClass; + Device::Subclass::Type deviceSubclass; + + GetDeviceClass(ecore_device_class_get(relativeMoveEvent->dev), deviceClass); + GetDeviceSubclass(ecore_device_subclass_get(relativeMoveEvent->dev), deviceSubclass); + + Dali::DevelWindow::MouseRelativeEvent MouseRelativeEvent(Dali::DevelWindow::MouseRelativeEvent::Type::RELATIVE_MOVE, relativeMoveEvent->modifiers, relativeMoveEvent->timestamp, Vector2(relativeMoveEvent->dx, relativeMoveEvent->dy), Vector2(relativeMoveEvent->dx_unaccel, relativeMoveEvent->dy_unaccel), deviceClass, deviceSubclass); + + mMouseRelativeEventSignal.Emit(MouseRelativeEvent); + } +} + void WindowBaseEcoreWl2::OnMouseButtonCancel(void* data, int type, void* event) { Ecore_Event_Mouse_Button* touchEvent = static_cast(event); @@ -1603,7 +1637,7 @@ void WindowBaseEcoreWl2::OnEcoreEventConformantChange(void* event) int w = 0; int h = 0; - switch (ev->part_type) + switch(ev->part_type) { case ECORE_WL2_INDICATOR_PART: { @@ -1631,9 +1665,9 @@ void WindowBaseEcoreWl2::OnEcoreEventConformantChange(void* event) WindowInsetsPartState partState = WindowInsetsPartState::INVISIBLE; - int left = 0; - int right = 0; - int top = 0; + int left = 0; + int right = 0; + int top = 0; int bottom = 0; // Insets are applied only if system UI(e.g. virtual keyboard) satisfies the following 2 conditions. @@ -1660,12 +1694,12 @@ void WindowBaseEcoreWl2::OnEcoreEventConformantChange(void* event) { if((y <= winY) && (y + h >= winY) && (y + h <= winY + winH)) { - top = y + h - winY; + top = y + h - winY; applyInsets = true; } else if((y + h >= winY + winH) && (y >= winY) && (y <= winY + winH)) { - bottom = winY + winH - y; + bottom = winY + winH - y; applyInsets = true; } } @@ -1673,12 +1707,12 @@ void WindowBaseEcoreWl2::OnEcoreEventConformantChange(void* event) { if((x <= winX) && (x + w >= winX) && (x + w <= winX + winW)) { - left = x + w - winX; + left = x + w - winX; applyInsets = true; } else if((x + w >= winX + winW) && (x >= winX) && (x <= winX + winW)) { - right = winX + winW - x; + right = winX + winW - x; applyInsets = true; } } @@ -1768,7 +1802,7 @@ void WindowBaseEcoreWl2::RegistryGlobalCallbackRemove(void* data, struct wl_regi void WindowBaseEcoreWl2::TizenPolicyConformantArea(void* data, struct tizen_policy* tizenPolicy, struct wl_surface* surface, uint32_t conformantPart, uint32_t state, int32_t x, int32_t y, int32_t w, int32_t h) { - int originalX, originalY, originalWidth, originalHeight; + int originalX, originalY, originalWidth, originalHeight; bool changed = false; if(!surface) @@ -1790,7 +1824,7 @@ void WindowBaseEcoreWl2::TizenPolicyConformantArea(void* data, struct tizen_poli * The given state is based on the visibility value of indicator. * Thus we need to add 1 to it before comparing with indicator state. */ - Ecore_Wl2_Indicator_State indState = ecore_wl2_window_indicator_state_get(mEcoreWindow); + Ecore_Wl2_Indicator_State indState = ecore_wl2_window_indicator_state_get(mEcoreWindow); if((state + 1) != indState) { ecore_wl2_window_indicator_state_set(mEcoreWindow, static_cast(state + 1)); @@ -1840,15 +1874,15 @@ void WindowBaseEcoreWl2::TizenPolicyConformantArea(void* data, struct tizen_poli if(changed) { - Ecore_Wl2_Event_Conformant_Change *ev = static_cast(calloc(1, sizeof(Ecore_Wl2_Event_Conformant_Change))); + Ecore_Wl2_Event_Conformant_Change* ev = static_cast(calloc(1, sizeof(Ecore_Wl2_Event_Conformant_Change))); if(!ev) { return; } - ev->win = GetNativeWindowId(); + ev->win = GetNativeWindowId(); ev->part_type = static_cast(conformantPart); - ev->state = state; + ev->state = state; ecore_event_add(ECORE_WL2_EVENT_CONFORMANT_CHANGE, ev, NULL, NULL); } @@ -3350,6 +3384,31 @@ void WindowBaseEcoreWl2::ExcludeInputRegion(const Rect& inputRegion) ecore_wl2_window_commit(mEcoreWindow, EINA_TRUE); } +bool WindowBaseEcoreWl2::PointerConstraintsLock() +{ + return ecore_wl2_window_pointer_constraints_lock_pointer(mEcoreWindow); +} + +bool WindowBaseEcoreWl2::PointerConstraintsUnlock() +{ + return ecore_wl2_window_pointer_constraints_unlock_pointer(mEcoreWindow); +} + +void WindowBaseEcoreWl2::LockedPointerRegionSet(int32_t x, int32_t y, int32_t width, int32_t height) +{ + ecore_wl2_window_locked_pointer_region_set(mEcoreWindow, x, y, width, height); +} + +void WindowBaseEcoreWl2::LockedPointerCursorPositionHintSet(int32_t x, int32_t y) +{ + ecore_wl2_window_locked_pointer_cursor_position_hint_set(mEcoreWindow, x, y); +} + +bool WindowBaseEcoreWl2::PointerWarp(int32_t x, int32_t y) +{ + return ecore_wl2_window_pointer_warp(mEcoreWindow, x, y); +} + } // 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 13b1271..1e6e4f7 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 @@ -106,6 +106,11 @@ public: void OnMouseButtonMove(void* data, int type, void* event); /** + * @brief Called when a touch motion is received. + */ + void OnMouseButtonRelativeMove(void* data, int type, void* event); + + /** * @brief Called when a touch is canceled. */ void OnMouseButtonCancel(void* data, int type, void* event); @@ -581,6 +586,31 @@ public: */ void ExcludeInputRegion(const Rect& inputRegion) override; + /** + * @copydoc Dali::Internal::Adaptor::WindowBase::PointerConstraintsLock() + */ + bool PointerConstraintsLock() override; + + /** + * @copydoc Dali::Internal::Adaptor::WindowBase::PointerConstraintsUnlock() + */ + bool PointerConstraintsUnlock() override; + + /** + * @copydoc Dali::Internal::Adaptor::WindowBase::LockedPointerRegionSet() + */ + void LockedPointerRegionSet(int32_t x, int32_t y, int32_t width, int32_t height) override; + + /** + * @copydoc Dali::Internal::Adaptor::WindowBase::LockedPointerCursorPositionHintSet() + */ + void LockedPointerCursorPositionHintSet(int32_t x, int32_t y) override; + + /** + * @copydoc Dali::Internal::Adaptor::WindowBase::PointerWarp() + */ + bool PointerWarp(int32_t x, int32_t y) 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 39bcf9a..c4bce93 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 @@ -1019,6 +1019,29 @@ void WindowBaseEcoreX::ExcludeInputRegion(const Rect& inputRegion) { } +bool WindowBaseEcoreX::PointerConstraintsLock() +{ + return false; +} + +bool WindowBaseEcoreX::PointerConstraintsUnlock() +{ + return false; +} + +void WindowBaseEcoreX::LockedPointerRegionSet(int32_t x, int32_t y, int32_t width, int32_t height) +{ +} + +void WindowBaseEcoreX::LockedPointerCursorPositionHintSet(int32_t x, int32_t y) +{ +} + +bool WindowBaseEcoreX::PointerWarp(int32_t x, int32_t y) +{ + return false; +} + } // 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 d2a2b81..735e1f7 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 @@ -459,6 +459,31 @@ public: */ void ExcludeInputRegion(const Rect& inputRegion) override; + /** + * @copydoc Dali::Internal::Adaptor::WindowBase::PointerConstraintsLock() + */ + bool PointerConstraintsLock() override; + + /** + * @copydoc Dali::Internal::Adaptor::WindowBase::PointerConstraintsUnlock() + */ + bool PointerConstraintsUnlock() override; + + /** + * @copydoc Dali::Internal::Adaptor::WindowBase::LockedPointerRegionSet() + */ + void LockedPointerRegionSet(int32_t x, int32_t y, int32_t width, int32_t height) override; + + /** + * @copydoc Dali::Internal::Adaptor::WindowBase::LockedPointerCursorPositionHintSet() + */ + void LockedPointerCursorPositionHintSet(int32_t x, int32_t y) override; + + /** + * @copydoc Dali::Internal::Adaptor::WindowBase::PointerWarp() + */ + bool PointerWarp(int32_t x, int32_t y) 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 c8792be..056d2a5 100644 --- a/dali/internal/window-system/windows/window-base-win.cpp +++ b/dali/internal/window-system/windows/window-base-win.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Samsung Electronics Co., Ltd. + * Copyright (c) 2023 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -654,6 +654,29 @@ void WindowBaseWin::ExcludeInputRegion(const Rect& inputRegion) { } +bool WindowBaseWin::PointerConstraintsLock() +{ + return false; +} + +bool WindowBaseWin::PointerConstraintsUnlock() +{ + return false; +} + +void WindowBaseWin::LockedPointerRegionSet(int32_t x, int32_t y, int32_t width, int32_t height) +{ +} + +void WindowBaseWin::LockedPointerCursorPositionHintSet(int32_t x, int32_t y) +{ +} + +bool WindowBaseWin::PointerWarp(int32_t x, int32_t y) +{ + return false; +} + } // 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 90c8d21..de49e6a 100644 --- a/dali/internal/window-system/windows/window-base-win.h +++ b/dali/internal/window-system/windows/window-base-win.h @@ -2,7 +2,7 @@ #define DALI_INTERNAL_WINDOWSYSTEM_WINDOW_BASE_WIN_H /* - * Copyright (c) 2022 Samsung Electronics Co., Ltd. + * Copyright (c) 2023 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -441,6 +441,31 @@ public: */ void ExcludeInputRegion(const Rect& inputRegion) override; + /** + * @copydoc Dali::Internal::Adaptor::WindowBase::PointerConstraintsLock() + */ + bool PointerConstraintsLock() override; + + /** + * @copydoc Dali::Internal::Adaptor::WindowBase::PointerConstraintsUnlock() + */ + bool PointerConstraintsUnlock() override; + + /** + * @copydoc Dali::Internal::Adaptor::WindowBase::LockedPointerRegionSet() + */ + void LockedPointerRegionSet(int32_t x, int32_t y, int32_t width, int32_t height) override; + + /** + * @copydoc Dali::Internal::Adaptor::WindowBase::LockedPointerCursorPositionHintSet() + */ + void LockedPointerCursorPositionHintSet(int32_t x, int32_t y) override; + + /** + * @copydoc Dali::Internal::Adaptor::WindowBase::PointerWarp() + */ + bool PointerWarp(int32_t x, int32_t y) override; + private: /** * Second stage initialization diff --git a/dali/internal/window-system/x11/window-base-x.cpp b/dali/internal/window-system/x11/window-base-x.cpp index c6868ce..bb1743b 100644 --- a/dali/internal/window-system/x11/window-base-x.cpp +++ b/dali/internal/window-system/x11/window-base-x.cpp @@ -955,6 +955,29 @@ void WindowBaseX::ExcludeInputRegion(const Rect& inputRegion) { } +bool WindowBaseX::PointerConstraintsLock() +{ + return false; +} + +bool WindowBaseX::PointerConstraintsUnlock() +{ + return false; +} + +void WindowBaseX::LockedPointerRegionSet(int32_t x, int32_t y, int32_t width, int32_t height) +{ +} + +void WindowBaseX::LockedPointerCursorPositionHintSet(int32_t x, int32_t y) +{ +} + +bool WindowBaseX::PointerWarp(int32_t x, int32_t y) +{ + return false; +} + } // namespace Adaptor } // namespace Internal diff --git a/dali/internal/window-system/x11/window-base-x.h b/dali/internal/window-system/x11/window-base-x.h index c801f4c..34ede13 100644 --- a/dali/internal/window-system/x11/window-base-x.h +++ b/dali/internal/window-system/x11/window-base-x.h @@ -188,7 +188,7 @@ public: */ void MoveResize(PositionSize positionSize) override; - /** + /** * @copydoc Dali::Internal::Adaptor::WindowBase::SetLayout() */ void SetLayout(unsigned int numCols, unsigned int numRows, unsigned int column, unsigned int row, unsigned int colSpan, unsigned int rowSpan) override; @@ -463,6 +463,31 @@ public: */ void ExcludeInputRegion(const Rect& inputRegion) override; + /** + * @copydoc Dali::Internal::Adaptor::WindowBase::PointerConstraintsLock() + */ + bool PointerConstraintsLock() override; + + /** + * @copydoc Dali::Internal::Adaptor::WindowBase::PointerConstraintsUnlock() + */ + bool PointerConstraintsUnlock() override; + + /** + * @copydoc Dali::Internal::Adaptor::WindowBase::LockedPointerRegionSet() + */ + void LockedPointerRegionSet(int32_t x, int32_t y, int32_t width, int32_t height) override; + + /** + * @copydoc Dali::Internal::Adaptor::WindowBase::LockedPointerCursorPositionHintSet() + */ + void LockedPointerCursorPositionHintSet(int32_t x, int32_t y) override; + + /** + * @copydoc Dali::Internal::Adaptor::WindowBase::PointerWarp() + */ + bool PointerWarp(int32_t x, int32_t y) override; + private: /** * Second stage initialization -- 2.7.4