Fix translateToWindow to report proper values

The `translateToWindowX`and `translateToWindowY` will translate screen
pointer to window coordinate, if a window has a global scale, it should
multiply its `mInvGlobalScale` so we could get the proper values.

For example:
Global scale = 2.0f, inverse scale = 0.5f
Then screen pointer is (1000, 1000) and the window frame is (0, 0).
So after `translateToWindow`, it should return (500, 500) in window
coordinate.

Bug: b/246446831
Test: atest DragDropTest DragDropCompatTest
Change-Id: If66875ebefb1ae15779603c193136cf6334517d3
This commit is contained in:
Arthur Hung
2022-09-15 07:05:20 +00:00
parent 376a24534b
commit ef49b9f1cb
2 changed files with 4 additions and 4 deletions

View File

@@ -228,8 +228,8 @@ class DragState {
SurfaceControl dragSurface = null;
if (!mDragResult && (ws.mSession.mPid == mPid)) {
// Report unconsumed drop location back to the app that started the drag.
x = mCurrentX;
y = mCurrentY;
x = ws.translateToWindowX(mCurrentX);
y = ws.translateToWindowY(mCurrentY);
if (relinquishDragSurfaceToDragSource()) {
// If requested (and allowed), report the drag surface back to the app
// starting the drag to handle the return animation

View File

@@ -4562,7 +4562,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
float translateToWindowX(float x) {
float winX = x - mWindowFrames.mFrame.left;
if (mGlobalScale != 1f) {
winX *= mGlobalScale;
winX *= mInvGlobalScale;
}
return winX;
}
@@ -4570,7 +4570,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
float translateToWindowY(float y) {
float winY = y - mWindowFrames.mFrame.top;
if (mGlobalScale != 1f) {
winY *= mGlobalScale;
winY *= mInvGlobalScale;
}
return winY;
}