From 3e85f9e48c0b30c8a7e5cd4512b091d00dcac4fa Mon Sep 17 00:00:00 2001 From: Winson Date: Thu, 4 Feb 2016 12:53:46 -0800 Subject: [PATCH] Drawing thumbnail background color for empty space in view. - When showing landscape thumbnails in portrait, the thumbnails are aspect scaled to fit the width of the view, this change will draw a solid color to fill the other part so that we don't see the current edge-clamp texture effect. Change-Id: Icf08239942f9179c66ba0f8d8ddd00f7d2a09d3c --- .../recents/views/TaskViewThumbnail.java | 38 +++++++++++++++++-- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewThumbnail.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewThumbnail.java index f90951e4ccd15..57c180d785782 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewThumbnail.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewThumbnail.java @@ -25,6 +25,7 @@ import android.graphics.LightingColorFilter; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.Rect; +import android.graphics.Region; import android.graphics.Shader; import android.util.AttributeSet; import android.view.View; @@ -48,6 +49,7 @@ public class TaskViewThumbnail extends View { float mDimAlpha; Matrix mScaleMatrix = new Matrix(); Paint mDrawPaint = new Paint(); + Paint mBgFillPaint = new Paint(); BitmapShader mBitmapShader; LightingColorFilter mLightingColorFilter = new LightingColorFilter(0xffffffff, 0); @@ -79,6 +81,7 @@ public class TaskViewThumbnail extends View { mDrawPaint.setAntiAlias(true); mCornerRadius = getResources().getDimensionPixelSize( R.dimen.recents_task_view_rounded_corners_radius); + mBgFillPaint.setColor(Color.WHITE); } /** @@ -100,10 +103,37 @@ public class TaskViewThumbnail extends View { if (mInvisible) { return; } - // Draw the thumbnail with the rounded corners - canvas.drawRoundRect(0, 0, mTaskViewRect.width(), mTaskViewRect.height(), - mCornerRadius, - mCornerRadius, mDrawPaint); + + if (mThumbnailRect.width() <= 0 || mThumbnailRect.height() <= 0 || + mTaskViewRect.width() <= 0 || mTaskViewRect.height() <= 0) { + return; + } + + int thumbnailHeight = (int) (((float) mTaskViewRect.width() / mThumbnailRect.width()) * + mThumbnailRect.height()); + if (thumbnailHeight >= mTaskViewRect.height()) { + // The thumbnail fills the full task view bounds, so just draw it + canvas.drawRoundRect(0, 0, mTaskViewRect.width(), mTaskViewRect.height(), + mCornerRadius, mCornerRadius, mDrawPaint); + } else { + // The thumbnail only covers part of the task view bounds, so fill in the non-thumbnail + // space with the default background color. This is the equivalent of the GL border + // texture mode. + int count = canvas.save(Canvas.CLIP_SAVE_FLAG); + + // Since we want the top corners to be rounded, just clip at the thumbnail height + canvas.clipRect(0, 0, mTaskViewRect.width(), thumbnailHeight, Region.Op.REPLACE); + canvas.drawRoundRect(0, 0, mTaskViewRect.width(), thumbnailHeight + mCornerRadius, + mCornerRadius, mCornerRadius, mDrawPaint); + + // In the remaining space, draw the background color + canvas.clipRect(0, thumbnailHeight, mTaskViewRect.width(), mTaskViewRect.height(), + Region.Op.REPLACE); + canvas.drawRoundRect(0, thumbnailHeight - mCornerRadius, mTaskViewRect.width(), + mTaskViewRect.height(), mCornerRadius, mCornerRadius, mBgFillPaint); + + canvas.restoreToCount(count); + } } /** Sets the thumbnail to a given bitmap. */