From 2660a3ec8564918a243b1b02e3652c514bc93bfc Mon Sep 17 00:00:00 2001 From: Romain Guy Date: Tue, 29 Mar 2011 18:31:08 -0700 Subject: 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 --- .../java/android/graphics/drawable/BitmapDrawable.java | 14 +++++++------- 1 file 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; -- cgit v1.1