Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ef49b9f1 authored by Arthur Hung's avatar Arthur Hung
Browse files

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
parent 376a2453
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -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
+2 −2
Original line number Diff line number Diff line
@@ -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;
    }