On Wed, 5 Feb 2025 13:08:07 GMT, Jose Pereda <[email protected]> wrote:
>> Andy Goryachev has updated the pull request incrementally with one
>> additional commit since the last revision:
>>
>> 25 25
>
> Overall it looks really good, the new API is quite useful in some scenarios.
> I've done some successful tests and left some comments and questions about
> the API.
thank you for thoughtful comments, @jperedadnr !
> modules/javafx.graphics/src/main/java/javafx/scene/text/LayoutInfo.java line
> 91:
>
>> 89: * @return the immutable list of {@code Rectangle2D} objects
>> 90: */
>> 91: public abstract List<Rectangle2D> selectionShape(int start, int end,
>> boolean includeLineSpacing);
>
> See my comment below about using `javafx.scene.shape.Rectangle` instead of
> `javafx.geometry.Rectangle2D`: otherwise the API is misleading:
> `selectionShape` doesn't return a `Shape` subclass.
Good point. The word 'shape' might be confusing, although it is still correct
in human terms (it is a shape, after all). I think it's ok, but we could use
the word "geometry" for these methods `selectionGeometry` /
`strikeThroughGeometry` / `underlineGeometry`, what do other people think?
As for using `javafx.scene.shape.Rectangle` - it is too heavy of an object,
with properties and everything, it's not what we ask from this method.
> modules/javafx.graphics/src/main/java/javafx/scene/text/LayoutInfo.java line
> 91:
>
>> 89: * @return the immutable list of {@code Rectangle2D} objects
>> 90: */
>> 91: public abstract List<Rectangle2D> selectionShape(int start, int end,
>> boolean includeLineSpacing);
>
> I take that `LayoutInfo::selectionShape` should match the existing API
> `TextFlow::rangeShape` for the same selection coordinates.
>
> I wonder if you have tested this, with different insets. I take that with
> your current implementation, for `Rectangle2D` objects, it makes sense to
> have the insets of the TextFlow/Text node, but shapes don't include them.
We've got https://bugs.openjdk.org/browse/JDK-8341438 and a possibility of a
regression if we change the existing methods.
I would very much like to get your thoughts on this.
> modules/javafx.graphics/src/main/java/javafx/scene/text/TextLineInfo.java
> line 56:
>
>> 54: * @since 25
>> 55: */
>> 56: public record TextLineInfo(int start, int end, Rectangle2D bounds) {
>
> I understand that you are using `javafx.geometry.Rectangle2D` for this PR to
> hold all caret/layout/line information related to bounds, and that seems to
> work fine so far.
>
> However, given that the `TextFlow`/`Text` APIs already provide information
> using `javafx.scene.shape.PathElement`, and given that as a result of this PR
> users will be able to query either old and new APIs, I was wondering if
> another `Shape` subclass might be better for the new API instead of
> `Rectangle2D`: As is now, you can't easily combine `Rectangle2D` with
> `PathElement` objects (in fact you need to do a manual conversion in
> `TextUtils::getRange` or `TextUtils::toRectangle2D`).
>
> Have you thought about using `javafx.scene.shape.Rectangle` instead? That
> would simplify your internal operations, and would be more easy to use for
> developers (for instance, drawing new shapes based the LayoutInfo, like in
> your MonkeyTester `LayoutInfoVisualizer` class).
it was intentional decision to use the light weight `Rectangle2D` class instead
of a `Shape` (which extends `Node`).
-------------
PR Comment: https://git.openjdk.org/jfx/pull/1596#issuecomment-2638059384
PR Review Comment: https://git.openjdk.org/jfx/pull/1596#discussion_r1943674678
PR Review Comment: https://git.openjdk.org/jfx/pull/1596#discussion_r1943677479
PR Review Comment: https://git.openjdk.org/jfx/pull/1596#discussion_r1943679700