diff options
author | Romain Guy <romainguy@google.com> | 2011-03-29 18:31:08 -0700 |
---|---|---|
committer | Romain Guy <romainguy@google.com> | 2011-03-29 18:31:08 -0700 |
commit | 2660a3ec8564918a243b1b02e3652c514bc93bfc (patch) | |
tree | 24bb16d9549b0c9a2997b0573c41c13875126b4c | |
parent | 60355780eaa7d80a76a5481ab033606bcfb630fd (diff) | |
download | frameworks_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.java | 14 |
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; |