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

Commit b73052d9 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "Ensure we clear magnification specs on non-magnifiable containers."

parents 6b39bac3 32eef6b5
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -4807,7 +4807,11 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
        // Re-parent IME's SurfaceControl when MagnificationSpec changed.
        updateImeParent();

        if (spec.scale != 1.0) {
            applyMagnificationSpec(getPendingTransaction(), spec);
        } else {
            clearMagnificationSpec(getPendingTransaction());
        }
        getPendingTransaction().apply();
    }

+14 −0
Original line number Diff line number Diff line
@@ -137,6 +137,8 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer<
     */
    private boolean mCommittedReparentToAnimationLeash;

    private MagnificationSpec mLastMagnificationSpec;

    WindowContainer(WindowManagerService wms) {
        mWmService = wms;
        mPendingTransaction = wms.mTransactionFactory.make();
@@ -1186,6 +1188,7 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer<
        if (shouldMagnify()) {
            t.setMatrix(mSurfaceControl, spec.scale, 0, 0, spec.scale)
                    .setPosition(mSurfaceControl, spec.offsetX, spec.offsetY);
            mLastMagnificationSpec = spec;
        } else {
            for (int i = 0; i < mChildren.size(); i++) {
                mChildren.get(i).applyMagnificationSpec(t, spec);
@@ -1193,6 +1196,17 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer<
        }
    }

    void clearMagnificationSpec(Transaction t) {
        if (mLastMagnificationSpec != null) {
            t.setMatrix(mSurfaceControl, 1, 0, 0, 1)
                .setPosition(mSurfaceControl, 0, 0);
        }
        mLastMagnificationSpec = null;
        for (int i = 0; i < mChildren.size(); i++) {
            mChildren.get(i).clearMagnificationSpec(t);
        }
    }

    void prepareSurfaces() {
        // If a leash has been set when the transaction was committed, then the leash reparent has
        // been committed.