Skip to content

Commit 12f7b70

Browse files
committed
Merge pull request square#400 from square/dimitris/extend
Make PicassoDrawable extend BitmapDrawable instead.
2 parents 8d6d9ad + 18c8427 commit 12f7b70

File tree

2 files changed

+19
-42
lines changed

2 files changed

+19
-42
lines changed

picasso/src/main/java/com/squareup/picasso/PicassoDrawable.java

Lines changed: 13 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
package com.squareup.picasso;
1717

1818
import android.content.Context;
19-
import android.content.res.Resources;
2019
import android.graphics.Bitmap;
2120
import android.graphics.Canvas;
2221
import android.graphics.ColorFilter;
@@ -33,10 +32,9 @@
3332
import static android.graphics.Color.WHITE;
3433
import static com.squareup.picasso.Picasso.LoadedFrom.MEMORY;
3534

36-
final class PicassoDrawable extends Drawable {
35+
final class PicassoDrawable extends BitmapDrawable {
3736
// Only accessed from main thread.
3837
private static final Paint DEBUG_PAINT = new Paint();
39-
4038
private static final float FADE_DURATION = 200f; //ms
4139

4240
/**
@@ -50,7 +48,7 @@ static void setBitmap(ImageView target, Context context, Bitmap bitmap,
5048
((AnimationDrawable) placeholder).stop();
5149
}
5250
PicassoDrawable drawable =
53-
new PicassoDrawable(context, placeholder, bitmap, loadedFrom, noFade, debugging);
51+
new PicassoDrawable(context, bitmap, placeholder, loadedFrom, noFade, debugging);
5452
target.setImageDrawable(drawable);
5553
}
5654

@@ -72,25 +70,22 @@ static void setPlaceholder(ImageView target, int placeholderResId, Drawable plac
7270
private final boolean debugging;
7371
private final float density;
7472
private final Picasso.LoadedFrom loadedFrom;
75-
final BitmapDrawable image;
7673

7774
Drawable placeholder;
7875

7976
long startTimeMillis;
8077
boolean animating;
8178
int alpha = 0xFF;
8279

83-
PicassoDrawable(Context context, Drawable placeholder, Bitmap bitmap,
80+
PicassoDrawable(Context context, Bitmap bitmap, Drawable placeholder,
8481
Picasso.LoadedFrom loadedFrom, boolean noFade, boolean debugging) {
85-
Resources res = context.getResources();
82+
super(context.getResources(), bitmap);
8683

8784
this.debugging = debugging;
88-
this.density = res.getDisplayMetrics().density;
85+
this.density = context.getResources().getDisplayMetrics().density;
8986

9087
this.loadedFrom = loadedFrom;
9188

92-
this.image = new BitmapDrawable(res, bitmap);
93-
9489
boolean fade = loadedFrom != MEMORY && !noFade;
9590
if (fade) {
9691
this.placeholder = placeholder;
@@ -101,23 +96,22 @@ static void setPlaceholder(ImageView target, int placeholderResId, Drawable plac
10196

10297
@Override public void draw(Canvas canvas) {
10398
if (!animating) {
104-
image.draw(canvas);
99+
super.draw(canvas);
105100
} else {
106101
float normalized = (SystemClock.uptimeMillis() - startTimeMillis) / FADE_DURATION;
107102
if (normalized >= 1f) {
108103
animating = false;
109104
placeholder = null;
110-
image.draw(canvas);
105+
super.draw(canvas);
111106
} else {
112107
if (placeholder != null) {
113108
placeholder.draw(canvas);
114109
}
115110

116111
int partialAlpha = (int) (alpha * normalized);
117-
image.setAlpha(partialAlpha);
118-
image.draw(canvas);
119-
image.setAlpha(alpha);
120-
invalidateSelf();
112+
setAlpha(partialAlpha);
113+
super.draw(canvas);
114+
setAlpha(alpha);
121115
}
122116
}
123117

@@ -126,40 +120,25 @@ static void setPlaceholder(ImageView target, int placeholderResId, Drawable plac
126120
}
127121
}
128122

129-
@Override public int getIntrinsicWidth() {
130-
return image.getIntrinsicWidth();
131-
}
132-
133-
@Override public int getIntrinsicHeight() {
134-
return image.getIntrinsicHeight();
135-
}
136-
137123
@Override public void setAlpha(int alpha) {
138-
this.alpha = alpha;
139124
if (placeholder != null) {
140125
placeholder.setAlpha(alpha);
141126
}
142-
image.setAlpha(alpha);
127+
super.setAlpha(alpha);
143128
}
144129

145130
@Override public void setColorFilter(ColorFilter cf) {
146131
if (placeholder != null) {
147132
placeholder.setColorFilter(cf);
148133
}
149-
image.setColorFilter(cf);
150-
}
151-
152-
@Override public int getOpacity() {
153-
return image.getOpacity();
134+
super.setColorFilter(cf);
154135
}
155136

156137
@Override protected void onBoundsChange(Rect bounds) {
157-
super.onBoundsChange(bounds);
158-
159-
image.setBounds(bounds);
160138
if (placeholder != null) {
161139
placeholder.setBounds(bounds);
162140
}
141+
super.onBoundsChange(bounds);
163142
}
164143

165144
private void drawDebugIndicator(Canvas canvas) {

picasso/src/test/java/com/squareup/picasso/PicassoDrawableTest.java

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
package com.squareup.picasso;
1717

1818
import android.content.Context;
19-
import android.graphics.Bitmap;
2019
import android.graphics.drawable.ColorDrawable;
2120
import android.graphics.drawable.Drawable;
2221
import org.junit.Test;
@@ -25,7 +24,6 @@
2524
import org.robolectric.RobolectricTestRunner;
2625
import org.robolectric.annotation.Config;
2726

28-
import static android.graphics.Bitmap.Config.ARGB_8888;
2927
import static android.graphics.Color.RED;
3028
import static com.squareup.picasso.Picasso.LoadedFrom.DISK;
3129
import static com.squareup.picasso.Picasso.LoadedFrom.MEMORY;
@@ -39,22 +37,22 @@ public class PicassoDrawableTest {
3937
private final Drawable placeholder = new ColorDrawable(RED);
4038

4139
@Test public void createWithNoPlaceholderAnimation() {
42-
PicassoDrawable pd = new PicassoDrawable(context, null, BITMAP_1, DISK, false, false);
43-
assertThat(pd.image.getBitmap()).isSameAs(BITMAP_1);
40+
PicassoDrawable pd = new PicassoDrawable(context, BITMAP_1, null, DISK, false, false);
41+
assertThat(pd.getBitmap()).isSameAs(BITMAP_1);
4442
assertThat(pd.placeholder).isNull();
4543
assertThat(pd.animating).isTrue();
4644
}
4745

4846
@Test public void createWithPlaceholderAnimation() {
49-
PicassoDrawable pd = new PicassoDrawable(context, placeholder, BITMAP_1, DISK, false, false);
50-
assertThat(pd.image.getBitmap()).isSameAs(BITMAP_1);
47+
PicassoDrawable pd = new PicassoDrawable(context, BITMAP_1, placeholder, DISK, false, false);
48+
assertThat(pd.getBitmap()).isSameAs(BITMAP_1);
5149
assertThat(pd.placeholder).isSameAs(placeholder);
5250
assertThat(pd.animating).isTrue();
5351
}
5452

5553
@Test public void createWithBitmapCacheHit() {
56-
PicassoDrawable pd = new PicassoDrawable(context, placeholder, BITMAP_1, MEMORY, false, false);
57-
assertThat(pd.image.getBitmap()).isSameAs(BITMAP_1);
54+
PicassoDrawable pd = new PicassoDrawable(context, BITMAP_1, placeholder, MEMORY, false, false);
55+
assertThat(pd.getBitmap()).isSameAs(BITMAP_1);
5856
assertThat(pd.placeholder).isNull();
5957
assertThat(pd.animating).isFalse();
6058
}

0 commit comments

Comments
 (0)