am 490d5222: Merge change I6cacaa0d into eclair

Merge commit '490d5222ae985f7e606cdf503d292062c80e7328' into eclair-plus-aosp

* commit '490d5222ae985f7e606cdf503d292062c80e7328':
  Hack to fix issue #2125365: Sports Trivia compatability with Eclair
This commit is contained in:
Dianne Hackborn
2009-09-29 10:49:26 -07:00
committed by Android Git Automerger
3 changed files with 124 additions and 17 deletions

View File

@@ -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;

View File

@@ -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},

View File

@@ -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;
}
/**