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

Eirik Bakke updated NETBEANS-3592:
----------------------------------
    Description: 
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. 
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 sign-in (external at 200% HiDPI scaling/main at 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
* change 150% to 100% while running app
* restart app
* main display external monitor at sign-in (external 200%/main 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 sign-in (external 200%/main 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 sign-in (200%/100%), then disconnect 
external while running app (forgot an initial step here; initial data pasted in 
from step 9)
* reconnect external while running app
* restart app
* log out, disconnect external, log in
* reconnect external while running app
* restart app
* main display laptop at sign-in (200%/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 sign-in (200%/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 sign-in (external 150%, main 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)

  was:
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. (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. 
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 sign-in (external at 200% HiDPI scaling/main at 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
* change 150% to 100% while running app
* restart app
* main display external monitor at sign-in (external 200%/main 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 sign-in (external 200%/main 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 sign-in (200%/100%), then disconnect 
external while running app (forgot an initial step here; initial data pasted in 
from step 9)
* reconnect external while running app
* restart app
* log out, disconnect external, log in
* reconnect external while running app
* restart app
* main display laptop at sign-in (200%/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 sign-in (200%/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 sign-in (external 150%, main 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)


> Fix various 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
>         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
>
>
> 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. 
> 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 sign-in (external at 200% HiDPI scaling/main at 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
> * change 150% to 100% while running app
> * restart app
> * main display external monitor at sign-in (external 200%/main 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 sign-in (external 200%/main 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 sign-in (200%/100%), then disconnect 
> external while running app (forgot an initial step here; initial data pasted 
> in from step 9)
> * reconnect external while running app
> * restart app
> * log out, disconnect external, log in
> * reconnect external while running app
> * restart app
> * main display laptop at sign-in (200%/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 sign-in (200%/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 sign-in (external 150%, main 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