Restore setCropInTransaction HiddenForCrop behavior.

Prior to c/1106850 setCropInTransaction hid the surface
for crop width and height <= 0. That CL allowed
setting -1 for crop width and height which SF
determines as clearing the crop. Other portions of the code
depend on the old behavior though for negative values, so restore
the behavior of setCropInTransaction and use a new clearCrop
method for the new code.

Bug: 29276588
Change-Id: I728666009c362ff635c7ebfb3ef2e83428fb03fe
This commit is contained in:
Robert Carr
2016-06-10 15:13:32 -07:00
parent e4b1fb94e3
commit 4320d33a06
2 changed files with 26 additions and 6 deletions

View File

@@ -1289,9 +1289,13 @@ class WindowStateAnimator {
void updateSurfaceWindowCrop(Rect clipRect, Rect finalClipRect, boolean recoveringMemory) {
if (DEBUG_WINDOW_CROP) Slog.d(TAG, "updateSurfaceWindowCrop: win=" + mWin
+ " clipRect=" + clipRect + " finalClipRect=" + finalClipRect);
if (!clipRect.equals(mLastClipRect)) {
mLastClipRect.set(clipRect);
mSurfaceController.setCropInTransaction(clipRect, recoveringMemory);
if (clipRect != null) {
if (!clipRect.equals(mLastClipRect)) {
mLastClipRect.set(clipRect);
mSurfaceController.setCropInTransaction(clipRect, recoveringMemory);
}
} else {
mSurfaceController.clearCropInTransaction(recoveringMemory);
}
if (!finalClipRect.equals(mLastFinalClipRect)) {
mLastFinalClipRect.set(finalClipRect);
@@ -1480,14 +1484,16 @@ class WindowStateAnimator {
mSurfaceController.setPositionAppliesWithResizeInTransaction(true);
mSurfaceController.forceScaleableInTransaction(false);
}
Rect clipRect = mTmpClipRect;
if (w.inPinnedWorkspace()) {
mTmpClipRect.set(0, 0, -1, -1);
clipRect = null;
task.mStack.getDimBounds(mTmpFinalClipRect);
mTmpFinalClipRect.inset(-w.mAttrs.surfaceInsets.left, -w.mAttrs.surfaceInsets.top,
-w.mAttrs.surfaceInsets.right, -w.mAttrs.surfaceInsets.bottom);
}
updateSurfaceWindowCrop(mTmpClipRect, mTmpFinalClipRect, recoveringMemory);
updateSurfaceWindowCrop(clipRect, mTmpFinalClipRect, recoveringMemory);
mSurfaceController.setMatrixInTransaction(mDsDx * w.mHScale * mExtraHScale,
mDtDx * w.mVScale * mExtraVScale,

View File

@@ -176,7 +176,7 @@ class WindowSurfaceController {
if (SHOW_TRANSACTIONS) logSurface(
"CROP " + clipRect.toShortString(), null);
try {
if (clipRect.width() != 0 && clipRect.height() != 0) {
if (clipRect.width() > 0 && clipRect.height() > 0) {
mSurfaceControl.setWindowCrop(clipRect);
mHiddenForCrop = false;
updateVisibility();
@@ -194,6 +194,20 @@ class WindowSurfaceController {
}
}
void clearCropInTransaction(boolean recoveringMemory) {
if (SHOW_TRANSACTIONS) logSurface(
"CLEAR CROP", null);
try {
Rect clipRect = new Rect(0, 0, -1, -1);
mSurfaceControl.setWindowCrop(clipRect);
} catch (RuntimeException e) {
Slog.w(TAG, "Error setting clearing crop of " + this, e);
if (!recoveringMemory) {
mAnimator.reclaimSomeSurfaceMemory("crop", true);
}
}
}
void setFinalCropInTransaction(Rect clipRect) {
if (SHOW_TRANSACTIONS) logSurface(
"FINAL CROP " + clipRect.toShortString(), null);