Apply text affinity fix to html rendering (flutter/engine#36699)
This commit is contained in:
@@ -229,9 +229,17 @@ class CanvasParagraph implements ui.Paragraph {
|
||||
@override
|
||||
ui.TextRange getWordBoundary(ui.TextPosition position) {
|
||||
final String text = toPlainText();
|
||||
|
||||
final int start = WordBreaker.prevBreakIndex(text, position.offset + 1);
|
||||
final int end = WordBreaker.nextBreakIndex(text, position.offset);
|
||||
final int characterPosition;
|
||||
switch (position.affinity) {
|
||||
case ui.TextAffinity.upstream:
|
||||
characterPosition = position.offset - 1;
|
||||
break;
|
||||
case ui.TextAffinity.downstream:
|
||||
characterPosition = position.offset;
|
||||
break;
|
||||
}
|
||||
final int start = WordBreaker.prevBreakIndex(text, characterPosition + 1);
|
||||
final int end = WordBreaker.nextBreakIndex(text, characterPosition);
|
||||
return ui.TextRange(start: start, end: end);
|
||||
}
|
||||
|
||||
|
||||
@@ -767,6 +767,14 @@ Future<void> testMain() async {
|
||||
expect(paragraph.getWordBoundary(const ui.TextPosition(offset: 17)), endRange);
|
||||
});
|
||||
|
||||
test('$CanvasParagraph.getWordBoundary can handle text affinity', () {
|
||||
final ui.Paragraph paragraph = plain(ahemStyle, 'Lorem ipsum dolor');
|
||||
|
||||
const ui.TextRange loremRange = ui.TextRange(start: 0, end: 5);
|
||||
expect(paragraph.getWordBoundary(const ui.TextPosition(offset: 4)), loremRange);
|
||||
expect(paragraph.getWordBoundary(const ui.TextPosition(offset: 5, affinity: ui.TextAffinity.upstream)), loremRange);
|
||||
});
|
||||
|
||||
test('$CanvasParagraph.longestLine', () {
|
||||
final ui.Paragraph paragraph = plain(ahemStyle, 'abcd\nabcde abc');
|
||||
paragraph.layout(const ui.ParagraphConstraints(width: 80.0));
|
||||
|
||||
Reference in New Issue
Block a user