RFR: 8304831: TextFlow.hitTest.insertionIndex incorrect with surrogate pairs [v2]
Karthik P K
kpk at openjdk.org
Tue May 9 05:10:27 UTC 2023
On Mon, 8 May 2023 16:33:50 GMT, Andy Goryachev <angorya at openjdk.org> wrote:
> Does not seem to work correctly still - the insertion index in TextFlow should not point in between surrogate pair of characters that comprise an emoji. Basically, it should be exactly the same as with Text.hitInfo():
>
This condition is working for me as `Text.hitInfo()`. The code is updated now to make the changes suggested above. Could you please recheck?
> modules/javafx.graphics/src/main/java/com/sun/javafx/text/PrismTextLayout.java line 456:
>
>> 454:
>> 455: insertionIndex = charIndex;
>> 456: String txt = new String(getText());
>
> possible NPE: looks like getText() might return null, in which case this line will throw an NPE.
Updated code
> modules/javafx.graphics/src/main/java/com/sun/javafx/text/PrismTextLayout.java line 458:
>
>> 456: String txt = new String(getText());
>> 457: if (!leading) {
>> 458: if (txt != null) {
>
> This check should be done earlier for getText()
Added null check for `getText()`
> modules/javafx.graphics/src/main/java/com/sun/javafx/text/PrismTextLayout.java line 461:
>
>> 459: int next;
>> 460: BreakIterator charIterator = BreakIterator.getCharacterInstance();
>> 461: synchronized(charIterator) {
>
> question: why do we need to synchronize on the instance here? BreakIterator.get*Instance() creates a new instance each time, so synchronization is probably unnecessary.
Correct it is not necessary. Updated code to remove synchronization
-------------
PR Comment: https://git.openjdk.org/jfx/pull/1091#issuecomment-1539412625
PR Review Comment: https://git.openjdk.org/jfx/pull/1091#discussion_r1188134287
PR Review Comment: https://git.openjdk.org/jfx/pull/1091#discussion_r1188134476
PR Review Comment: https://git.openjdk.org/jfx/pull/1091#discussion_r1188134760
More information about the openjfx-dev
mailing list