On Wed, 9 Oct 2024 22:41:29 GMT, Andy Goryachev <ango...@openjdk.org> wrote:
>> 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 24 >> */ >> public final LayoutInfo getLayoutInfo() >> >> >> The immutable `LayoutInfo` structure contains information about: >> >> - text lines: offsets and bounds >> - overall layout bounds >> >> TBD: >> >> the platform can also report additional information such as: >> >> - individual text lines' left and right side bearings (what are those?) >> - text runs within each line > > Andy Goryachev has updated the pull request incrementally with one additional > commit since the last revision: > > convert to wrapper One additional thought/question: There is a need to extract a few more data points from the text layout in addition to the text lines, specifically: - bounds of the (selection) range, as rectangles - strikethrough range shape (as `PathElement[]` and/or rectangles) - underline range shape (as `PathElement[]` and/or rectangles) We currently have `Text/TextFlow.underlineShape(int,int)`, `.rangeShape(int,int)` which return `PathElement[]` in an undocumented way. There is no corresponding `.strikeThroughShape()` method, or a way to retrieve the geometric bounds as lines/rectangles. Granted, one can attempt to analyze the `PathElement[]` and convert it to geometry, but it seems we should avoid asking the clients to do that. So the question are: - should we add these data points to LayoutInfo - if so, in what form? i.e. as individual methods or as an array of Line/Rectangle objects, - should we add the `.strikeThroughShape()` to Text/TextFlow, or simply adding it here should be sufficient? ------------- PR Comment: https://git.openjdk.org/jfx/pull/1596#issuecomment-2405873364