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

Commit e28099be authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fix magnify screen in a dialog will response wrong position from touch." into qt-dev

parents f888c932 118b1147
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
@@ -391,6 +391,25 @@ TEST_F(InputSurfacesTest, input_respects_cropped_surface_insets) {
    parentSurface->expectTap(1, 1);
}

// Ensure a surface whose insets are scaled, handles the touch offset correctly.
TEST_F(InputSurfacesTest, input_respects_scaled_surface_insets) {
    std::unique_ptr<InputSurface> bgSurface = makeSurface(100, 100);
    std::unique_ptr<InputSurface> fgSurface = makeSurface(100, 100);
    bgSurface->showAt(100, 100);

    fgSurface->mInputInfo.surfaceInset = 5;
    fgSurface->showAt(100, 100);

    fgSurface->doTransaction([&](auto &t, auto &sc) { t.setMatrix(sc, 2.0, 0, 0, 4.0); });

    // expect = touch / scale - inset
    injectTap(112, 124);
    fgSurface->expectTap(1, 1);

    injectTap(101, 101);
    bgSurface->expectTap(1, 1);
}

// Ensure we ignore transparent region when getting screen bounds when positioning input frame.
TEST_F(InputSurfacesTest, input_ignores_transparent_region) {
    std::unique_ptr<InputSurface> surface = makeSurface(100, 100);
+5 −1
Original line number Diff line number Diff line
@@ -2004,10 +2004,14 @@ InputWindowInfo Layer::fillInputInfo() {
    ui::Transform t = getTransform();
    const float xScale = t.sx();
    const float yScale = t.sy();
    float xSurfaceInset = info.surfaceInset;
    float ySurfaceInset = info.surfaceInset;
    if (xScale != 1.0f || yScale != 1.0f) {
        info.windowXScale *= 1.0f / xScale;
        info.windowYScale *= 1.0f / yScale;
        info.touchableRegion.scaleSelf(xScale, yScale);
        xSurfaceInset *= xScale;
        ySurfaceInset *= yScale;
    }

    // Transform layer size to screen space and inset it by surface insets.
@@ -2019,7 +2023,7 @@ InputWindowInfo Layer::fillInputInfo() {
        layerBounds = getCroppedBufferSize(getDrawingState());
    }
    layerBounds = t.transform(layerBounds);
    layerBounds.inset(info.surfaceInset, info.surfaceInset, info.surfaceInset, info.surfaceInset);
    layerBounds.inset(xSurfaceInset, ySurfaceInset, xSurfaceInset, ySurfaceInset);

    // Input coordinate should match the layer bounds.
    info.frameLeft = layerBounds.left;