From e6bcaf134aed92a00dc5c9ee789e8a7185ffb861 Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Fri, 27 May 2016 10:58:48 +0800 Subject: [PATCH] Fix clipRect transform rounding errors For clipRect.right and clipRect.bottom, we need to round them up. Bug: 28864193 Change-Id: I2bd30eec8a8093e0fdcc7ce8484a0610fd068792 --- .../core/java/com/android/server/wm/WindowState.java | 10 +++++----- .../com/android/server/wm/WindowStateAnimator.java | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index ff95afc995b48..08bfa2de0b83a 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -2732,14 +2732,14 @@ final class WindowState implements WindowManagerPolicy.WindowState { return mStringNameCache; } - void transformFromScreenToSurfaceSpace(Rect rect) { + void transformClipRectFromScreenToSurfaceSpace(Rect clipRect) { if (mHScale >= 0) { - rect.left = (int) (rect.left / mHScale); - rect.right = (int) (rect.right / mHScale); + clipRect.left = (int) (clipRect.left / mHScale); + clipRect.right = (int) Math.ceil(clipRect.right / mHScale); } if (mVScale >= 0) { - rect.top = (int) (rect.top / mVScale); - rect.bottom = (int) (rect.bottom / mVScale); + clipRect.top = (int) (clipRect.top / mVScale); + clipRect.bottom = (int) Math.ceil(clipRect.bottom / mVScale); } } diff --git a/services/core/java/com/android/server/wm/WindowStateAnimator.java b/services/core/java/com/android/server/wm/WindowStateAnimator.java index 9dae0f2d3262e..22621efd9a345 100644 --- a/services/core/java/com/android/server/wm/WindowStateAnimator.java +++ b/services/core/java/com/android/server/wm/WindowStateAnimator.java @@ -1282,7 +1282,7 @@ class WindowStateAnimator { if (DEBUG_WINDOW_CROP) Slog.d(TAG, "win=" + w + " Clip rect after stack adjustment=" + clipRect); - w.transformFromScreenToSurfaceSpace(clipRect); + w.transformClipRectFromScreenToSurfaceSpace(clipRect); // See {@link WindowState#notifyMovedInStack} for why this is necessary. if (w.hasJustMovedInStack() && mLastClipRect.isEmpty() && !clipRect.isEmpty()) {