summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRomain Guy <romainguy@google.com>2011-03-29 18:31:08 -0700
committerRomain Guy <romainguy@google.com>2011-03-29 18:31:08 -0700
commit2660a3ec8564918a243b1b02e3652c514bc93bfc (patch)
tree24bb16d9549b0c9a2997b0573c41c13875126b4c
parent60355780eaa7d80a76a5481ab033606bcfb630fd (diff)
downloadframeworks_base-2660a3ec8564918a243b1b02e3652c514bc93bfc.zip
frameworks_base-2660a3ec8564918a243b1b02e3652c514bc93bfc.tar.gz
frameworks_base-2660a3ec8564918a243b1b02e3652c514bc93bfc.tar.bz2
Move the drawable state to the correct class.
Bug #4170455 The state tracking whether the Paint's shader should be rebuilt was kept in the wrong class. This lead to the Drawable keeping track of the dirty status of the Paint stored in the ConstantState. This of course does not work properly when several drawables are inflated form the same ConstantState. This change fixes the issue by moving the dirty Paint state to the ConstantState class. This is allowed to work because of the single-thread rule enforced by the UI toolkit. Change-Id: I9bb31d8e7335d6bb418470b59ae25d9085d7bd23
-rw-r--r--graphics/java/android/graphics/drawable/BitmapDrawable.java14
1 files changed, 7 insertions, 7 deletions
diff --git a/graphics/java/android/graphics/drawable/BitmapDrawable.java b/graphics/java/android/graphics/drawable/BitmapDrawable.java
index 22fbdf9..a278466 100644
--- a/graphics/java/android/graphics/drawable/BitmapDrawable.java
+++ b/graphics/java/android/graphics/drawable/BitmapDrawable.java
@@ -67,7 +67,6 @@ public class BitmapDrawable extends Drawable {
private final Rect mDstRect = new Rect(); // Gravity.apply() sets this
private boolean mApplyGravity;
- private boolean mRebuildShader;
private boolean mMutated;
// These are scaled to match the target density.
@@ -348,7 +347,7 @@ public class BitmapDrawable extends Drawable {
if (state.mTileModeX != xmode || state.mTileModeY != ymode) {
state.mTileModeX = xmode;
state.mTileModeY = ymode;
- mRebuildShader = true;
+ state.mRebuildShader = true;
invalidateSelf();
}
}
@@ -369,7 +368,7 @@ public class BitmapDrawable extends Drawable {
Bitmap bitmap = mBitmap;
if (bitmap != null) {
final BitmapState state = mBitmapState;
- if (mRebuildShader) {
+ if (state.mRebuildShader) {
Shader.TileMode tmx = state.mTileModeX;
Shader.TileMode tmy = state.mTileModeY;
@@ -380,7 +379,7 @@ public class BitmapDrawable extends Drawable {
tmx == null ? Shader.TileMode.CLAMP : tmx,
tmy == null ? Shader.TileMode.CLAMP : tmy));
}
- mRebuildShader = false;
+ state.mRebuildShader = false;
copyBounds(mDstRect);
}
@@ -424,7 +423,6 @@ public class BitmapDrawable extends Drawable {
public Drawable mutate() {
if (!mMutated && super.mutate() == this) {
mBitmapState = new BitmapState(mBitmapState);
- mRebuildShader = true;
mMutated = true;
}
return this;
@@ -511,6 +509,7 @@ public class BitmapDrawable extends Drawable {
Shader.TileMode mTileModeX = null;
Shader.TileMode mTileModeY = null;
int mTargetDensity = DisplayMetrics.DENSITY_DEFAULT;
+ boolean mRebuildShader;
BitmapState(Bitmap bitmap) {
mBitmap = bitmap;
@@ -524,18 +523,19 @@ public class BitmapDrawable extends Drawable {
mTileModeY = bitmapState.mTileModeY;
mTargetDensity = bitmapState.mTargetDensity;
mPaint = new Paint(bitmapState.mPaint);
+ mRebuildShader = bitmapState.mRebuildShader;
}
@Override
public Drawable newDrawable() {
return new BitmapDrawable(this, null);
}
-
+
@Override
public Drawable newDrawable(Resources res) {
return new BitmapDrawable(this, res);
}
-
+
@Override
public int getChangingConfigurations() {
return mChangingConfigurations;