diff options
author | 2024-10-25 21:08:08 +0000 | |
---|---|---|
committer | 2024-12-02 08:27:10 +0000 | |
commit | 64a70881b3ca559559f416b54d2ec21dbb009fe4 (patch) | |
tree | b8b761f55d91f6578dc470b0954c9eb16fec4c43 /libs/input/PointerController.cpp | |
parent | c60efe594e0c2ce6b672516d9538700011fa5c98 (diff) |
Check if cursor has moved out of viewport bounds in CursorController
This CL updates CursorController to check if and which boundary the
cursor has crossed. This will be used to enable cursor moving between
different connected displays.
Test: atest inputflinger_tests
Test: verify cursor can move between displays as expected
Bug: 367660694
Flag: com.android.input.flags.connected_displays_cursor
Change-Id: Ida11e897d4e6767549dcc40da5c83e4c6be178c9
Diffstat (limited to 'libs/input/PointerController.cpp')
-rw-r--r-- | libs/input/PointerController.cpp | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/libs/input/PointerController.cpp b/libs/input/PointerController.cpp index 78d7d3a7051b..883bc2f0e0f3 100644 --- a/libs/input/PointerController.cpp +++ b/libs/input/PointerController.cpp @@ -138,15 +138,19 @@ std::mutex& PointerController::getLock() const { return mDisplayInfoListener->mLock; } -void PointerController::move(float deltaX, float deltaY) { +FloatPoint PointerController::move(float deltaX, float deltaY) { const ui::LogicalDisplayId displayId = mCursorController.getDisplayId(); - vec2 transformed; + ui::Transform transform; { std::scoped_lock lock(getLock()); - const auto& transform = getTransformForDisplayLocked(displayId); - transformed = transformWithoutTranslation(transform, {deltaX, deltaY}); + transform = getTransformForDisplayLocked(displayId); } - mCursorController.move(transformed.x, transformed.y); + + const vec2 transformed = transformWithoutTranslation(transform, {deltaX, deltaY}); + + const FloatPoint unconsumedDelta = mCursorController.move(transformed.x, transformed.y); + return FloatPoint(transformWithoutTranslation(transform.inverse(), + {unconsumedDelta.x, unconsumedDelta.y})); } void PointerController::setPosition(float x, float y) { |