Merge "Account for scaling of surfaceInset area in magnification." into nyc-mr1-dev

This commit is contained in:
Rob Carr
2016-08-12 19:37:15 +00:00
committed by Android (Google) Code Review

View File

@@ -926,6 +926,22 @@ class WindowStateAnimator {
mPendingDestroySurface = null;
}
void applyMagnificationSpec(MagnificationSpec spec, Matrix transform) {
final int surfaceInsetLeft = mWin.mAttrs.surfaceInsets.left;
final int surfaceInsetTop = mWin.mAttrs.surfaceInsets.top;
if (spec != null && !spec.isNop()) {
float scale = spec.scale;
transform.postScale(scale, scale);
transform.postTranslate(spec.offsetX, spec.offsetY);
// As we are scaling the whole surface, to keep the content
// in the same position we will also have to scale the surfaceInsets.
transform.postTranslate(-(surfaceInsetLeft*scale - surfaceInsetLeft),
-(surfaceInsetTop*scale - surfaceInsetTop));
}
}
void computeShownFrameLocked() {
final boolean selfTransformation = mHasLocalTransformation;
Transformation attachedTransformation =
@@ -1016,10 +1032,7 @@ class WindowStateAnimator {
if (mService.mAccessibilityController != null && displayId == DEFAULT_DISPLAY) {
MagnificationSpec spec = mService.mAccessibilityController
.getMagnificationSpecForWindowLocked(mWin);
if (spec != null && !spec.isNop()) {
tmpMatrix.postScale(spec.scale, spec.scale);
tmpMatrix.postTranslate(spec.offsetX, spec.offsetY);
}
applyMagnificationSpec(spec, tmpMatrix);
}
// "convert" it into SurfaceFlinger's format
@@ -1118,10 +1131,7 @@ class WindowStateAnimator {
tmpMatrix.setScale(mWin.mGlobalScale, mWin.mGlobalScale);
tmpMatrix.postTranslate(frame.left + mWin.mXOffset, frame.top + mWin.mYOffset);
if (spec != null && !spec.isNop()) {
tmpMatrix.postScale(spec.scale, spec.scale);
tmpMatrix.postTranslate(spec.offsetX, spec.offsetY);
}
applyMagnificationSpec(spec, tmpMatrix);
tmpMatrix.getValues(tmpFloats);