Respect style boundaries when measuring text

The existing implementation of handleText() in TextLine laid out
text to the end of the context. However, in cases where the text is
broken into multiple style spans, it's only valid to lay out up to
the end of the style span. This can lead to inconsistent
measurements, especially in the presence of legitimate zero-width
characters such as bidi control characters and zero width space.

This patch changes the invocation of getRunAdvance to measure only
within the style span.

Bug: 22589743
Change-Id: I027f5e77db27ddf9596ef20adcad7e62a82b41de
This commit is contained in:
Raph Levien
2015-07-20 16:22:01 -07:00
parent 29cf9aea54
commit ea2b4a40f7

View File

@@ -741,11 +741,11 @@ class TextLine {
if (needWidth || (c != null && (wp.bgColor != 0 || wp.underlineColor != 0 || runIsRtl))) {
if (mCharsValid) {
ret = wp.getRunAdvance(mChars, start, contextEnd, contextStart, contextEnd,
ret = wp.getRunAdvance(mChars, start, end, contextStart, contextEnd,
runIsRtl, end);
} else {
int delta = mStart;
ret = wp.getRunAdvance(mText, delta + start, delta + contextEnd,
ret = wp.getRunAdvance(mText, delta + start, delta + end,
delta + contextStart, delta + contextEnd, runIsRtl, delta + end);
}
}