<AWT Dev> [OpenJDK 2D-Dev] [9] Review request for 8076545 Text size is twice bigger under Windows L&F on Win 8.1 with HiDPI display

Jim Graham james.graham at oracle.com
Fri Feb 5 19:37:46 UTC 2016


Hi Alexandr,

awt_DesktopProperties.cpp, line 300 - is the "1.0f /" a typo?

Also, is there a still a need for the setFontProperty() variants that 
don't have a scale as the last parameter?

			...jim

On 2/5/2016 2:12 AM, Alexandr Scherbatiy wrote:
>
> Could you review the updated fix:
>    http://cr.openjdk.java.net/~alexsch/8076545/webrev.05
>
>    - The awt_DesktopProperties.cpp file is updated to use scaleX for
> width rescaling and scaleY for height rescaling
>
>    Thanks,
>    Alexandr.
>
> On 2/1/2016 5:51 PM, Jim Graham wrote:
>> Hi Alexandr,
>>
>> In awt_DesktopProperties.cpp you are using the Y scaling factor to
>> scale widths still - see lines 287 (and others in that same function)
>> and then 322 in another function.  It looks like you'll need
>> getInvScaleX() and getInvScaleY().
>>
>> I'll leave it to Phil to comment on the unit test...
>>
>>             ...jim
>>
>> On 2/1/16 4:27 AM, Alexandr Scherbatiy wrote:
>>>
>>> Could you review the updated fix:
>>>    http://cr.openjdk.java.net/~alexsch/8076545/webrev.04/
>>>
>>>   - both LOGPIXELSX and Y are used for the theme size scaling.
>>>   - LOGPIXELSY is used for text metrics height rescaling
>>>
>>>    Thanks,
>>>    Alexandr.
>>>
>>> On 1/29/2016 1:16 PM, Jim Graham wrote:
>>>> Hi Alexandr,
>>>>
>>>> Thanks for investigating the behaviors.
>>>>
>>>> With respect to using LOGPIXELSX or Y, these methods are used to scale
>>>> both horizontal and vertical measurements so we really should have 2
>>>> scale values and rescale methods, one for horizontal use and one for
>>>> vertical...
>>>>
>>>>             ...jim
>>>>
>>>> On 1/29/2016 10:41 AM, Alexandr Scherbatiy wrote:
>>>>>   Could you review the updated fix:
>>>>>    http://cr.openjdk.java.net/~alexsch/8076545/webrev.03
>>>>>
>>>>>   - LOGPIXELSX is changed to  LOGPIXELSY
>>>>>
>>>>> On 11/16/2015 1:43 PM, Jim Graham wrote:
>>>>>> Note that LOGPIXELSY is global and static between reboots so it
>>>>>> doesn't really matter which monitor is used to get the value.
>>>>>>
>>>>>> Also, the issue is that the measurements are in pixels, so if we
>>>>>> convert them into a resolution independent measurement then the rest
>>>>>> of the scaling in the AWT/2D will be correct regardless of any given
>>>>>> monitor's resolution.  We just have to make sure the
>>>>>> "de-pixelization"
>>>>>> of the measurement is an apples-to-apples calculation.
>>>>>>
>>>>>> The question in my mind is whether the values they get from
>>>>>> GetTheme*() and SPI_GETNONCLIENTMETRICS are relative to
>>>>>> LOGPIXELSY, or
>>>>>> the more recent Per-Monitor aware DPI APIs, or ...?  It would be
>>>>>> interesting to see what happens to those values when you change the
>>>>>> DPI settings on Windows 8.1 and not reboot. If they stay constant
>>>>>> until you reboot then LOGPIXELSY on the main screen would be the
>>>>>> value
>>>>>> to use to de-scale them...
>>>>>
>>>>>     I tried to use the "Change the size of all items" slider on
>>>>> Windows
>>>>> 8.1 without rebooting.
>>>>>     GetDpiForMonitor() returns the updated DPI values: 192, 144, 96
>>>>>     LOGPIXELSY returns unchanged values:  192, 192, 192
>>>>>     SystemParametersInfo(SPI_GETNONCLIENTMETRICS,...) returns
>>>>> unchanged
>>>>> NONCLIENTMETRICS
>>>>>     GetThemePartSize() returns unchanged theme part sizes
>>>>>
>>>>>     It seems that theme part sizes behave in the same way as the
>>>>> LOGPIXELSY in this case.
>>>>>
>>>>>     Thanks,
>>>>>     Alexandr.
>>>>>
>>>>>>
>>>>>>             ...jim
>>>>>>
>>>>>> On 11/16/2015 12:51 PM, Phil Race wrote:
>>>>>>> That seems better. But one more question to get a point clarified.
>>>>>>> You are using getDesktopWindow() which is for the primary monitor.
>>>>>>> I assume that the 'inversion' results in the value being used to be
>>>>>>> independent
>>>>>>> of the monitor in a multi-mon situation and so when we move to a 2nd
>>>>>>> monitor
>>>>>>> that inverted size remains valid ?
>>>>>>>
>>>>>>> If so looks good to me.
>>>>>>>
>>>>>>> -phil.
>>>>>>>
>>>>>>> On 11/16/2015 06:07 AM, Alexander Scherbatiy wrote:
>>>>>>>>
>>>>>>>>   Hello,
>>>>>>>>
>>>>>>>>   Could you review the updated fix:
>>>>>>>> http://cr.openjdk.java.net/~alexsch/8076545/webrev.02
>>>>>>>>
>>>>>>>>   - round is used instead of ceil
>>>>>>>>   - inverted scales are used
>>>>>>>>
>>>>>>>>   Thanks,
>>>>>>>>   Alexandr.
>>>>>>>>
>>>>>>>>
>>>>>>>> On 10/30/2015 10:40 PM, Jim Graham wrote:
>>>>>>>>> In this case round may be better. ceil() is more for cases
>>>>>>>>> where you
>>>>>>>>> needed "at least X amount of room", but I don't think a font
>>>>>>>>> size is
>>>>>>>>> an "at least this much" kind of case.
>>>>>>>>>
>>>>>>>>> Also, I've been toying with the idea that use of ceil() and
>>>>>>>>> floor()
>>>>>>>>> in any DPI-adjustment equations should really be "ceil(val -
>>>>>>>>> epsilon)" or "floor(ceil + epsilon)" for some small value of
>>>>>>>>> epsilon
>>>>>>>>> chosen just large enough to prevent various round-off errors from
>>>>>>>>> affecting the outcome.  One idea is for 1/256 as the value of
>>>>>>>>> epsilon
>>>>>>>>> since that could equate to the smallest measurable difference in
>>>>>>>>> terms of alpha or interpolation results (or 1/512 for "half the
>>>>>>>>> smallest quantum")...
>>>>>>>>>
>>>>>>>>>             ...jim
>>>>>>>>>
>>>>>>>>> On 10/29/15 1:36 PM, Phil Race wrote:
>>>>>>>>>> size->cx = (int)ceil(size->cx / scale);
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> So if size->cx / scale works out to be 12.0001 you will round
>>>>>>>>>> it up
>>>>>>>>>> to 13?
>>>>>>>>>>
>>>>>>>>>> Can you check what pixel size windows gives you in such a case ?
>>>>>>>>>> I'd be a little surprised if they did that rather than round.
>>>>>>>>>>
>>>>>>>>>> Is the SetFontProperty that does not accept a scale parameter
>>>>>>>>>> still
>>>>>>>>>> used
>>>>>>>>>> somewhere ?
>>>>>>>>>>
>>>>>>>>>> -phil.
>>>>>>>>>>
>>>>>>>>>> On 10/29/2015 04:53 AM, Sergey Bylokhov wrote:
>>>>>>>>>>> On 17.07.15 16:27, Alexander Scherbatiy wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>> - Sergey's point about multi-mon should be checked out.
>>>>>>>>>>>>      Windows 8.1 has option "Let me choose one scaling level
>>>>>>>>>>>> for
>>>>>>>>>>>> all my
>>>>>>>>>>>> displays".
>>>>>>>>>>>>      If I unset it I am able to change the size of all items.
>>>>>>>>>>>> However,
>>>>>>>>>>>> the DPI which returns GetDPIForMonitor is still 2 on HiDPI
>>>>>>>>>>>> displays.
>>>>>>>>>>>
>>>>>>>>>>> This version looks fine, but I am sure it can be double
>>>>>>>>>>> checked on
>>>>>>>>>>> windows 10 at some moment as well.
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>
>>>
>


More information about the awt-dev mailing list