19f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio/* 29f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio * Copyright (C) 2011 The Android Open Source Project 39f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio * 49f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio * Licensed under the Apache License, Version 2.0 (the "License"); 59f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio * you may not use this file except in compliance with the License. 69f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio * You may obtain a copy of the License at 79f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio * 89f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio * http://www.apache.org/licenses/LICENSE-2.0 99f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio * 109f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio * Unless required by applicable law or agreed to in writing, software 119f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio * distributed under the License is distributed on an "AS IS" BASIS, 129f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio * See the License for the specific language governing permissions and 149f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio * limitations under the License. 159f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio */ 169f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio 179f82b580d744ce4baf057b061994394dcf239eedFabrice Di Megliopackage com.android.bidi; 189f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio 199f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglioimport android.content.Context; 209f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglioimport android.graphics.Canvas; 219f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglioimport android.graphics.Color; 229f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglioimport android.graphics.Paint; 239f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglioimport android.graphics.Rect; 24c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglioimport android.text.TextPaint; 259f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglioimport android.util.AttributeSet; 269f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglioimport android.util.Log; 279f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglioimport android.view.View; 289f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio 299f82b580d744ce4baf057b061994394dcf239eedFabrice Di Megliopublic class BiDiTestView extends View { 309f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio 319f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio private static final String TAG = "BiDiTestView"; 329f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio 339f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio private static final int BORDER_PADDING = 4; 349f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio private static final int TEXT_PADDING = 16; 35eee49c699c035ffba188417489f40d34f587d65cFabrice Di Meglio private static final int TEXT_SIZE = 16; 36eee49c699c035ffba188417489f40d34f587d65cFabrice Di Meglio private static final int ORIGIN = 80; 379f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio 389f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio private static final float DEFAULT_ITALIC_SKEW_X = -0.25f; 399f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio 409f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio private Rect rect = new Rect(); 419f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio 429f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio private String NORMAL_TEXT; 439f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio private String NORMAL_LONG_TEXT; 44eee49c699c035ffba188417489f40d34f587d65cFabrice Di Meglio private String NORMAL_LONG_TEXT_2; 45eee49c699c035ffba188417489f40d34f587d65cFabrice Di Meglio private String NORMAL_LONG_TEXT_3; 469f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio private String ITALIC_TEXT; 479f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio private String BOLD_TEXT; 489f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio private String BOLD_ITALIC_TEXT; 499f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio private String ARABIC_TEXT; 509f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio private String CHINESE_TEXT; 51689e515ed2b8064c15e54d8ab69d87de54c5e0d6Fabrice Di Meglio private String MIXED_TEXT_1; 52589e4e27ee071f028a4bc72b91a1fb053ab13404Fabrice Di Meglio private String HEBREW_TEXT; 53c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglio private String RTL_TEXT; 5403e250aefa29387f30a01243682eab2371103f8eFabrice Di Meglio private String THAI_TEXT; 559f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio 56eee49c699c035ffba188417489f40d34f587d65cFabrice Di Meglio private int currentTextSize; 57eee49c699c035ffba188417489f40d34f587d65cFabrice Di Meglio 589f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio public BiDiTestView(Context context) { 599f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio super(context); 609f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio init(context); 619f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio } 629f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio 639f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio public BiDiTestView(Context context, AttributeSet attrs) { 649f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio super(context, attrs); 659f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio init(context); 669f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio } 679f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio 689f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio public BiDiTestView(Context context, AttributeSet attrs, int defStyle) { 699f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio super(context, attrs, defStyle); 709f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio init(context); 719f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio } 729f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio 739f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio private void init(Context context) { 749f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio NORMAL_TEXT = context.getString(R.string.normal_text); 759f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio NORMAL_LONG_TEXT = context.getString(R.string.normal_long_text); 76eee49c699c035ffba188417489f40d34f587d65cFabrice Di Meglio NORMAL_LONG_TEXT_2 = context.getString(R.string.normal_long_text_2); 77eee49c699c035ffba188417489f40d34f587d65cFabrice Di Meglio NORMAL_LONG_TEXT_3 = context.getString(R.string.normal_long_text_3); 789f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio ITALIC_TEXT = context.getString(R.string.italic_text); 799f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio BOLD_TEXT = context.getString(R.string.bold_text); 809f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio BOLD_ITALIC_TEXT = context.getString(R.string.bold_italic_text); 819f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio ARABIC_TEXT = context.getString(R.string.arabic_text); 829f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio CHINESE_TEXT = context.getString(R.string.chinese_text); 83689e515ed2b8064c15e54d8ab69d87de54c5e0d6Fabrice Di Meglio MIXED_TEXT_1 = context.getString(R.string.mixed_text_1); 84589e4e27ee071f028a4bc72b91a1fb053ab13404Fabrice Di Meglio HEBREW_TEXT = context.getString(R.string.hebrew_text); 85c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglio RTL_TEXT = context.getString(R.string.rtl); 8603e250aefa29387f30a01243682eab2371103f8eFabrice Di Meglio THAI_TEXT = context.getString(R.string.pointer_location); 879f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio } 889f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio 89eee49c699c035ffba188417489f40d34f587d65cFabrice Di Meglio public void setCurrentTextSize(int size) { 90eee49c699c035ffba188417489f40d34f587d65cFabrice Di Meglio currentTextSize = size; 91eee49c699c035ffba188417489f40d34f587d65cFabrice Di Meglio invalidate(); 92eee49c699c035ffba188417489f40d34f587d65cFabrice Di Meglio } 93eee49c699c035ffba188417489f40d34f587d65cFabrice Di Meglio 949f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio @Override 959f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio public void onDraw(Canvas canvas) { 96c2063a5b18bc2e54f000b411c82f43992a53854eFabrice Di Meglio drawInsideRect(canvas, new Paint(), Color.BLACK); 979f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio 98589e4e27ee071f028a4bc72b91a1fb053ab13404Fabrice Di Meglio int deltaX = 0; 99589e4e27ee071f028a4bc72b91a1fb053ab13404Fabrice Di Meglio 100589e4e27ee071f028a4bc72b91a1fb053ab13404Fabrice Di Meglio deltaX = testString(canvas, NORMAL_TEXT, ORIGIN, ORIGIN, 101c2063a5b18bc2e54f000b411c82f43992a53854eFabrice Di Meglio false, false, Paint.DIRECTION_LTR, currentTextSize); 102eee49c699c035ffba188417489f40d34f587d65cFabrice Di Meglio 103eee49c699c035ffba188417489f40d34f587d65cFabrice Di Meglio deltaX += testString(canvas, ITALIC_TEXT, ORIGIN + deltaX, ORIGIN, 104c2063a5b18bc2e54f000b411c82f43992a53854eFabrice Di Meglio true, false, Paint.DIRECTION_LTR, currentTextSize); 105eee49c699c035ffba188417489f40d34f587d65cFabrice Di Meglio 106eee49c699c035ffba188417489f40d34f587d65cFabrice Di Meglio deltaX += testString(canvas, BOLD_TEXT, ORIGIN + deltaX, ORIGIN, 107c2063a5b18bc2e54f000b411c82f43992a53854eFabrice Di Meglio false, true, Paint.DIRECTION_LTR, currentTextSize); 108eee49c699c035ffba188417489f40d34f587d65cFabrice Di Meglio 109eee49c699c035ffba188417489f40d34f587d65cFabrice Di Meglio deltaX += testString(canvas, BOLD_ITALIC_TEXT, ORIGIN + deltaX, ORIGIN, 110c2063a5b18bc2e54f000b411c82f43992a53854eFabrice Di Meglio true, true, Paint.DIRECTION_LTR, currentTextSize); 1119f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio 1129f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio // Test with a long string 113eee49c699c035ffba188417489f40d34f587d65cFabrice Di Meglio deltaX = testString(canvas, NORMAL_LONG_TEXT, ORIGIN, ORIGIN + 2 * currentTextSize, 114c2063a5b18bc2e54f000b411c82f43992a53854eFabrice Di Meglio false, false, Paint.DIRECTION_LTR, currentTextSize); 115eee49c699c035ffba188417489f40d34f587d65cFabrice Di Meglio 116eee49c699c035ffba188417489f40d34f587d65cFabrice Di Meglio // Test with a long string 117eee49c699c035ffba188417489f40d34f587d65cFabrice Di Meglio deltaX = testString(canvas, NORMAL_LONG_TEXT_2, ORIGIN, ORIGIN + 4 * currentTextSize, 118c2063a5b18bc2e54f000b411c82f43992a53854eFabrice Di Meglio false, false, Paint.DIRECTION_LTR, currentTextSize); 119eee49c699c035ffba188417489f40d34f587d65cFabrice Di Meglio 120eee49c699c035ffba188417489f40d34f587d65cFabrice Di Meglio // Test with a long string 121eee49c699c035ffba188417489f40d34f587d65cFabrice Di Meglio deltaX = testString(canvas, NORMAL_LONG_TEXT_3, ORIGIN, ORIGIN + 6 * currentTextSize, 122c2063a5b18bc2e54f000b411c82f43992a53854eFabrice Di Meglio false, false, Paint.DIRECTION_LTR, currentTextSize); 1239f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio 1249f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio // Test Arabic ligature 125eee49c699c035ffba188417489f40d34f587d65cFabrice Di Meglio deltaX = testString(canvas, ARABIC_TEXT, ORIGIN, ORIGIN + 8 * currentTextSize, 126c2063a5b18bc2e54f000b411c82f43992a53854eFabrice Di Meglio false, false, Paint.DIRECTION_RTL, currentTextSize); 1279f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio 1289f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio // Test Chinese 129eee49c699c035ffba188417489f40d34f587d65cFabrice Di Meglio deltaX = testString(canvas, CHINESE_TEXT, ORIGIN, ORIGIN + 10 * currentTextSize, 130c2063a5b18bc2e54f000b411c82f43992a53854eFabrice Di Meglio false, false, Paint.DIRECTION_LTR, currentTextSize); 131689e515ed2b8064c15e54d8ab69d87de54c5e0d6Fabrice Di Meglio 132689e515ed2b8064c15e54d8ab69d87de54c5e0d6Fabrice Di Meglio // Test Mixed (English and Arabic) 133689e515ed2b8064c15e54d8ab69d87de54c5e0d6Fabrice Di Meglio deltaX = testString(canvas, MIXED_TEXT_1, ORIGIN, ORIGIN + 12 * currentTextSize, 134c2063a5b18bc2e54f000b411c82f43992a53854eFabrice Di Meglio false, false, Paint.DIRECTION_LTR, currentTextSize); 135589e4e27ee071f028a4bc72b91a1fb053ab13404Fabrice Di Meglio 136589e4e27ee071f028a4bc72b91a1fb053ab13404Fabrice Di Meglio // Test Hebrew 137c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglio deltaX = testString(canvas, RTL_TEXT, ORIGIN, ORIGIN + 14 * currentTextSize, 138c2063a5b18bc2e54f000b411c82f43992a53854eFabrice Di Meglio false, false, Paint.DIRECTION_RTL, currentTextSize); 13903e250aefa29387f30a01243682eab2371103f8eFabrice Di Meglio 14003e250aefa29387f30a01243682eab2371103f8eFabrice Di Meglio // Test Thai 14103e250aefa29387f30a01243682eab2371103f8eFabrice Di Meglio deltaX = testString(canvas, THAI_TEXT, ORIGIN, ORIGIN + 16 * currentTextSize, 14203e250aefa29387f30a01243682eab2371103f8eFabrice Di Meglio false, false, Paint.DIRECTION_LTR, currentTextSize); 1439f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio } 1449f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio 145c2063a5b18bc2e54f000b411c82f43992a53854eFabrice Di Meglio private int testString(Canvas canvas, String text, int x, int y, 146eee49c699c035ffba188417489f40d34f587d65cFabrice Di Meglio boolean isItalic, boolean isBold, int dir, int textSize) { 147c2063a5b18bc2e54f000b411c82f43992a53854eFabrice Di Meglio 148c2063a5b18bc2e54f000b411c82f43992a53854eFabrice Di Meglio TextPaint paint = new TextPaint(); 149c2063a5b18bc2e54f000b411c82f43992a53854eFabrice Di Meglio paint.setAntiAlias(true); 1509f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio 1519f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio // Set paint properties 1529f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio boolean oldFakeBold = paint.isFakeBoldText(); 1539f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio paint.setFakeBoldText(isBold); 1549f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio 1559f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio float oldTextSkewX = paint.getTextSkewX(); 1569f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio if (isItalic) { 1579f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio paint.setTextSkewX(DEFAULT_ITALIC_SKEW_X); 1589f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio } 1599f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio 160c2063a5b18bc2e54f000b411c82f43992a53854eFabrice Di Meglio paint.setTextSize(textSize); 161c2063a5b18bc2e54f000b411c82f43992a53854eFabrice Di Meglio paint.setColor(Color.WHITE); 162c2063a5b18bc2e54f000b411c82f43992a53854eFabrice Di Meglio canvas.drawText(text, x, y, paint); 1639f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio 1649f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio int length = text.length(); 1659f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio float[] advances = new float[length]; 166689e515ed2b8064c15e54d8ab69d87de54c5e0d6Fabrice Di Meglio float textWidthHB = paint.getTextRunAdvances(text, 0, length, 0, length, dir, advances, 0); 167689e515ed2b8064c15e54d8ab69d87de54c5e0d6Fabrice Di Meglio setPaintDir(paint, dir); 1680a1413e4bf9dcda2a8abb2287e43f612a7fb2453Fabrice Di Meglio float textWidthICU = paint.getTextRunAdvances(text, 0, length, 0, length, dir, advances, 0, 1690a1413e4bf9dcda2a8abb2287e43f612a7fb2453Fabrice Di Meglio 1 /* use ICU */); 1709f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio 171eee49c699c035ffba188417489f40d34f587d65cFabrice Di Meglio logAdvances(text, textWidthHB, textWidthICU, advances); 172eee49c699c035ffba188417489f40d34f587d65cFabrice Di Meglio drawMetricsAroundText(canvas, x, y, textWidthHB, textWidthICU, textSize, Color.RED, Color.GREEN); 1739f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio 1749f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio // Restore old paint properties 1759f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio paint.setFakeBoldText(oldFakeBold); 1769f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio paint.setTextSkewX(oldTextSkewX); 1779f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio 178eee49c699c035ffba188417489f40d34f587d65cFabrice Di Meglio return (int) Math.ceil(textWidthHB) + TEXT_PADDING; 1799f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio } 1809f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio 181689e515ed2b8064c15e54d8ab69d87de54c5e0d6Fabrice Di Meglio private void setPaintDir(Paint paint, int dir) { 182689e515ed2b8064c15e54d8ab69d87de54c5e0d6Fabrice Di Meglio Log.v(TAG, "Setting Paint dir=" + dir); 183689e515ed2b8064c15e54d8ab69d87de54c5e0d6Fabrice Di Meglio paint.setBidiFlags(dir); 184689e515ed2b8064c15e54d8ab69d87de54c5e0d6Fabrice Di Meglio } 185689e515ed2b8064c15e54d8ab69d87de54c5e0d6Fabrice Di Meglio 186c2063a5b18bc2e54f000b411c82f43992a53854eFabrice Di Meglio private void drawInsideRect(Canvas canvas, Paint paint, int color) { 1879f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio paint.setColor(color); 1889f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio int width = getWidth(); 1899f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio int height = getHeight(); 1909f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio rect.set(BORDER_PADDING, BORDER_PADDING, width - BORDER_PADDING, height - BORDER_PADDING); 1919f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio canvas.drawRect(rect, paint); 1929f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio } 1939f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio 194eee49c699c035ffba188417489f40d34f587d65cFabrice Di Meglio private void drawMetricsAroundText(Canvas canvas, int x, int y, float textWidthHB, 195eee49c699c035ffba188417489f40d34f587d65cFabrice Di Meglio float textWidthICU, int textSize, int color, int colorICU) { 196c2063a5b18bc2e54f000b411c82f43992a53854eFabrice Di Meglio Paint paint = new Paint(); 1979f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio paint.setColor(color); 1989f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio canvas.drawLine(x, y - textSize, x, y + 8, paint); 199eee49c699c035ffba188417489f40d34f587d65cFabrice Di Meglio canvas.drawLine(x, y + 8, x + textWidthHB, y + 8, paint); 200eee49c699c035ffba188417489f40d34f587d65cFabrice Di Meglio canvas.drawLine(x + textWidthHB, y - textSize, x + textWidthHB, y + 8, paint); 201eee49c699c035ffba188417489f40d34f587d65cFabrice Di Meglio paint.setColor(colorICU); 202eee49c699c035ffba188417489f40d34f587d65cFabrice Di Meglio canvas.drawLine(x + textWidthICU, y - textSize, x + textWidthICU, y + 8, paint); 2039f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio } 2049f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio 205eee49c699c035ffba188417489f40d34f587d65cFabrice Di Meglio private void logAdvances(String text, float textWidth, float textWidthICU, float[] advances) { 206eee49c699c035ffba188417489f40d34f587d65cFabrice Di Meglio Log.v(TAG, "Advances for text: " + text + " total= " + textWidth + " - totalICU= " + textWidthICU); 207eee49c699c035ffba188417489f40d34f587d65cFabrice Di Meglio// int length = advances.length; 208eee49c699c035ffba188417489f40d34f587d65cFabrice Di Meglio// for(int n=0; n<length; n++){ 209eee49c699c035ffba188417489f40d34f587d65cFabrice Di Meglio// Log.v(TAG, "adv[" + n + "]=" + advances[n]); 210eee49c699c035ffba188417489f40d34f587d65cFabrice Di Meglio// } 2119f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio } 2129f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio} 213