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:
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user