summaryrefslogtreecommitdiff
path: root/core/java/android/text/SpannableStringBuilder.java
diff options
context:
space:
mode:
authorDoug Felt <dougfelt@google.com>2010-04-21 16:01:52 -0700
committerKenny Root <kroot@google.com>2010-05-12 18:50:02 -0700
commitf47d7405bbcb25d7cdf89ebb059f41520fe9ab87 (patch)
tree2108636a739716d0e6fddde6f75225686c322aab /core/java/android/text/SpannableStringBuilder.java
parentd937420996f43534eafce474eeeb81c7045dbf9d (diff)
Modify Canvas drawText to run bidi and shape.
Adds drawTextRun as internal API on Canvas and GraphicsOperations. Adds implementation to implementors of GraphicsOperations. Adds state and API on Paint to control the bidi algorithm when used by Canvas. This API is currently hidden. The drawText changes are incomplete since shaping is not yet available in the native code. Change-Id: I4368048aef9545df0953a349381771603e04b619
Diffstat (limited to 'core/java/android/text/SpannableStringBuilder.java')
-rw-r--r--core/java/android/text/SpannableStringBuilder.java38
1 files changed, 36 insertions, 2 deletions
diff --git a/core/java/android/text/SpannableStringBuilder.java b/core/java/android/text/SpannableStringBuilder.java
index caaafa147397..756317932d06 100644
--- a/core/java/android/text/SpannableStringBuilder.java
+++ b/core/java/android/text/SpannableStringBuilder.java
@@ -17,8 +17,9 @@
package android.text;
import com.android.internal.util.ArrayUtils;
-import android.graphics.Paint;
+
import android.graphics.Canvas;
+import android.graphics.Paint;
import java.lang.reflect.Array;
@@ -780,7 +781,7 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable,
}
if (count == 0) {
- return (T[]) ArrayUtils.emptyArray(kind);
+ return ArrayUtils.emptyArray(kind);
}
if (count == 1) {
ret = (Object[]) Array.newInstance(kind, 1);
@@ -1055,6 +1056,39 @@ implements CharSequence, GetChars, Spannable, Editable, Appendable,
}
/**
+ * Don't call this yourself -- exists for Canvas to use internally.
+ * {@hide}
+ */
+ public void drawTextRun(Canvas c, int start, int end,
+ float x, float y, int flags, Paint p) {
+ checkRange("drawTextRun", start, end);
+
+ // Assume context requires no more than 8 chars on either side.
+ // This is ample, only decomposed U+FDFA falls into this
+ // category, and no one should put a style break within it
+ // anyway.
+ int cstart = start - 8;
+ if (cstart < 0) {
+ cstart = 0;
+ }
+ int cend = end + 8;
+ int max = length();
+ if (cend > max) {
+ cend = max;
+ }
+ if (cend <= mGapStart) {
+ c.drawTextRun(mText, start, end - start, x, y, flags, p);
+ } else if (cstart >= mGapStart) {
+ c.drawTextRun(mText, start + mGapLength, end - start, x, y, flags, p);
+ } else {
+ char[] buf = TextUtils.obtain(cend - cstart);
+ getChars(cstart, cend, buf, 0);
+ c.drawTextRun(buf, start - cstart, end - start, x, y, flags, p);
+ TextUtils.recycle(buf);
+ }
+ }
+
+ /**
* Don't call this yourself -- exists for Paint to use internally.
* {@hide}
*/