[OpenJDK 2D-Dev] [9] Review request for 8142966 Wrong cursor position in text components on HiDPI display

Alexander Scherbatiy alexandr.scherbatiy at oracle.com
Sat Feb 6 15:28:47 UTC 2016


On 05/02/16 23:39, Phil Race wrote:
> Two things strike me when I read this
>
> 1) Initial surprise at how deep into the font code it goes.
> Perhaps there are alternatives.
>
> 2) That it changes to using the linear metrics for measuring advance.
> Regardless of (1) I do not think (2) is correct. I am fairly sure this
> will lead to changes in text advance. It seems like it must throw
> away adjusted metrics as a result of glyph hinting.
>
> I don't know what the fix should be, since I have not looked at the
> problem top-down, I am just seeing the bottom-up proposed solution.
> So all I can say for now is that it needs to be at least somewhat 
> different.

   There was the same issue on Mac OS X which has been fixed in the 
similar way:
   8013569 [macosx] JLabel preferred size incorrect on retina displays 
with non-default font size
     https://bugs.openjdk.java.net/browse/JDK-8013569
     http://cr.openjdk.java.net/~serb/7190349/webrev.04/

   The problem is that in many case for UI scale 2 we return to a user 
an unscaled value.
   But a value for transformed glyph advance, rounded and descaled can 
differ from just rounded glyph advance.

  For example, font[dialog, plain, 12] char 'a':
  transform: 12, advance: 7.35,  rounded advance: 8
  transform: 24, advance: 14.70 round advance: 14

  and 8 does not equal 14 / 2.

   The solution for Mac OS X was to get the glyph advance using only 
font transform, round it and then apply the dev transform:

CGGlyphImages.m:
  481     advance = CGSizeApplyAffineTransform(advance, strike->fFontTx);
  482     if (!JRSFontStyleUsesFractionalMetrics(strike->fStyle)) {
  483         advance.width = round(advance.width);
  484         advance.height = round(advance.height);
  485     }
  486     advance = CGSizeApplyAffineTransform(advance, strike->fDevTx);

   Thanks,
   Alexandr.
>
> -phil.
>
> On 01/27/2016 01:26 PM, Alexander Scherbatiy wrote:
>>
>> Hello,
>>
>> Could you review the fix:
>>   bug: https://bugs.openjdk.java.net/browse/JDK-8142966
>>   webrev: http://cr.openjdk.java.net/~alexsch/8142966/webev.00/
>>
>>  The proposed fix rounds a glyph advance first and then scales it if 
>> UI scales do not equal to one.
>>
>>  Thanks,
>>  Alexandr.
>>
>




More information about the 2d-dev mailing list