summaryrefslogtreecommitdiff
path: root/graphics/java/android/graphics/drawable/NinePatchDrawable.java
diff options
context:
space:
mode:
Diffstat (limited to 'graphics/java/android/graphics/drawable/NinePatchDrawable.java')
-rw-r--r--graphics/java/android/graphics/drawable/NinePatchDrawable.java54
1 files changed, 34 insertions, 20 deletions
diff --git a/graphics/java/android/graphics/drawable/NinePatchDrawable.java b/graphics/java/android/graphics/drawable/NinePatchDrawable.java
index c98ef5ba7521..3ded37b8a80e 100644
--- a/graphics/java/android/graphics/drawable/NinePatchDrawable.java
+++ b/graphics/java/android/graphics/drawable/NinePatchDrawable.java
@@ -26,9 +26,13 @@ import android.graphics.*;
*
*/
public class NinePatchDrawable extends Drawable {
+ private NinePatchState mNinePatchState;
+ private NinePatch mNinePatch;
+ private Rect mPadding;
+ private Paint mPaint;
+ private boolean mMutated;
- public NinePatchDrawable(Bitmap bitmap, byte[] chunk,
- Rect padding, String srcName) {
+ public NinePatchDrawable(Bitmap bitmap, byte[] chunk, Rect padding, String srcName) {
this(new NinePatchState(new NinePatch(bitmap, chunk, srcName), padding));
}
@@ -45,8 +49,7 @@ public class NinePatchDrawable extends Drawable {
@Override
public int getChangingConfigurations() {
- return super.getChangingConfigurations()
- | mNinePatchState.mChangingConfigurations;
+ return super.getChangingConfigurations() | mNinePatchState.mChangingConfigurations;
}
@Override
@@ -104,12 +107,13 @@ public class NinePatchDrawable extends Drawable {
}
/**
- * Returns a {@link android.graphics.PixelFormat graphics.PixelFormat} value of OPAQUE or TRANSLUCENT.
+ * Returns a {@link android.graphics.PixelFormat graphics.PixelFormat}
+ * value of OPAQUE or TRANSLUCENT.
*/
@Override
public int getOpacity() {
- return mNinePatch.hasAlpha() || (mPaint != null && mPaint.getAlpha() < 255)
- ? PixelFormat.TRANSLUCENT : PixelFormat.OPAQUE;
+ return mNinePatch.hasAlpha() || (mPaint != null && mPaint.getAlpha() < 255) ?
+ PixelFormat.TRANSLUCENT : PixelFormat.OPAQUE;
}
@Override
@@ -123,16 +127,35 @@ public class NinePatchDrawable extends Drawable {
return mNinePatchState;
}
+ @Override
+ public Drawable mutate() {
+ if (!mMutated && super.mutate() == this) {
+ mNinePatchState = new NinePatchState(mNinePatchState);
+ mNinePatch = mNinePatchState.mNinePatch;
+ mPadding = mNinePatchState.mPadding;
+ mMutated = true;
+ }
+ return this;
+ }
+
final static class NinePatchState extends ConstantState {
- NinePatchState(NinePatch ninePatch, Rect padding)
- {
+ final NinePatch mNinePatch;
+ final Rect mPadding;
+ int mChangingConfigurations;
+
+ NinePatchState(NinePatch ninePatch, Rect padding) {
mNinePatch = ninePatch;
mPadding = padding;
}
+ NinePatchState(NinePatchState state) {
+ mNinePatch = new NinePatch(state.mNinePatch);
+ mPadding = new Rect(state.mPadding);
+ mChangingConfigurations = state.mChangingConfigurations;
+ }
+
@Override
- public Drawable newDrawable()
- {
+ public Drawable newDrawable() {
return new NinePatchDrawable(this);
}
@@ -140,10 +163,6 @@ public class NinePatchDrawable extends Drawable {
public int getChangingConfigurations() {
return mChangingConfigurations;
}
-
- final NinePatch mNinePatch;
- final Rect mPadding;
- int mChangingConfigurations;
}
private NinePatchDrawable(NinePatchState state) {
@@ -151,10 +170,5 @@ public class NinePatchDrawable extends Drawable {
mNinePatch = state.mNinePatch;
mPadding = state.mPadding;
}
-
- private final NinePatchState mNinePatchState;
- private final NinePatch mNinePatch;
- private final Rect mPadding;
- private Paint mPaint;
}