[ 
https://issues.apache.org/jira/browse/NETBEANS-3592?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Eirik Bakke updated NETBEANS-3592:
----------------------------------
    Summary: Workarounds for various JDK Windows LAF bugs on HiDPI screens  
(was: Fix various Windows LAF bugs on HiDPI screens)

> Workarounds for various JDK Windows LAF bugs on HiDPI screens
> -------------------------------------------------------------
>
>                 Key: NETBEANS-3592
>                 URL: https://issues.apache.org/jira/browse/NETBEANS-3592
>             Project: NetBeans
>          Issue Type: Improvement
>          Components: platform - Other
>    Affects Versions: 11.1
>         Environment: Windows with HiDPI screens
>            Reporter: Eirik Bakke
>            Priority: Major
>              Labels: HiDPI, pull-request-available
>         Attachments: Problem 1, incorrect font size.png, Problem 2, OS 
> controls wrong size (after patch).png, Problem 2, OS controls wrong size 
> (before patch).png, Problem 3, uneven text component borders.png, 
> WindowsSwingMultiMonitorTest.png
>
>          Time Spent: 2h
>  Remaining Estimate: 0h
>
> Provide workarounds to various bugs that caused the Windows LAF to be 
> unusable on many HiDPI configurations, typically when an external monitor (or 
> projector) is involved, or is disconnected or connected.
> 1) In certain configurations, the GUI font size would be either way too large 
> or way too small. (I can't remember exactly which configurations caused this, 
> but going through the manual test case list below _will_ trigger it several 
> times.)
> 2) In multi-monitor configurations that involve one HiDPI screen and one 
> regular screen, the size of controls drawn by the OS, such as checkboxes and 
> outline expansion handles, will be incorrect unless the HiDPI screen was the 
> main display at login. I earlier reported this as a JDK bug at 
> https://bugs.openjdk.java.net/browse/JDK-8211715 . (Note that there are a few 
> icons which cannot be fixed using the UIDefaults approach taken here, e.g. 
> checkmarks in JCheckBoxMenuItem.) In some cases, the LAF would previously end 
> up scaling the control images received from the OS using a poor image scaling 
> interpolation; the supplied patch improves the scaling quality in these cases.
> 3) On non-integral scaling levels, e.g. 150%, borders around text components 
> will be of uneven thickness due to rounding error. This patch fixes that. 
> This also happens to JComboBox, but in that case cannot be fixed with a 
> simple patch, since that one does not take its border from UIDefaults.
> I will provide a PR with workarounds.
> Below is a manual test plan that I used to test these patches, on Windows 10. 
> A laptop and one external monitor was used for these tests. After each line 
> in the test plan, the patch is confirmed to work. In _most_ of these cases 
> there is some kind of improvement in behavior from the patch--either a 
> corrected control/font size or at least an improvement in control icon 
> scaling interpolation quality.
> * main display laptop at Windows login (laptop 200%/external 100%)
> * change main display to external monitor while running app
> * restart app
> * change 100% to 150% while running app
> * restart app
> * log out and in again (of Windows--this makes a difference!)
> * change 150% to 100% while running app
> * restart app
> * main display external monitor at login (laptop 200%/external 100%)
> * change main display to laptop while running app
> * restart app
> * change 100% to 150% while running app
> * restart app
> * log out and in again
> * change 150% to 100% while running app
> * restart app
> * change 200% to 150% while running app
> * restart app
> * main display laptop at login (laptop 200%/external 100%), then disconnect 
> external before running app
> * reconnect external while running app
> * restart app
> * log out, disconnect external, log in
> * reconnect external while running app
> * restart app
> * disconnect external while running app
> * main display external monitor at login (laptop 200%/external 100%), then 
> disconnect external while running app
> * reconnect external while running app
> * restart app
> * log out, disconnect external, log in
> * reconnect external while running app
> * restart app
> * main display laptop at login (laptop 200%/external 150%), then disconnect 
> external before running
> * reconnect external while running app
> * log out, disconnect external, log in
> * reconnect external while running app
> * restart app
> * main display external monitor at login (laptop 200%/external 150%), then 
> disconnect external before running
> * reconnect external while running app
> * restart app
> * log out, disconnect external, log in
> * reconnect external while running app
> * restart app
> * main display external at login (laptop 150%, external 100%)
> * change 100% to 150% while running app
> * restart app
> * change main display to laptop (200%), set external display to 100%, log 
> out, disconnect external, log in, run app
> * reconnect external while running app (will be 100%)
> * close laptop lid (will switch to external display)



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@netbeans.apache.org
For additional commands, e-mail: commits-h...@netbeans.apache.org

For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists

Reply via email to