196ac68a481ce5b794b5227e09ace7c30d6dd5e7bSunny Goyalpackage com.android.launcher3.graphics; 296ac68a481ce5b794b5227e09ace7c30d6dd5e7bSunny Goyal 396ac68a481ce5b794b5227e09ace7c30d6dd5e7bSunny Goyalimport android.annotation.TargetApi; 496ac68a481ce5b794b5227e09ace7c30d6dd5e7bSunny Goyalimport android.content.res.Resources; 596ac68a481ce5b794b5227e09ace7c30d6dd5e7bSunny Goyalimport android.content.res.Resources.Theme; 696ac68a481ce5b794b5227e09ace7c30d6dd5e7bSunny Goyalimport android.graphics.Canvas; 796ac68a481ce5b794b5227e09ace7c30d6dd5e7bSunny Goyalimport android.graphics.drawable.ColorDrawable; 896ac68a481ce5b794b5227e09ace7c30d6dd5e7bSunny Goyalimport android.graphics.drawable.DrawableWrapper; 996ac68a481ce5b794b5227e09ace7c30d6dd5e7bSunny Goyalimport android.os.Build; 1096ac68a481ce5b794b5227e09ace7c30d6dd5e7bSunny Goyalimport android.util.AttributeSet; 1196ac68a481ce5b794b5227e09ace7c30d6dd5e7bSunny Goyal 1296ac68a481ce5b794b5227e09ace7c30d6dd5e7bSunny Goyalimport org.xmlpull.v1.XmlPullParser; 1396ac68a481ce5b794b5227e09ace7c30d6dd5e7bSunny Goyal 1496ac68a481ce5b794b5227e09ace7c30d6dd5e7bSunny Goyal/** 1596ac68a481ce5b794b5227e09ace7c30d6dd5e7bSunny Goyal * Extension of {@link DrawableWrapper} which scales the child drawables by a fixed amount. 1696ac68a481ce5b794b5227e09ace7c30d6dd5e7bSunny Goyal */ 1796ac68a481ce5b794b5227e09ace7c30d6dd5e7bSunny Goyal@TargetApi(Build.VERSION_CODES.N) 1896ac68a481ce5b794b5227e09ace7c30d6dd5e7bSunny Goyalpublic class FixedScaleDrawable extends DrawableWrapper { 1996ac68a481ce5b794b5227e09ace7c30d6dd5e7bSunny Goyal 2096ac68a481ce5b794b5227e09ace7c30d6dd5e7bSunny Goyal // TODO b/33553066 use the constant defined in MaskableIconDrawable 2196ac68a481ce5b794b5227e09ace7c30d6dd5e7bSunny Goyal private static final float LEGACY_ICON_SCALE = .7f * .6667f; 229cb48d4a3896c86e347565646086ab4ef726d60cHyunyoung Song private float mScaleX, mScaleY; 2396ac68a481ce5b794b5227e09ace7c30d6dd5e7bSunny Goyal 2496ac68a481ce5b794b5227e09ace7c30d6dd5e7bSunny Goyal public FixedScaleDrawable() { 2596ac68a481ce5b794b5227e09ace7c30d6dd5e7bSunny Goyal super(new ColorDrawable()); 269cb48d4a3896c86e347565646086ab4ef726d60cHyunyoung Song mScaleX = LEGACY_ICON_SCALE; 279cb48d4a3896c86e347565646086ab4ef726d60cHyunyoung Song mScaleY = LEGACY_ICON_SCALE; 2896ac68a481ce5b794b5227e09ace7c30d6dd5e7bSunny Goyal } 2996ac68a481ce5b794b5227e09ace7c30d6dd5e7bSunny Goyal 3096ac68a481ce5b794b5227e09ace7c30d6dd5e7bSunny Goyal @Override 3196ac68a481ce5b794b5227e09ace7c30d6dd5e7bSunny Goyal public void draw(Canvas canvas) { 3296ac68a481ce5b794b5227e09ace7c30d6dd5e7bSunny Goyal int saveCount = canvas.save(Canvas.MATRIX_SAVE_FLAG); 339cb48d4a3896c86e347565646086ab4ef726d60cHyunyoung Song canvas.scale(mScaleX, mScaleY, 3496ac68a481ce5b794b5227e09ace7c30d6dd5e7bSunny Goyal getBounds().exactCenterX(), getBounds().exactCenterY()); 3596ac68a481ce5b794b5227e09ace7c30d6dd5e7bSunny Goyal super.draw(canvas); 3696ac68a481ce5b794b5227e09ace7c30d6dd5e7bSunny Goyal canvas.restoreToCount(saveCount); 3796ac68a481ce5b794b5227e09ace7c30d6dd5e7bSunny Goyal } 3896ac68a481ce5b794b5227e09ace7c30d6dd5e7bSunny Goyal 3996ac68a481ce5b794b5227e09ace7c30d6dd5e7bSunny Goyal @Override 4096ac68a481ce5b794b5227e09ace7c30d6dd5e7bSunny Goyal public void inflate(Resources r, XmlPullParser parser, AttributeSet attrs) { } 4196ac68a481ce5b794b5227e09ace7c30d6dd5e7bSunny Goyal 4296ac68a481ce5b794b5227e09ace7c30d6dd5e7bSunny Goyal @Override 4396ac68a481ce5b794b5227e09ace7c30d6dd5e7bSunny Goyal public void inflate(Resources r, XmlPullParser parser, AttributeSet attrs, Theme theme) { } 44c1cf75716b21003d334eb3e43a07aecfd0d3a017Hyunyoung Song 45c1cf75716b21003d334eb3e43a07aecfd0d3a017Hyunyoung Song public void setScale(float scale) { 469cb48d4a3896c86e347565646086ab4ef726d60cHyunyoung Song float h = getIntrinsicHeight(); 479cb48d4a3896c86e347565646086ab4ef726d60cHyunyoung Song float w = getIntrinsicWidth(); 489cb48d4a3896c86e347565646086ab4ef726d60cHyunyoung Song mScaleX = scale * LEGACY_ICON_SCALE; 499cb48d4a3896c86e347565646086ab4ef726d60cHyunyoung Song mScaleY = scale * LEGACY_ICON_SCALE; 509cb48d4a3896c86e347565646086ab4ef726d60cHyunyoung Song if (h > w && w > 0) { 519cb48d4a3896c86e347565646086ab4ef726d60cHyunyoung Song mScaleX *= w / h; 529cb48d4a3896c86e347565646086ab4ef726d60cHyunyoung Song } else if (w > h && h > 0) { 539cb48d4a3896c86e347565646086ab4ef726d60cHyunyoung Song mScaleY *= h / w; 549cb48d4a3896c86e347565646086ab4ef726d60cHyunyoung Song } 55c1cf75716b21003d334eb3e43a07aecfd0d3a017Hyunyoung Song } 5696ac68a481ce5b794b5227e09ace7c30d6dd5e7bSunny Goyal} 57