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.

Alright, thanks for checking this.

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

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

Reply via email to