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