On Thu, 23 Feb 2023 16:29:29 GMT, Andy Goryachev <ango...@openjdk.org> wrote:

>> modules/javafx.controls/src/main/java/javafx/scene/control/skin/TextFieldSkin.java
>>  line 805:
>> 
>>> 803:                 // appear at the left of the centered prompt.
>>> 804:                 newX = midPoint - 
>>> promptNode.getLayoutBounds().getWidth() / 2;
>>> 805:                 if (newX > 0) {
>> 
>> Let's say `caretWidth / 2` is 5, and that would be position we would show 
>> the prompt text if it doesn't fit.
>> 
>> If the `newX` calculation is less than 5, but greater than 0, the prompt 
>> text would be further to the left than you'd expect.
>> 
>> So I think this line should be:
>> 
>> Suggestion:
>> 
>>                 if (newX > caretWidth / 2) {
>> 
>> 
>> Probably best to put that in a local variable.
>
> this is undocumented, I think, but the caret path can be one of the three 
> things:
> 1. a single point (MoveTo, I think)
> 2. a single line - MoveTo followed by a LineTo
> 3. two separate lines (split caret) - MoveTo, LineTo, MoveTo, LineTo (split 
> caret is explicitly ignored on line 252)
> 
> One would think that the caret width can be changed  by CSS, but it is not 
> easy.  The caretPath on TextInputControl:184 has no CSS class name set, so 
> the width cannot be changed trivially via a stylesheet.  I suppose the 
> application code can dig the internals looking for paths and setting widths 
> manually, but this would be a highly unreliable move.
> 
> So I think this caretWidth can be other than 1.0 (line 233) for the purposes 
> of this PR.

Thanks for these details @andy-goryachev-oracle . I was trying to figure out 
how I can change the caret width. Just to check the behavior of text alignment, 
I changed the hard coded value at line no 233.

> Let's say `caretWidth / 2` is 5, and that would be position we would show the 
> prompt text if it doesn't fit.
> 
> If the `newX` calculation is less than 5, but greater than 0, the prompt text 
> would be further to the left than you'd expect.
> 
> So I think this line should be:
> 
> Probably best to put that in a local variable.

The newX is calculated symmetrically from midpoint using the text length. If we 
consider the condition `newX > careWidth/2`, we will be aligning the text at 
the position of `caretWidth/2` even when there is space for the whole text. 
Which means that the text will be aligned to left even when there is space for 
whole text with CENTER alignment. So in my opinion, current conditions and 
values gives better alignment behavior.

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

PR: https://git.openjdk.org/jfx/pull/980

Reply via email to