summaryrefslogtreecommitdiffstats
path: root/tests/BiDiTests
diff options
context:
space:
mode:
authorFabrice Di Meglio <fdimeglio@google.com>2011-07-18 13:35:18 -0700
committerFabrice Di Meglio <fdimeglio@google.com>2011-07-18 17:47:04 -0700
commitc2063a5b18bc2e54f000b411c82f43992a53854e (patch)
treec0625a4dd35c6f1319f615dfa2694421434f2e84 /tests/BiDiTests
parent8abef6b014e58f1fdc866fc1bb1336ddcf4bbb57 (diff)
downloadframeworks_base-c2063a5b18bc2e54f000b411c82f43992a53854e.zip
frameworks_base-c2063a5b18bc2e54f000b411c82f43992a53854e.tar.gz
frameworks_base-c2063a5b18bc2e54f000b411c82f43992a53854e.tar.bz2
Fix bug #5037425 Canvas.drawText can't handle Right-to-Left text and text composing
- optimization for single run case was broken - pass isRTL boolean along the call stack instead of the dirFlags integer (which was only used as a "isRTL" in the shaper) - update unit tests Change-Id: I33110b76a433633a0b92fbd1db03785204e0c3e6
Diffstat (limited to 'tests/BiDiTests')
-rw-r--r--tests/BiDiTests/res/layout/canvas2.xml15
-rw-r--r--tests/BiDiTests/src/com/android/bidi/BiDiTestView.java60
-rw-r--r--tests/BiDiTests/src/com/android/bidi/BiDiTestViewDrawText.java (renamed from tests/BiDiTests/src/com/android/bidi/DrawTextTestView.java)10
3 files changed, 35 insertions, 50 deletions
diff --git a/tests/BiDiTests/res/layout/canvas2.xml b/tests/BiDiTests/res/layout/canvas2.xml
index 2513c94..b3e038f 100644
--- a/tests/BiDiTests/res/layout/canvas2.xml
+++ b/tests/BiDiTests/res/layout/canvas2.xml
@@ -27,36 +27,39 @@
<TextView
android:text="@string/ltr"
+ android:textSize="40dip"
android:gravity="center"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
- <com.android.bidi.DrawTextTestView
+ <com.android.bidi.BiDiTestViewDrawText
local:text="@string/ltr"
android:layout_width="fill_parent"
- android:layout_height="40dp" />
+ android:layout_height="64dp" />
<TextView
android:text="@string/rtl"
+ android:textSize="40dip"
android:gravity="center"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
- <com.android.bidi.DrawTextTestView
+ <com.android.bidi.BiDiTestViewDrawText
local:text="@string/rtl"
android:layout_width="fill_parent"
- android:layout_height="40dp" />
+ android:layout_height="64dp" />
<TextView
android:text="@string/composing"
+ android:textSize="40dip"
android:gravity="center"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
- <com.android.bidi.DrawTextTestView
+ <com.android.bidi.BiDiTestViewDrawText
local:text="@string/composing"
android:layout_width="fill_parent"
- android:layout_height="40dp" />
+ android:layout_height="64dp" />
</LinearLayout>
diff --git a/tests/BiDiTests/src/com/android/bidi/BiDiTestView.java b/tests/BiDiTests/src/com/android/bidi/BiDiTestView.java
index 78b6495..0126dea 100644
--- a/tests/BiDiTests/src/com/android/bidi/BiDiTestView.java
+++ b/tests/BiDiTests/src/com/android/bidi/BiDiTestView.java
@@ -21,7 +21,6 @@ import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
-import android.graphics.Typeface;
import android.text.TextPaint;
import android.util.AttributeSet;
import android.util.Log;
@@ -38,7 +37,6 @@ public class BiDiTestView extends View {
private static final float DEFAULT_ITALIC_SKEW_X = -0.25f;
- private TextPaint paint = new TextPaint();
private Rect rect = new Rect();
private String NORMAL_TEXT;
@@ -54,8 +52,6 @@ public class BiDiTestView extends View {
private String HEBREW_TEXT;
private String RTL_TEXT;
- private Typeface typeface;
-
private int currentTextSize;
public BiDiTestView(Context context) {
@@ -86,9 +82,6 @@ public class BiDiTestView extends View {
MIXED_TEXT_1 = context.getString(R.string.mixed_text_1);
HEBREW_TEXT = context.getString(R.string.hebrew_text);
RTL_TEXT = context.getString(R.string.rtl);
-
- typeface = paint.getTypeface();
-// paint.setAntiAlias(true);
}
public void setCurrentTextSize(int size) {
@@ -98,54 +91,56 @@ public class BiDiTestView extends View {
@Override
public void onDraw(Canvas canvas) {
- drawInsideRect(canvas, Color.BLACK);
+ drawInsideRect(canvas, new Paint(), Color.BLACK);
int deltaX = 0;
deltaX = testString(canvas, NORMAL_TEXT, ORIGIN, ORIGIN,
- paint, typeface, false, false, Paint.DIRECTION_LTR, currentTextSize);
+ false, false, Paint.DIRECTION_LTR, currentTextSize);
deltaX += testString(canvas, ITALIC_TEXT, ORIGIN + deltaX, ORIGIN,
- paint, typeface, true, false, Paint.DIRECTION_LTR, currentTextSize);
+ true, false, Paint.DIRECTION_LTR, currentTextSize);
deltaX += testString(canvas, BOLD_TEXT, ORIGIN + deltaX, ORIGIN,
- paint, typeface, false, true, Paint.DIRECTION_LTR, currentTextSize);
+ false, true, Paint.DIRECTION_LTR, currentTextSize);
deltaX += testString(canvas, BOLD_ITALIC_TEXT, ORIGIN + deltaX, ORIGIN,
- paint, typeface, true, true, Paint.DIRECTION_LTR, currentTextSize);
+ true, true, Paint.DIRECTION_LTR, currentTextSize);
// Test with a long string
deltaX = testString(canvas, NORMAL_LONG_TEXT, ORIGIN, ORIGIN + 2 * currentTextSize,
- paint, typeface, false, false, Paint.DIRECTION_LTR, currentTextSize);
+ false, false, Paint.DIRECTION_LTR, currentTextSize);
// Test with a long string
deltaX = testString(canvas, NORMAL_LONG_TEXT_2, ORIGIN, ORIGIN + 4 * currentTextSize,
- paint, typeface, false, false, Paint.DIRECTION_LTR, currentTextSize);
+ false, false, Paint.DIRECTION_LTR, currentTextSize);
// Test with a long string
deltaX = testString(canvas, NORMAL_LONG_TEXT_3, ORIGIN, ORIGIN + 6 * currentTextSize,
- paint, typeface, false, false, Paint.DIRECTION_LTR, currentTextSize);
+ false, false, Paint.DIRECTION_LTR, currentTextSize);
// Test Arabic ligature
deltaX = testString(canvas, ARABIC_TEXT, ORIGIN, ORIGIN + 8 * currentTextSize,
- paint, typeface, false, false, Paint.DIRECTION_RTL, currentTextSize);
+ false, false, Paint.DIRECTION_RTL, currentTextSize);
// Test Chinese
deltaX = testString(canvas, CHINESE_TEXT, ORIGIN, ORIGIN + 10 * currentTextSize,
- paint, typeface, false, false, Paint.DIRECTION_LTR, currentTextSize);
+ false, false, Paint.DIRECTION_LTR, currentTextSize);
// Test Mixed (English and Arabic)
deltaX = testString(canvas, MIXED_TEXT_1, ORIGIN, ORIGIN + 12 * currentTextSize,
- paint, typeface, false, false, Paint.DIRECTION_LTR, currentTextSize);
+ false, false, Paint.DIRECTION_LTR, currentTextSize);
// Test Hebrew
deltaX = testString(canvas, RTL_TEXT, ORIGIN, ORIGIN + 14 * currentTextSize,
- paint, typeface, false, false, Paint.DIRECTION_RTL, currentTextSize);
+ false, false, Paint.DIRECTION_RTL, currentTextSize);
}
- private int testString(Canvas canvas, String text, int x, int y, Paint paint, Typeface typeface,
+ private int testString(Canvas canvas, String text, int x, int y,
boolean isItalic, boolean isBold, int dir, int textSize) {
- paint.setTypeface(typeface);
+
+ TextPaint paint = new TextPaint();
+ paint.setAntiAlias(true);
// Set paint properties
boolean oldFakeBold = paint.isFakeBoldText();
@@ -156,9 +151,9 @@ public class BiDiTestView extends View {
paint.setTextSkewX(DEFAULT_ITALIC_SKEW_X);
}
- Log.v(TAG, "START -- drawTextWithCanvasDrawText");
- drawTextWithCanvasDrawText(text, canvas, x, y, textSize, Color.WHITE, dir);
- Log.v(TAG, "END -- drawTextWithCanvasDrawText");
+ paint.setTextSize(textSize);
+ paint.setColor(Color.WHITE);
+ canvas.drawText(text, x, y, paint);
int length = text.length();
float[] advances = new float[length];
@@ -170,12 +165,6 @@ public class BiDiTestView extends View {
logAdvances(text, textWidthHB, textWidthICU, advances);
drawMetricsAroundText(canvas, x, y, textWidthHB, textWidthICU, textSize, Color.RED, Color.GREEN);
- paint.setColor(Color.WHITE);
-
- Log.v(TAG, "START -- drawText");
- canvas.drawText(text, x, y + currentTextSize, this.paint);
- Log.v(TAG, "END -- drawText");
-
// Restore old paint properties
paint.setFakeBoldText(oldFakeBold);
paint.setTextSkewX(oldTextSkewX);
@@ -188,7 +177,7 @@ public class BiDiTestView extends View {
paint.setBidiFlags(dir);
}
- private void drawInsideRect(Canvas canvas, int color) {
+ private void drawInsideRect(Canvas canvas, Paint paint, int color) {
paint.setColor(color);
int width = getWidth();
int height = getHeight();
@@ -196,16 +185,9 @@ public class BiDiTestView extends View {
canvas.drawRect(rect, paint);
}
- private void drawTextWithCanvasDrawText(String text, Canvas canvas,
- float x, float y, float textSize, int color, int dir) {
- setPaintDir(paint, dir);
- paint.setColor(color);
- paint.setTextSize(textSize);
- canvas.drawText(text, x, y, paint);
- }
-
private void drawMetricsAroundText(Canvas canvas, int x, int y, float textWidthHB,
float textWidthICU, int textSize, int color, int colorICU) {
+ Paint paint = new Paint();
paint.setColor(color);
canvas.drawLine(x, y - textSize, x, y + 8, paint);
canvas.drawLine(x, y + 8, x + textWidthHB, y + 8, paint);
diff --git a/tests/BiDiTests/src/com/android/bidi/DrawTextTestView.java b/tests/BiDiTests/src/com/android/bidi/BiDiTestViewDrawText.java
index 4a15100..dfdb807 100644
--- a/tests/BiDiTests/src/com/android/bidi/DrawTextTestView.java
+++ b/tests/BiDiTests/src/com/android/bidi/BiDiTestViewDrawText.java
@@ -25,25 +25,25 @@ import android.text.TextPaint;
import android.util.AttributeSet;
import android.view.View;
-public class DrawTextTestView extends View {
+public class BiDiTestViewDrawText extends View {
private float mSize;
private int mColor;
private String mText;
- public DrawTextTestView(Context context) {
+ public BiDiTestViewDrawText(Context context) {
this(context, null);
}
- public DrawTextTestView(Context context, AttributeSet attrs) {
+ public BiDiTestViewDrawText(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
- public DrawTextTestView(Context context, AttributeSet attrs, int defStyle) {
+ public BiDiTestViewDrawText(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
final TypedArray a = context.obtainStyledAttributes(attrs,
R.styleable.DrawTextTestView, defStyle, 0);
- mSize = a.getDimension(R.styleable.DrawTextTestView_size, 21.0f);
+ mSize = a.getDimension(R.styleable.DrawTextTestView_size, 40.0f);
mColor = a.getColor(R.styleable.DrawTextTestView_color, Color.YELLOW);
final CharSequence text = a.getText(R.styleable.DrawTextTestView_text);
mText = (text != null) ? text.toString() : "(empty)";