RFR: 8341670: [Text, TextFlow] Public API for Text Layout Info [v31]
Andy Goryachev
angorya at openjdk.org
Tue May 27 15:06:43 UTC 2025
> Please refer to
>
> https://github.com/andy-goryachev-oracle/Test/blob/main/doc/Text/LayoutInfo.md
>
> The RichTextArea control ([JDK-8301121](https://bugs.openjdk.org/browse/JDK-8301121)), or any custom control that needs non-trivial navigation within complex or wrapped text needs a public API to get information about text layout.
>
> This change fixes the missing functionality by adding a new public method to the `Text` and `TextFlow` classes.:
>
>
> /**
> * Obtains the snapshot of the current text layout information.
> * @return the layout information
> * @since 25
> */
> public final LayoutInfo getLayoutInfo()
>
>
> The `LayoutInfo` provides a view into the text layout within `Text`/`TextFlow` nodes such as:
>
> - caret information
> - text lines: offsets and bounds
> - overall layout bounds
> - text selection geometry
> - strike-through geometry
> - underline geometry
>
>
>
>
> ## WARNINGS
>
> Presently, information obtained via certain Text/TextField methods is incorrect with non-zero padding and borders, see [JDK-8341438](https://bugs.openjdk.org/browse/JDK-8341438).
>
> This PR provides correct answers in the new API, leaving the behavior of the existing methods unchanged (there is a compatibility risk associated with trying to fix [JDK-8341438](https://bugs.openjdk.org/browse/JDK-8341438) ).
>
> Also, the RTL support is out of scope for this PR, due to multiple pre-existing conditions, see https://bugs.openjdk.org/browse/JDK-8343557
>
>
> ## Testing
>
> The new APIs can be visually tested using the Monkey Tester on this branch:
> https://github.com/andy-goryachev-oracle/MonkeyTest/tree/text.layout.api
>
> in the Text and TextFlow pages:
> 
>
> Two very basic headful tests have been added.
>
>
> ## See Also
>
> https://github.com/FXMisc/RichTextFX/pull/1246
Andy Goryachev has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains 61 commits:
- cleanup
- Merge remote-tracking branch 'origin/master' into ag.text.layout.api
- Merge remote-tracking branch 'origin/master' into ag.text.layout.api
- cleanup
- removed getStrikeThroughShape
- caret geometry
- review comments
- Merge remote-tracking branch 'origin/master' into ag.text.layout.api
- review comments
- Merge remote-tracking branch 'origin/master' into ag.text.layout.api
- ... and 51 more: https://git.openjdk.org/jfx/compare/9950d33c...de1016be
-------------
Changes: https://git.openjdk.org/jfx/pull/1596/files
Webrev: https://webrevs.openjdk.org/?repo=jfx&pr=1596&range=30
Stats: 1570 lines in 13 files changed: 1474 ins; 52 del; 44 mod
Patch: https://git.openjdk.org/jfx/pull/1596.diff
Fetch: git fetch https://git.openjdk.org/jfx.git pull/1596/head:pull/1596
PR: https://git.openjdk.org/jfx/pull/1596
More information about the openjfx-dev
mailing list