Loading libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipContentOverlay.java +9 −4 Original line number Diff line number Diff line Loading @@ -132,7 +132,11 @@ public abstract class PipContentOverlay { tx.show(mLeash); tx.setLayer(mLeash, Integer.MAX_VALUE); tx.setBuffer(mLeash, mSnapshot.getHardwareBuffer()); tx.setCrop(mLeash, mSourceRectHint); // Relocate the content to parentLeash's coordinates. tx.setPosition(mLeash, -mSourceRectHint.left, -mSourceRectHint.top); tx.setWindowCrop(mLeash, (int) (mSourceRectHint.width() * mTaskSnapshotScaleX), (int) (mSourceRectHint.height() * mTaskSnapshotScaleY)); tx.setScale(mLeash, mTaskSnapshotScaleX, mTaskSnapshotScaleY); tx.reparent(mLeash, parentLeash); tx.apply(); Loading @@ -149,10 +153,11 @@ public abstract class PipContentOverlay { // the atomicTx is committed along with the final WindowContainerTransaction. final SurfaceControl.Transaction nonAtomicTx = new SurfaceControl.Transaction(); final float scaleX = (float) destinationBounds.width() / mSnapshot.getHardwareBuffer().getWidth(); / mSourceRectHint.width(); final float scaleY = (float) destinationBounds.height() / mSnapshot.getHardwareBuffer().getHeight(); final float scale = Math.max(scaleX, scaleY); / mSourceRectHint.height(); final float scale = Math.max( scaleX * mTaskSnapshotScaleX, scaleY * mTaskSnapshotScaleY); nonAtomicTx.setScale(mLeash, scale, scale); nonAtomicTx.setPosition(mLeash, -scale * mSourceRectHint.left / mTaskSnapshotScaleX, Loading libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipSurfaceTransactionHelper.java +3 −1 Original line number Diff line number Diff line Loading @@ -105,8 +105,10 @@ public class PipSurfaceTransactionHelper { SurfaceControl leash, Rect sourceRectHint, Rect sourceBounds, Rect destinationBounds, Rect insets, boolean isInPipDirection) { mTmpSourceRectF.set(sourceBounds); mTmpDestinationRect.set(sourceBounds); // Similar to {@link #scale}, we want to position the surface relative to the screen // coordinates so offset the bounds to 0,0 mTmpDestinationRect.offsetTo(0, 0); mTmpDestinationRect.inset(insets); // Scale by the shortest edge and offset such that the top/left of the scaled inset source // rect aligns with the top/left of the destination bounds Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipContentOverlay.java +9 −4 Original line number Diff line number Diff line Loading @@ -132,7 +132,11 @@ public abstract class PipContentOverlay { tx.show(mLeash); tx.setLayer(mLeash, Integer.MAX_VALUE); tx.setBuffer(mLeash, mSnapshot.getHardwareBuffer()); tx.setCrop(mLeash, mSourceRectHint); // Relocate the content to parentLeash's coordinates. tx.setPosition(mLeash, -mSourceRectHint.left, -mSourceRectHint.top); tx.setWindowCrop(mLeash, (int) (mSourceRectHint.width() * mTaskSnapshotScaleX), (int) (mSourceRectHint.height() * mTaskSnapshotScaleY)); tx.setScale(mLeash, mTaskSnapshotScaleX, mTaskSnapshotScaleY); tx.reparent(mLeash, parentLeash); tx.apply(); Loading @@ -149,10 +153,11 @@ public abstract class PipContentOverlay { // the atomicTx is committed along with the final WindowContainerTransaction. final SurfaceControl.Transaction nonAtomicTx = new SurfaceControl.Transaction(); final float scaleX = (float) destinationBounds.width() / mSnapshot.getHardwareBuffer().getWidth(); / mSourceRectHint.width(); final float scaleY = (float) destinationBounds.height() / mSnapshot.getHardwareBuffer().getHeight(); final float scale = Math.max(scaleX, scaleY); / mSourceRectHint.height(); final float scale = Math.max( scaleX * mTaskSnapshotScaleX, scaleY * mTaskSnapshotScaleY); nonAtomicTx.setScale(mLeash, scale, scale); nonAtomicTx.setPosition(mLeash, -scale * mSourceRectHint.left / mTaskSnapshotScaleX, Loading
libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipSurfaceTransactionHelper.java +3 −1 Original line number Diff line number Diff line Loading @@ -105,8 +105,10 @@ public class PipSurfaceTransactionHelper { SurfaceControl leash, Rect sourceRectHint, Rect sourceBounds, Rect destinationBounds, Rect insets, boolean isInPipDirection) { mTmpSourceRectF.set(sourceBounds); mTmpDestinationRect.set(sourceBounds); // Similar to {@link #scale}, we want to position the surface relative to the screen // coordinates so offset the bounds to 0,0 mTmpDestinationRect.offsetTo(0, 0); mTmpDestinationRect.inset(insets); // Scale by the shortest edge and offset such that the top/left of the scaled inset source // rect aligns with the top/left of the destination bounds Loading