On Sun, 10 Sep 2023 20:50:18 GMT, John Hendrikx <jhendr...@openjdk.org> wrote:

> There are a number of tickets open related to text rendering:
> 
> https://bugs.openjdk.org/browse/JDK-8314215
> 
> https://bugs.openjdk.org/browse/JDK-8145496
> 
> https://bugs.openjdk.org/browse/JDK-8129014
> 
> They have in common that wrapped text is taking the trailing spaces on each 
> wrapped line into account when calculating where to wrap.  This looks okay 
> for text that is left aligned (as the spaces will be trailing the lines and 
> generally aren't a problem, but looks weird with CENTER and RIGHT alignments. 
>  Even with LEFT alignment there are artifacts of this behavior, where a line 
> like `AAA  BBB  CCC` (note the **double** spaces) gets split up into `AAA  `, 
> `BBB  ` and `CCC`, but if space reduces further, it will wrap **too** early 
> because the space is taken into account (ie. `AAA` may still have fit just 
> fine, but `AAA  ` doesn't, so the engine wraps it to `AA` + `A  ` or 
> something).
> 
> The fix for this is two fold; first the individual lines of text should not 
> include any trailing spaces into their widths; second, the code that is 
> taking the trailing space into account when wrapping should ignore all 
> trailing spaces (currently it is ignoring all but one trailing space).  With 
> these two fixes, the layout in LEFT/CENTER/RIGHT alignments all look great, 
> and there is no more early wrapping due to a space being taking into account 
> while the actual text still would have fit (this is annoying in tight 
> layouts, where a line can be wrapped early even though it looks like it would 
> have fit).
> 
> If it were that simple, we'd be done, but there may be another issue here 
> that needs solving: wrapped aligned TextArea's.
> 
> TextArea don't directly support text alignment (via a setTextAlignment method 
> like Label) but you can change it via CSS.
> 
> For Left alignment + wrapping, TextArea will ignore any spaces typed before a 
> line that was wrapped.  In other words, you can type spaces as much as you 
> want, and they won't show up and the cursor won't move.  The spaces are all 
> getting appended to the previous line.  When you cursor through these spaces, 
> the cursor can be rendered out of the control's bounds.  To illustrate, if 
> you have the text `AAA                 BBB CCC`, and the text gets wrapped to 
> `AAA`, `BBB`, `CCC`, typing spaces before `BBB` will not show up.  If you 
> cursor back, the cursor may be outside the control bounds because so many 
> spaces are trailing `AAA`.
> 
> The above behavior has NOT changed, is pretty standard for wrapped text 
> controls, and IMHO does not need further attent...

>From https://www.unicode.org/reports/tr14-4/


5.6 Break opportunity after characters (A)
Breaking Spaces
SPACE (SP) � U+0020

The space characters are explicit break opportunities, but spaces at the end of 
a line are not measured for fit. If there is a sequence of space characters, 
and breaking after any of the space characters would result in the same visible 
line, the line breaking position after the last space character in the sequence 
is the locally most optimal one. In other words, since the last character 
measured for fit is BEFORE the space character, any number of space characters 
are kept together invisibly on the previous line and the first non-space 
character starts the next line.

It is sometimes convenient to use SP, but not the other breaking spaces to 
override context based behavior of other characters under the "anywhere, except 
where prohibited" style of line breaking (context analysis style 2).

EN QUAD � U+2000
EM QUAD � U+2001
EN SPACE � U+2002
EM SPACE � U+2003
THREE-PER-EM SPACE � U+2004
FOUR-PER-EM SPACE � U+2005
SIX-PER-EM SPACE � U+2006
PUNCTUATION SPACE � U+2008
THIN SPACE � U+2009
HAIR SPACE � U+200A

The preceding list of characters all have a specific width, but behave 
otherwise as breaking spaces .

ZERO WIDTH SPACE (ZWSP) � U+200B

This character does not have width. It is used in a style 2 context analysis to 
provide additional (invisible) break opportunities.

IDEOGRAPHIC SPACE � U+3000

This character has the width of an ideograph but like ZWSP is fully subject to 
the style 2 context analysis.


A quick check with (the latest?) MS Word 2208 on Windows shows that, at least 
with EN QUAD U+2000 it is treated as a regular character (i.e. it is always 
"displayed" even if right aligned).

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

PR Comment: https://git.openjdk.org/jfx/pull/1236#issuecomment-1785860787

Reply via email to