FastBitmapDrawable.java revision 6e1c0d34bb31cacc24c57c89ab01deaa8985814f
131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project/*
231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project *
431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * you may not use this file except in compliance with the License.
631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * You may obtain a copy of the License at
731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project *
831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project *
1031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
1131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
1231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * See the License for the specific language governing permissions and
1431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * limitations under the License.
1531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project */
1631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
17325dc23624160689e59fbac708cf6f222b20d025Daniel Sandlerpackage com.android.launcher3;
1831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
1931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectimport android.graphics.Bitmap;
2031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectimport android.graphics.Canvas;
2131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectimport android.graphics.ColorFilter;
2245e1d6ec0a213a444d01466c3d4f1ded5508ed63Winson Chungimport android.graphics.Paint;
2345e1d6ec0a213a444d01466c3d4f1ded5508ed63Winson Chungimport android.graphics.PixelFormat;
2445e1d6ec0a213a444d01466c3d4f1ded5508ed63Winson Chungimport android.graphics.Rect;
2545e1d6ec0a213a444d01466c3d4f1ded5508ed63Winson Chungimport android.graphics.drawable.Drawable;
2631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
2731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectclass FastBitmapDrawable extends Drawable {
2831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    private Bitmap mBitmap;
2929d6fea296ebecb607525c8245a54696ad7c5db7Winson Chung    private int mAlpha;
30a28fd3fa7c82947d847c05ed11905f556b8dcfa2Romain Guy    private int mWidth;
31a28fd3fa7c82947d847c05ed11905f556b8dcfa2Romain Guy    private int mHeight;
32eecf02da58adef5486bf0c9ff7127ea891f457a4Winson Chung    private final Paint mPaint = new Paint(Paint.FILTER_BITMAP_FLAG);
3331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
3431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    FastBitmapDrawable(Bitmap b) {
3529d6fea296ebecb607525c8245a54696ad7c5db7Winson Chung	mAlpha = 255;
3631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        mBitmap = b;
37a28fd3fa7c82947d847c05ed11905f556b8dcfa2Romain Guy        if (b != null) {
38a28fd3fa7c82947d847c05ed11905f556b8dcfa2Romain Guy            mWidth = mBitmap.getWidth();
39a28fd3fa7c82947d847c05ed11905f556b8dcfa2Romain Guy            mHeight = mBitmap.getHeight();
40a28fd3fa7c82947d847c05ed11905f556b8dcfa2Romain Guy        } else {
41a28fd3fa7c82947d847c05ed11905f556b8dcfa2Romain Guy            mWidth = mHeight = 0;
42a28fd3fa7c82947d847c05ed11905f556b8dcfa2Romain Guy        }
4331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    }
4431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
4531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    @Override
4631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    public void draw(Canvas canvas) {
4745e1d6ec0a213a444d01466c3d4f1ded5508ed63Winson Chung        final Rect r = getBounds();
488a196351ef7e100857e6c6d5b344d1d780584887Winson Chung        // Draw the bitmap into the bounding rect
498a196351ef7e100857e6c6d5b344d1d780584887Winson Chung        canvas.drawBitmap(mBitmap, null, r, mPaint);
5031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    }
5131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
5231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    @Override
53badf71e11fba2d6efa1d1bcca9542001f90a3777Adam Cohen    public void setColorFilter(ColorFilter cf) {
54badf71e11fba2d6efa1d1bcca9542001f90a3777Adam Cohen        mPaint.setColorFilter(cf);
55badf71e11fba2d6efa1d1bcca9542001f90a3777Adam Cohen    }
56badf71e11fba2d6efa1d1bcca9542001f90a3777Adam Cohen
57badf71e11fba2d6efa1d1bcca9542001f90a3777Adam Cohen    @Override
5831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    public int getOpacity() {
5931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        return PixelFormat.TRANSLUCENT;
6031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    }
6131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
6231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    @Override
6331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    public void setAlpha(int alpha) {
6429d6fea296ebecb607525c8245a54696ad7c5db7Winson Chung        mAlpha = alpha;
65b3347bb9f4ccf41fb7043bca66c3a565bde1083bWinson Chung        mPaint.setAlpha(alpha);
6631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    }
6731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
6876fc085d28178a5d4fb3787ede956281a2cc3179Adam Cohen    public void setFilterBitmap(boolean filterBitmap) {
6976fc085d28178a5d4fb3787ede956281a2cc3179Adam Cohen        mPaint.setFilterBitmap(filterBitmap);
706e1c0d34bb31cacc24c57c89ab01deaa8985814fWinson Chung        mPaint.setAntiAlias(filterBitmap);
7176fc085d28178a5d4fb3787ede956281a2cc3179Adam Cohen    }
7276fc085d28178a5d4fb3787ede956281a2cc3179Adam Cohen
7329d6fea296ebecb607525c8245a54696ad7c5db7Winson Chung    public int getAlpha() {
7429d6fea296ebecb607525c8245a54696ad7c5db7Winson Chung        return mAlpha;
7529d6fea296ebecb607525c8245a54696ad7c5db7Winson Chung    }
7629d6fea296ebecb607525c8245a54696ad7c5db7Winson Chung
7731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    @Override
7831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    public int getIntrinsicWidth() {
79a28fd3fa7c82947d847c05ed11905f556b8dcfa2Romain Guy        return mWidth;
8031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    }
8131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
8231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    @Override
8331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    public int getIntrinsicHeight() {
84a28fd3fa7c82947d847c05ed11905f556b8dcfa2Romain Guy        return mHeight;
8531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    }
8631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
8731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    @Override
8831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    public int getMinimumWidth() {
89a28fd3fa7c82947d847c05ed11905f556b8dcfa2Romain Guy        return mWidth;
9031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    }
9131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
9231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    @Override
9331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    public int getMinimumHeight() {
94a28fd3fa7c82947d847c05ed11905f556b8dcfa2Romain Guy        return mHeight;
9531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    }
9631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
970589f0f66ce498512c6ee47482c649d88294c9d0Joe Onorato    public void setBitmap(Bitmap b) {
980589f0f66ce498512c6ee47482c649d88294c9d0Joe Onorato        mBitmap = b;
99a28fd3fa7c82947d847c05ed11905f556b8dcfa2Romain Guy        if (b != null) {
100a28fd3fa7c82947d847c05ed11905f556b8dcfa2Romain Guy            mWidth = mBitmap.getWidth();
101a28fd3fa7c82947d847c05ed11905f556b8dcfa2Romain Guy            mHeight = mBitmap.getHeight();
102a28fd3fa7c82947d847c05ed11905f556b8dcfa2Romain Guy        } else {
103a28fd3fa7c82947d847c05ed11905f556b8dcfa2Romain Guy            mWidth = mHeight = 0;
104a28fd3fa7c82947d847c05ed11905f556b8dcfa2Romain Guy        }
1050589f0f66ce498512c6ee47482c649d88294c9d0Joe Onorato    }
1060589f0f66ce498512c6ee47482c649d88294c9d0Joe Onorato
10731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    public Bitmap getBitmap() {
10831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        return mBitmap;
10931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    }
11031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project}
111