diff options
author | Dianne Hackborn <hackbod@google.com> | 2009-10-01 11:16:09 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2009-10-01 11:16:09 -0700 |
commit | a085d5e747bd7ff0c68cd104bf20f32275c1c118 (patch) | |
tree | a64e27117cb5fe18b563745d478fa2d182e1b2e0 | |
parent | 3ab151e6d9fced8322b0cac30965973daeb03247 (diff) | |
parent | 0b03fa8b6f1bda3dd3fa7544dd16f88441ea6fad (diff) | |
download | frameworks_base-a085d5e747bd7ff0c68cd104bf20f32275c1c118.zip frameworks_base-a085d5e747bd7ff0c68cd104bf20f32275c1c118.tar.gz frameworks_base-a085d5e747bd7ff0c68cd104bf20f32275c1c118.tar.bz2 |
am 0b03fa8b: am 490d5222: Merge change I6cacaa0d into eclair
Merge commit '0b03fa8b6f1bda3dd3fa7544dd16f88441ea6fad'
* commit '0b03fa8b6f1bda3dd3fa7544dd16f88441ea6fad':
Hack to fix issue #2125365: Sports Trivia compatability with Eclair
-rw-r--r-- | core/java/android/widget/TextView.java | 5 | ||||
-rw-r--r-- | core/jni/android/graphics/Paint.cpp | 10 | ||||
-rw-r--r-- | graphics/java/android/graphics/Paint.java | 126 |
3 files changed, 124 insertions, 17 deletions
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index 37ef153..bf3d26e 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -328,11 +328,16 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener mTextPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG); mTextPaint.density = getResources().getDisplayMetrics().density; + mTextPaint.setCompatibilityScaling( + getResources().getCompatibilityInfo().applicationScale); + // If we get the paint from the skin, we should set it to left, since // the layout always wants it to be left. // mTextPaint.setTextAlign(Paint.Align.LEFT); mHighlightPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + mHighlightPaint.setCompatibilityScaling( + getResources().getCompatibilityInfo().applicationScale); mMovement = getDefaultMovementMethod(); mTransformation = null; diff --git a/core/jni/android/graphics/Paint.cpp b/core/jni/android/graphics/Paint.cpp index 6b7f045..780badc 100644 --- a/core/jni/android/graphics/Paint.cpp +++ b/core/jni/android/graphics/Paint.cpp @@ -569,11 +569,11 @@ static JNINativeMethod methods[] = { {"descent","()F", (void*) SkPaintGlue::descent}, {"getFontMetrics", "(Landroid/graphics/Paint$FontMetrics;)F", (void*)SkPaintGlue::getFontMetrics}, {"getFontMetricsInt", "(Landroid/graphics/Paint$FontMetricsInt;)I", (void*)SkPaintGlue::getFontMetricsInt}, - {"measureText","([CII)F", (void*) SkPaintGlue::measureText_CII}, - {"measureText","(Ljava/lang/String;)F", (void*) SkPaintGlue::measureText_String}, - {"measureText","(Ljava/lang/String;II)F", (void*) SkPaintGlue::measureText_StringII}, - {"breakText","([CIIF[F)I", (void*) SkPaintGlue::breakTextC}, - {"breakText","(Ljava/lang/String;ZF[F)I", (void*) SkPaintGlue::breakTextS}, + {"native_measureText","([CII)F", (void*) SkPaintGlue::measureText_CII}, + {"native_measureText","(Ljava/lang/String;)F", (void*) SkPaintGlue::measureText_String}, + {"native_measureText","(Ljava/lang/String;II)F", (void*) SkPaintGlue::measureText_StringII}, + {"native_breakText","([CIIF[F)I", (void*) SkPaintGlue::breakTextC}, + {"native_breakText","(Ljava/lang/String;ZF[F)I", (void*) SkPaintGlue::breakTextS}, {"native_getTextWidths","(I[CII[F)I", (void*) SkPaintGlue::getTextWidths___CII_F}, {"native_getTextWidths","(ILjava/lang/String;II[F)I", (void*) SkPaintGlue::getTextWidths__StringII_F}, {"native_getTextPath","(I[CIIFFI)V", (void*) SkPaintGlue::getTextPath___CIIFFPath}, diff --git a/graphics/java/android/graphics/Paint.java b/graphics/java/android/graphics/Paint.java index 862e827..3d6d273 100644 --- a/graphics/java/android/graphics/Paint.java +++ b/graphics/java/android/graphics/Paint.java @@ -36,6 +36,10 @@ public class Paint { private Typeface mTypeface; private Xfermode mXfermode; + private boolean mHasCompatScaling; + private float mCompatScaling; + private float mInvCompatScaling; + private static final Style[] sStyleArray = { Style.FILL, Style.STROKE, Style.FILL_AND_STROKE }; @@ -189,6 +193,7 @@ public class Paint { public Paint(int flags) { mNativePaint = native_init(); setFlags(flags | DEFAULT_PAINT_FLAGS); + mCompatScaling = mInvCompatScaling = 1; } /** @@ -200,12 +205,17 @@ public class Paint { */ public Paint(Paint paint) { mNativePaint = native_initWithPaint(paint.mNativePaint); + mHasCompatScaling = paint.mHasCompatScaling; + mCompatScaling = paint.mCompatScaling; + mInvCompatScaling = paint.mInvCompatScaling; } /** Restores the paint to its default settings. */ public void reset() { native_reset(mNativePaint); setFlags(DEFAULT_PAINT_FLAGS); + mHasCompatScaling = false; + mCompatScaling = mInvCompatScaling = 1; } /** @@ -225,9 +235,24 @@ public class Paint { mShader = src.mShader; mTypeface = src.mTypeface; mXfermode = src.mXfermode; + mHasCompatScaling = src.mHasCompatScaling; + mCompatScaling = src.mCompatScaling; + mInvCompatScaling = src.mInvCompatScaling; } } + /** @hide */ + public void setCompatibilityScaling(float factor) { + if (factor == 1.0) { + mHasCompatScaling = false; + mCompatScaling = mInvCompatScaling = 1.0f; + } else { + mHasCompatScaling = true; + mCompatScaling = factor; + mInvCompatScaling = 1.0f/factor; + } + } + /** * Return the paint's flags. Use the Flag enum to test flag values. * @@ -972,8 +997,17 @@ public class Paint { * @param count THe number of characters to measure, beginning with start * @return The width of the text */ - public native float measureText(char[] text, int index, int count); + public float measureText(char[] text, int index, int count) { + if (!mHasCompatScaling) return native_measureText(text, index, count); + final float oldSize = getTextSize(); + setTextSize(oldSize*mCompatScaling); + float w = native_measureText(text, index, count); + setTextSize(oldSize); + return w*mInvCompatScaling; + } + private native float native_measureText(char[] text, int index, int count); + /** * Return the width of the text. * @@ -982,16 +1016,34 @@ public class Paint { * @param end 1 beyond the index of the last character to measure * @return The width of the text */ - public native float measureText(String text, int start, int end); + public float measureText(String text, int start, int end) { + if (!mHasCompatScaling) return native_measureText(text, start, end); + final float oldSize = getTextSize(); + setTextSize(oldSize*mCompatScaling); + float w = native_measureText(text, start, end); + setTextSize(oldSize); + return w*mInvCompatScaling; + } + private native float native_measureText(String text, int start, int end); + /** * Return the width of the text. * * @param text The text to measure * @return The width of the text */ - public native float measureText(String text); + public float measureText(String text) { + if (!mHasCompatScaling) return native_measureText(text); + final float oldSize = getTextSize(); + setTextSize(oldSize*mCompatScaling); + float w = native_measureText(text); + setTextSize(oldSize); + return w*mInvCompatScaling; + } + private native float native_measureText(String text); + /** * Return the width of the text. * @@ -1013,10 +1065,10 @@ public class Paint { } char[] buf = TemporaryBuffer.obtain(end - start); - TextUtils.getChars(text, start, end, buf, 0); - float result = measureText(buf, 0, end - start); + TextUtils.getChars(text, start, end, buf, 0); + float result = measureText(buf, 0, end - start); TemporaryBuffer.recycle(buf); - return result; + return result; } /** @@ -1036,8 +1088,22 @@ public class Paint { * @return The number of chars that were measured. Will always be <= * abs(count). */ - public native int breakText(char[] text, int index, int count, - float maxWidth, float[] measuredWidth); + public int breakText(char[] text, int index, int count, + float maxWidth, float[] measuredWidth) { + if (!mHasCompatScaling) { + return native_breakText(text, index, count, maxWidth, measuredWidth); + } + final float oldSize = getTextSize(); + setTextSize(oldSize*mCompatScaling); + int res = native_breakText(text, index, count, maxWidth*mCompatScaling, + measuredWidth); + setTextSize(oldSize); + if (measuredWidth != null) measuredWidth[0] *= mInvCompatScaling; + return res; + } + + public native int native_breakText(char[] text, int index, int count, + float maxWidth, float[] measuredWidth); /** * Measure the text, stopping early if the measured width exceeds maxWidth. @@ -1094,8 +1160,22 @@ public class Paint { * @return The number of chars that were measured. Will always be <= * abs(count). */ - public native int breakText(String text, boolean measureForwards, - float maxWidth, float[] measuredWidth); + public int breakText(String text, boolean measureForwards, + float maxWidth, float[] measuredWidth) { + if (!mHasCompatScaling) { + return native_breakText(text, measureForwards, maxWidth, measuredWidth); + } + final float oldSize = getTextSize(); + setTextSize(oldSize*mCompatScaling); + int res = native_breakText(text, measureForwards, maxWidth*mCompatScaling, + measuredWidth); + setTextSize(oldSize); + if (measuredWidth != null) measuredWidth[0] *= mInvCompatScaling; + return res; + } + + public native int native_breakText(String text, boolean measureForwards, + float maxWidth, float[] measuredWidth); /** * Return the advance widths for the characters in the string. @@ -1113,7 +1193,18 @@ public class Paint { || count > widths.length) { throw new ArrayIndexOutOfBoundsException(); } - return native_getTextWidths(mNativePaint, text, index, count, widths); + + if (!mHasCompatScaling) { + return native_getTextWidths(mNativePaint, text, index, count, widths); + } + final float oldSize = getTextSize(); + setTextSize(oldSize*mCompatScaling); + int res = native_getTextWidths(mNativePaint, text, index, count, widths); + setTextSize(oldSize); + for (int i=0; i<res; i++) { + widths[i] *= mInvCompatScaling; + } + return res; } /** @@ -1164,7 +1255,18 @@ public class Paint { if (end - start > widths.length) { throw new ArrayIndexOutOfBoundsException(); } - return native_getTextWidths(mNativePaint, text, start, end, widths); + + if (!mHasCompatScaling) { + return native_getTextWidths(mNativePaint, text, start, end, widths); + } + final float oldSize = getTextSize(); + setTextSize(oldSize*mCompatScaling); + int res = native_getTextWidths(mNativePaint, text, start, end, widths); + setTextSize(oldSize); + for (int i=0; i<res; i++) { + widths[i] *= mInvCompatScaling; + } + return res; } /** |