On Thu, 15 Feb 2024 10:36:51 GMT, Karthik P K <k...@openjdk.org> wrote:

>> I think we should simplify the `getHitInfo` method in the `TextLayout` 
>> interface.
>> 
>> The code currently seems to be making distinctions where there are none.  
>> `TextFlow`s provide spans, while `Text`s provide a text. `getHitInfo` can 
>> take advantage of this to avoid the `text` and `forTextFlow` parameters 
>> altogether.  This will reduce confusion (as there is no distinction) and 
>> also avoids cases that are non-sensical (providing `text` while 
>> `forTextFlow` is `true` or vice versa).
>> 
>> Previous changes to this code (when the parameter `text` was introduced to 
>> `getHitInfo`) should probably be partially undone and simplified with this 
>> new knowledge.
>
>> I think we should simplify the `getHitInfo` method in the `TextLayout` 
>> interface.
>> 
>> The code currently seems to be making distinctions where there are none. 
>> `TextFlow`s provide spans, while `Text`s provide a text. `getHitInfo` can 
>> take advantage of this to avoid the `text` and `forTextFlow` parameters 
>> altogether. This will reduce confusion (as there is no distinction) and also 
>> avoids cases that are non-sensical (providing `text` while `forTextFlow` is 
>> `true` or vice versa).
>> 
>> Previous changes to this code (when the parameter `text` was introduced to 
>> `getHitInfo`) should probably be partially undone and simplified with this 
>> new knowledge.
> 
> Thanks for reviewing @hjohn 
> Certainly we could simplify the `getHitInfo` method but the complication 
> starts when we have to support Text node embedded in TextFlow. 
> Just to differentiate Text node and TextFlow, spans can be used as you 
> suggested. I had to introduce these parameters for the case of Text node 
> embedded in TextFlow. On top of that we need to support emojis and RTL text. 
> This is where it started getting complex and I had to use these new 
> parameters. If you have any thoughts on this, please let me know.
> I'll got through all the comments and incorporate wherever possible.

@karthikpandelu You mentioned there is special casing going on when a `Text` is 
part of a `TextFlow`. What are those cases and where is this happening? How 
does it even know that a `Text` is involved and that it is part of a `TextFlow`?

IMHO, this class is in desperate need of simplification (out of scope of course 
for this PR), which I think can be done by having `Text` supply a (single) 
`TextSpan`, and removing the option to supply the content as a `String` + 
`Font`. 

However, that would break down if there are also special cases for `Text` 
within `TextFlow` -- I can't think of what those would be, and if it indeed is 
the case, I strongly suspect that `PrismTextLayout` may be overstepping its 
mandate (ie, such concerns when a `Text` is nested in a `TextFlow` should be 
the concern of `TextFlow`).  Since I think simplifying this class would be a 
very good step, I'd just like to ensure we're not introducing more special 
casing now to make this future work even more impossible.

-------------

PR Comment: https://git.openjdk.org/jfx/pull/1323#issuecomment-1952298422

Reply via email to