RFR: JDK-8294427 - Check boxes and radio buttons have rendering issues on Windows in High DPI env [v5]
Rajat Mahajan
rmahajan at openjdk.org
Fri May 26 01:18:02 UTC 2023
On Thu, 18 May 2023 23:00:25 GMT, Sergey Bylokhov <serb at openjdk.org> wrote:
>> Perhaps, this needs additional details. The size of checkbox and radio button is 13 as reported by Theme API for the standard DPI of 96. Being a prime number, 13 doesn't scale well, there's always fractional part unless the scale is whole. Thus, the scaled size never matches.
>>
>> As the result, `CachedPainter` seems to apply a scale to compensate for that — whether we choose ceil or floor. The above formula gives better results.
>>
>> The entire thing should have been simpler: a `MultiResolutionImage` which paints the background according to the scale requested. Yet it proved to be not as simple. We're planning to look further into simplifying it if possible and, alternatively or in addition to, considering [dynamic layout based on graphics configuration](https://github.com/openjdk/jdk/pull/13701#discussion_r1187985627) as you suggested above.
>>
>> The current solution may be not perfect but it provides better rendering compared to what we have now: *the controls look crisp only on the main display*.
>
> But still why the size on the components are so different? is it really caused by one "pixel/unit" we requested from the native?
So, basically for w,h =19 we calculate a DPI of 140 and Dimension d = getPartSize(getTheme(widget, dpi), part, state); at line 172 of ThemeReader.java call returns a part size of 13 x 13 provided by windows as it is closer to DPI=120 (for 125% scaling).
While for w,h =20 we calculate a DPI of 147 and Dimension d = getPartSize(getTheme(widget, dpi), part, state); at line 172 of ThemeReader.java call returns a part size of 20 x 20 provided by windows as it is closer to DPI=144 (for 150% scaling).
Thus part size calculated by us and provided by Windows matches and hence we see bigger properly rendered buttons while for the w,h=19 case we have 19x19 , while windows gives 13x13
and hence you see scaled down buttons with bad rendering.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/13701#discussion_r1206133530
More information about the client-libs-dev
mailing list