summaryrefslogtreecommitdiff
path: root/libs/input/PointerController.cpp
diff options
context:
space:
mode:
author Arpit Singh <arpitks@google.com> 2024-10-25 21:08:08 +0000
committer Arpit Singh <arpitks@google.com> 2024-12-02 08:27:10 +0000
commit64a70881b3ca559559f416b54d2ec21dbb009fe4 (patch)
treeb8b761f55d91f6578dc470b0954c9eb16fec4c43 /libs/input/PointerController.cpp
parentc60efe594e0c2ce6b672516d9538700011fa5c98 (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.cpp14
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) {