From b91024c19c7c3182d926a199ad257b14513bb359 Mon Sep 17 00:00:00 2001 From: Dianne Hackborn Date: Wed, 23 Sep 2009 11:27:06 -0700 Subject: [PATCH] Fix #2101821: Cut labels of menu items in "SnapTell" market app. Ummmm... this turns out to be pretty bad. NinePatchDrawable was not scaling its reported padding for compatibility mode, causing spacing to be off. All over the place. This change should improve things quite a bit (and magically makes nearly all of the menu flaws go away). --- .../graphics/drawable/NinePatchDrawable.java | 26 ++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/graphics/java/android/graphics/drawable/NinePatchDrawable.java b/graphics/java/android/graphics/drawable/NinePatchDrawable.java index d5c8a089b5e0a..e182c1c33974d 100644 --- a/graphics/java/android/graphics/drawable/NinePatchDrawable.java +++ b/graphics/java/android/graphics/drawable/NinePatchDrawable.java @@ -152,10 +152,24 @@ public class NinePatchDrawable extends Drawable { private void computeBitmapSize() { final int sdensity = mNinePatch.getDensity(); final int tdensity = mTargetDensity; - mBitmapWidth = Bitmap.scaleFromDensity(mNinePatch.getWidth(), - sdensity, tdensity); - mBitmapHeight = Bitmap.scaleFromDensity(mNinePatch.getHeight(), - sdensity, tdensity); + if (sdensity == tdensity) { + mBitmapWidth = mNinePatch.getWidth(); + mBitmapHeight = mNinePatch.getHeight(); + } else { + mBitmapWidth = Bitmap.scaleFromDensity(mNinePatch.getWidth(), + sdensity, tdensity); + mBitmapHeight = Bitmap.scaleFromDensity(mNinePatch.getHeight(), + sdensity, tdensity); + Rect dest = mPadding; + Rect src = mNinePatchState.mPadding; + if (dest == src) { + mPadding = dest = new Rect(src); + } + dest.left = Bitmap.scaleFromDensity(src.left, sdensity, tdensity); + dest.top = Bitmap.scaleFromDensity(src.top, sdensity, tdensity); + dest.right = Bitmap.scaleFromDensity(src.right, sdensity, tdensity); + dest.bottom = Bitmap.scaleFromDensity(src.bottom, sdensity, tdensity); + } } // overrides @@ -301,7 +315,6 @@ public class NinePatchDrawable extends Drawable { if (!mMutated && super.mutate() == this) { mNinePatchState = new NinePatchState(mNinePatchState); mNinePatch = mNinePatchState.mNinePatch; - mPadding = mNinePatchState.mPadding; mMutated = true; } return this; @@ -326,7 +339,8 @@ public class NinePatchDrawable extends Drawable { NinePatchState(NinePatchState state) { mNinePatch = new NinePatch(state.mNinePatch); - mPadding = new Rect(state.mPadding); + // Note we don't copy the padding because it is immutable. + mPadding = state.mPadding; mDither = state.mDither; mChangingConfigurations = state.mChangingConfigurations; mTargetDensity = state.mTargetDensity;