From 64a70881b3ca559559f416b54d2ec21dbb009fe4 Mon Sep 17 00:00:00 2001 From: Arpit Singh Date: Fri, 25 Oct 2024 21:08:08 +0000 Subject: 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 --- libs/input/PointerController.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'libs/input/PointerController.cpp') 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) { -- cgit v1.2.3-59-g8ed1b