Don't apply overscan insets to freeform windows.

Overscan gets applied when window frame is outside of the display frame.
This is a natural situation for freeform windows, so they should not
receive the overscan inset. Applying overscan insets causes the
application content to get squashed, when we resize the freeform window
and part of it is outside of the display.

Bug: 26009343
Change-Id: Ib614fb8c7170c3b6d69614b813674853e1204eef
This commit is contained in:
Filip Gruszczynski
2016-01-28 18:14:27 -08:00
parent d61c302bf8
commit 01ef404d5d

View File

@@ -751,15 +751,16 @@ final class WindowState implements WindowManagerPolicy.WindowState {
Math.min(mStableFrame.bottom, frame.bottom));
}
mOverscanInsets.set(Math.max(mOverscanFrame.left - frame.left, 0),
Math.max(mOverscanFrame.top - frame.top, 0),
Math.max(frame.right - mOverscanFrame.right, 0),
Math.max(frame.bottom - mOverscanFrame.bottom, 0));
if (!inFreeformWorkspace()) {
// Freeform windows can be positioned outside of the display frame, but that is not a
// reason to provide them with overscan insets.
mOverscanInsets.set(Math.max(mOverscanFrame.left - frame.left, 0),
Math.max(mOverscanFrame.top - frame.top, 0),
Math.max(frame.right - mOverscanFrame.right, 0),
Math.max(frame.bottom - mOverscanFrame.bottom, 0));
}
if (mAttrs.type == TYPE_DOCK_DIVIDER) {
// For the docked divider, we calculate the stable insets like a full-screen window
// so it can use it to calculate the snap positions.
mStableInsets.set(Math.max(mStableFrame.left - mDisplayFrame.left, 0),