summaryrefslogtreecommitdiffstats
path: root/graphics
diff options
context:
space:
mode:
authorRomain Guy <romainguy@google.com>2011-03-24 14:05:06 -0700
committerRomain Guy <romainguy@google.com>2011-03-24 14:05:06 -0700
commitee0c116ab2bd5acdfe50db36441cf4784d3a10b4 (patch)
tree61afdd0c741bfc6768cb7bab19d38662337fad76 /graphics
parentc5a43a249baad41acede2ab132d797c342c321e7 (diff)
downloadframeworks_base-ee0c116ab2bd5acdfe50db36441cf4784d3a10b4.zip
frameworks_base-ee0c116ab2bd5acdfe50db36441cf4784d3a10b4.tar.gz
frameworks_base-ee0c116ab2bd5acdfe50db36441cf4784d3a10b4.tar.bz2
Always apply the tile mode.
Bug #4170455 Change-Id: Id537a226a0b59bfa65b54bcea062aa5bf1a730b8
Diffstat (limited to 'graphics')
-rw-r--r--graphics/java/android/graphics/drawable/BitmapDrawable.java80
1 files changed, 70 insertions, 10 deletions
diff --git a/graphics/java/android/graphics/drawable/BitmapDrawable.java b/graphics/java/android/graphics/drawable/BitmapDrawable.java
index 2c09ddc..22fbdf9 100644
--- a/graphics/java/android/graphics/drawable/BitmapDrawable.java
+++ b/graphics/java/android/graphics/drawable/BitmapDrawable.java
@@ -88,6 +88,7 @@ public class BitmapDrawable extends Drawable {
* Create an empty drawable, setting initial target density based on
* the display metrics of the resources.
*/
+ @SuppressWarnings({"UnusedParameters"})
public BitmapDrawable(Resources res) {
mBitmapState = new BitmapState((Bitmap) null);
mBitmapState.mTargetDensity = mTargetDensity;
@@ -128,6 +129,7 @@ public class BitmapDrawable extends Drawable {
/**
* Create a drawable by opening a given file path and decoding the bitmap.
*/
+ @SuppressWarnings({"UnusedParameters"})
public BitmapDrawable(Resources res, String filepath) {
this(new BitmapState(BitmapFactory.decodeFile(filepath)), null);
mBitmapState.mTargetDensity = mTargetDensity;
@@ -152,6 +154,7 @@ public class BitmapDrawable extends Drawable {
/**
* Create a drawable by decoding a bitmap from the given input stream.
*/
+ @SuppressWarnings({"UnusedParameters"})
public BitmapDrawable(Resources res, java.io.InputStream is) {
this(new BitmapState(BitmapFactory.decodeStream(is)), null);
mBitmapState.mTargetDensity = mTargetDensity;
@@ -160,10 +163,16 @@ public class BitmapDrawable extends Drawable {
}
}
+ /**
+ * Returns the paint used to render this drawable.
+ */
public final Paint getPaint() {
return mBitmapState.mPaint;
}
-
+
+ /**
+ * Returns the bitmap used by this drawable to render. May be null.
+ */
public final Bitmap getBitmap() {
return mBitmap;
}
@@ -249,6 +258,12 @@ public class BitmapDrawable extends Drawable {
}
}
+ /**
+ * Enables or disables anti-aliasing for this drawable. Anti-aliasing affects
+ * the edges of the bitmap only so it applies only when the drawable is rotated.
+ *
+ * @param aa True if the bitmap should be anti-aliased, false otherwise.
+ */
public void setAntiAlias(boolean aa) {
mBitmapState.mPaint.setAntiAlias(aa);
invalidateSelf();
@@ -266,26 +281,71 @@ public class BitmapDrawable extends Drawable {
invalidateSelf();
}
+ /**
+ * Indicates the repeat behavior of this drawable on the X axis.
+ *
+ * @return {@link Shader.TileMode#CLAMP} if the bitmap does not repeat,
+ * {@link Shader.TileMode#REPEAT} or {@link Shader.TileMode#MIRROR} otherwise.
+ */
public Shader.TileMode getTileModeX() {
return mBitmapState.mTileModeX;
}
+ /**
+ * Indicates the repeat behavior of this drawable on the Y axis.
+ *
+ * @return {@link Shader.TileMode#CLAMP} if the bitmap does not repeat,
+ * {@link Shader.TileMode#REPEAT} or {@link Shader.TileMode#MIRROR} otherwise.
+ */
public Shader.TileMode getTileModeY() {
return mBitmapState.mTileModeY;
}
+ /**
+ * Sets the repeat behavior of this drawable on the X axis. By default, the drawable
+ * does not repeat its bitmap. Using {@link Shader.TileMode#REPEAT} or
+ * {@link Shader.TileMode#MIRROR} the bitmap can be repeated (or tiled) if the bitmap
+ * is smaller than this drawable.
+ *
+ * @param mode The repeat mode for this drawable.
+ *
+ * @see #setTileModeY(android.graphics.Shader.TileMode)
+ * @see #setTileModeXY(android.graphics.Shader.TileMode, android.graphics.Shader.TileMode)
+ */
public void setTileModeX(Shader.TileMode mode) {
setTileModeXY(mode, mBitmapState.mTileModeY);
}
+ /**
+ * Sets the repeat behavior of this drawable on the Y axis. By default, the drawable
+ * does not repeat its bitmap. Using {@link Shader.TileMode#REPEAT} or
+ * {@link Shader.TileMode#MIRROR} the bitmap can be repeated (or tiled) if the bitmap
+ * is smaller than this drawable.
+ *
+ * @param mode The repeat mode for this drawable.
+ *
+ * @see #setTileModeX(android.graphics.Shader.TileMode)
+ * @see #setTileModeXY(android.graphics.Shader.TileMode, android.graphics.Shader.TileMode)
+ */
public final void setTileModeY(Shader.TileMode mode) {
setTileModeXY(mBitmapState.mTileModeX, mode);
}
+ /**
+ * Sets the repeat behavior of this drawable on both axis. By default, the drawable
+ * does not repeat its bitmap. Using {@link Shader.TileMode#REPEAT} or
+ * {@link Shader.TileMode#MIRROR} the bitmap can be repeated (or tiled) if the bitmap
+ * is smaller than this drawable.
+ *
+ * @param xmode The X repeat mode for this drawable.
+ * @param ymode The Y repeat mode for this drawable.
+ *
+ * @see #setTileModeX(android.graphics.Shader.TileMode)
+ * @see #setTileModeY(android.graphics.Shader.TileMode)
+ */
public void setTileModeXY(Shader.TileMode xmode, Shader.TileMode ymode) {
final BitmapState state = mBitmapState;
- if (state.mPaint.getShader() == null ||
- state.mTileModeX != xmode || state.mTileModeY != ymode) {
+ if (state.mTileModeX != xmode || state.mTileModeY != ymode) {
state.mTileModeX = xmode;
state.mTileModeY = ymode;
mRebuildShader = true;
@@ -316,10 +376,9 @@ public class BitmapDrawable extends Drawable {
if (tmx == null && tmy == null) {
state.mPaint.setShader(null);
} else {
- Shader s = new BitmapShader(bitmap,
+ state.mPaint.setShader(new BitmapShader(bitmap,
tmx == null ? Shader.TileMode.CLAMP : tmx,
- tmy == null ? Shader.TileMode.CLAMP : tmy);
- state.mPaint.setShader(s);
+ tmy == null ? Shader.TileMode.CLAMP : tmy));
}
mRebuildShader = false;
copyBounds(mDstRect);
@@ -335,7 +394,7 @@ public class BitmapDrawable extends Drawable {
canvas.drawBitmap(bitmap, null, mDstRect, state.mPaint);
} else {
if (mApplyGravity) {
- mDstRect.set(getBounds());
+ copyBounds(mDstRect);
mApplyGravity = false;
}
canvas.drawRect(mDstRect, state.mPaint);
@@ -365,6 +424,7 @@ public class BitmapDrawable extends Drawable {
public Drawable mutate() {
if (!mMutated && super.mutate() == this) {
mBitmapState = new BitmapState(mBitmapState);
+ mRebuildShader = true;
mMutated = true;
}
return this;
@@ -448,8 +508,8 @@ public class BitmapDrawable extends Drawable {
int mChangingConfigurations;
int mGravity = Gravity.FILL;
Paint mPaint = new Paint(DEFAULT_PAINT_FLAGS);
- Shader.TileMode mTileModeX;
- Shader.TileMode mTileModeY;
+ Shader.TileMode mTileModeX = null;
+ Shader.TileMode mTileModeY = null;
int mTargetDensity = DisplayMetrics.DENSITY_DEFAULT;
BitmapState(Bitmap bitmap) {
@@ -491,6 +551,6 @@ public class BitmapDrawable extends Drawable {
} else {
mTargetDensity = DisplayMetrics.DENSITY_DEFAULT;
}
- setBitmap(state.mBitmap);
+ setBitmap(state != null ? state.mBitmap : null);
}
}