aboutsummaryrefslogtreecommitdiff
path: root/library
diff options
context:
space:
mode:
authorSam Judd <judds@google.com>2014-10-20 10:18:21 -0700
committerSam Judd <judds@google.com>2014-10-20 10:32:03 -0700
commit38ced22f14acd14b69bb102605505d1feb04b46b (patch)
tree012a55363edf85f7a5c7bf11f4587c13d3b4e4a0 /library
parent3ea7f151576f197df4bd6c3cce46f229cc281698 (diff)
downloadglide-38ced22f14acd14b69bb102605505d1feb04b46b.tar.gz
Apply gravity in GifDrawable.
Fixes #206
Diffstat (limited to 'library')
-rw-r--r--library/src/androidTest/java/com/bumptech/glide/load/resource/gif/GifDrawableTest.java24
-rw-r--r--library/src/main/java/com/bumptech/glide/load/resource/gif/GifDrawable.java20
2 files changed, 35 insertions, 9 deletions
diff --git a/library/src/androidTest/java/com/bumptech/glide/load/resource/gif/GifDrawableTest.java b/library/src/androidTest/java/com/bumptech/glide/load/resource/gif/GifDrawableTest.java
index c7378927..20b1998e 100644
--- a/library/src/androidTest/java/com/bumptech/glide/load/resource/gif/GifDrawableTest.java
+++ b/library/src/androidTest/java/com/bumptech/glide/load/resource/gif/GifDrawableTest.java
@@ -4,6 +4,7 @@ import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.PixelFormat;
+import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import com.bumptech.glide.gifdecoder.GifDecoder;
import com.bumptech.glide.gifdecoder.GifHeader;
@@ -23,7 +24,6 @@ import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.eq;
import static org.mockito.Matchers.isNull;
import static org.mockito.Mockito.mock;
@@ -60,7 +60,7 @@ public class GifDrawableTest {
Canvas canvas = mock(Canvas.class);
drawable.draw(canvas);
- verify(canvas).drawBitmap(eq(firstFrame), anyInt(), anyInt(), any(Paint.class));
+ verify(canvas).drawBitmap(eq(firstFrame), anyRect(), anyRect(), anyPaint());
}
@Test
@@ -71,8 +71,8 @@ public class GifDrawableTest {
when(frameManager.getCurrentFrame()).thenReturn(null);
drawable.draw(canvas);
- verify(canvas).drawBitmap(eq(firstFrame), anyInt(), anyInt(), any(Paint.class));
- verify(canvas, never()).drawBitmap((Bitmap) isNull(), anyInt(), anyInt(), any(Paint.class));
+ verify(canvas).drawBitmap(eq(firstFrame), anyRect(), anyRect(), anyPaint());
+ verify(canvas, never()).drawBitmap((Bitmap) isNull(), anyRect(), anyRect(), anyPaint());
}
@Test
@@ -80,7 +80,7 @@ public class GifDrawableTest {
drawable = new GifDrawable(gifDecoder, frameManager, null, bitmapPool);
Canvas canvas = mock(Canvas.class);
- verify(canvas, never()).drawBitmap(any(Bitmap.class), anyInt(), anyInt(), any(Paint.class));
+ verify(canvas, never()).drawBitmap(any(Bitmap.class), anyRect(), anyRect(), anyPaint());
}
@Test
@@ -90,8 +90,8 @@ public class GifDrawableTest {
when(frameManager.getCurrentFrame()).thenReturn(currentFrame);
drawable.draw(canvas);
- verify(canvas).drawBitmap(eq(currentFrame), anyInt(), anyInt(), any(Paint.class));
- verify(canvas, never()).drawBitmap(eq(firstFrame), anyInt(), anyInt(), any(Paint.class));
+ verify(canvas).drawBitmap(eq(currentFrame), anyRect(), anyRect(), anyPaint());
+ verify(canvas, never()).drawBitmap(eq(firstFrame), anyRect(), anyRect(), anyPaint());
}
@Test
@@ -459,7 +459,15 @@ public class GifDrawableTest {
drawable.recycle();
Canvas canvas = mock(Canvas.class);
drawable.draw(canvas);
- verify(canvas, never()).drawBitmap(any(Bitmap.class), anyInt(), anyInt(), any(Paint.class));
+ verify(canvas, never()).drawBitmap(any(Bitmap.class), anyRect(), anyRect(), anyPaint());
+ }
+
+ private static Paint anyPaint() {
+ return any(Paint.class);
+ }
+
+ private static Rect anyRect() {
+ return any(Rect.class);
}
private void runLoops(int loopCount, int frameCount) {
diff --git a/library/src/main/java/com/bumptech/glide/load/resource/gif/GifDrawable.java b/library/src/main/java/com/bumptech/glide/load/resource/gif/GifDrawable.java
index 0f2e649e..1ed836c0 100644
--- a/library/src/main/java/com/bumptech/glide/load/resource/gif/GifDrawable.java
+++ b/library/src/main/java/com/bumptech/glide/load/resource/gif/GifDrawable.java
@@ -8,9 +8,11 @@ import android.graphics.Canvas;
import android.graphics.ColorFilter;
import android.graphics.Paint;
import android.graphics.PixelFormat;
+import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.os.Build;
+import android.view.Gravity;
import com.bumptech.glide.gifdecoder.GifDecoder;
import com.bumptech.glide.gifdecoder.GifHeader;
import com.bumptech.glide.load.Transformation;
@@ -22,6 +24,7 @@ import com.bumptech.glide.load.resource.drawable.GlideDrawable;
*/
public class GifDrawable extends GlideDrawable implements GifFrameManager.FrameCallback {
private final Paint paint = new Paint();
+ private final Rect destRect = new Rect();
private final GifFrameManager frameManager;
private final GifState state;
private final GifDecoder decoder;
@@ -43,6 +46,8 @@ public class GifDrawable extends GlideDrawable implements GifFrameManager.FrameC
/** The number of times to loop through the gif animation. */
private int maxLoopCount = LOOP_FOREVER;
+ private boolean applyGravity;
+
/**
* Constructor for GifDrawable.
*
@@ -178,13 +183,25 @@ public class GifDrawable extends GlideDrawable implements GifFrameManager.FrameC
}
@Override
+ protected void onBoundsChange(Rect bounds) {
+ super.onBoundsChange(bounds);
+ applyGravity = true;
+ }
+
+ @Override
public void draw(Canvas canvas) {
if (isRecycled) {
return;
}
+
+ if (applyGravity) {
+ Gravity.apply(GifState.GRAVITY, getIntrinsicWidth(), getIntrinsicHeight(), getBounds(), destRect);
+ applyGravity = false;
+ }
+
Bitmap currentFrame = frameManager.getCurrentFrame();
Bitmap toDraw = currentFrame != null ? currentFrame : state.firstFrame;
- canvas.drawBitmap(toDraw, 0, 0, paint);
+ canvas.drawBitmap(toDraw, null, destRect, paint);
}
@Override
@@ -266,6 +283,7 @@ public class GifDrawable extends GlideDrawable implements GifFrameManager.FrameC
}
static class GifState extends ConstantState {
+ private static final int GRAVITY = Gravity.FILL;
String id;
GifHeader gifHeader;
byte[] data;