> Problem:
> 
> Check boxes and radio buttons in Windows Look-and-Feel have rendering issues 
> when window is moved from display with one scale to display with a different 
> scale on a multi-monitor setup:
> 
> - Scrawly ticks in checkboxes;
> - Wrong circle relations in selected radio buttons.
> 
> Root-cause:
> We open theme on AWT Toolkit Window which always has Primary Monitor DPI. 
> Due to this when the app window goes to Secondary Screen with different DPI 
> UI buttons
> appear incorrectly rendered. 
> Following is a list proposed changes to fix this issue.
> 
> 
> Proposed Fix with Summary of changes:
> 
> 1. Open a new Theme Handle per the DPI of the Screen where the App window is.
> --> This makes sure we get the correct size for UI buttons based on the DPI 
> of the screen where the app.
> window is.
> 
> 2. GetPartSize() of icons returns size based on standard size = 96 DPI.
> --> This change makes sure that the default size of UI buttons is 96 since we 
> use this on Java side to layout UI.
> 
> 3. Rect size for icons in native paintBackground() function is fetched from 
> Windows that specific DPI.
> -->This makes sure that the UI buttons aren't stretched because the size 
> calculated on Java side is different from what Windows      returns. Thus UI 
> buttons are scaled correctly once we get their size back from Windows.
>  
> 4. Adjust width and the height of the resolution variant image so that for 
> scaling values of 1.25 , 2.25 , and such we  always  floor, while for 1.5, 
> 1.75, 2.5, 2.75 , and such we always ceil.       
> --> This helps make sure that for .25s scaling we get better rendering. 
> This is because when we go from Double to Int for pixel rendering we 
> sometimes need to floor or ceil to get crisp rendering.
> 
> As of now with these changes the rendering is crisp and good for all scaling 
> factors with the exception .25s wherein some small artifact is seen sometimes 
> in rendering of buttons but is still much better compared to what we have now.
> 
> 
> Testing:
> 
> Tested locally on my Windows machine with a 2 monitor setup  125%, 150%, 
> 175%, 225% scaling values and on mach5.
> 
> ___________________________________
>  Monitor 1                |    Monitor 2
> (Primary)                      |
>                                |
>         125%           |    175%
>       150%             |    175%
>       150%             |    225%
>       175%             |    175%
>       175%             |    150%
>       175%             |    225%
> _____________________ |_____________  
> 
> Also tested on setup with scaling values of  up-to 350%.

Rajat Mahajan has updated the pull request incrementally with one additional 
commit since the last revision:

  code changes as per reviewers suggestions

-------------

Changes:
  - all: https://git.openjdk.org/jdk/pull/13701/files
  - new: https://git.openjdk.org/jdk/pull/13701/files/a780bf0d..36bec863

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=13701&range=13
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=13701&range=12-13

  Stats: 9 lines in 4 files changed: 1 ins; 1 del; 7 mod
  Patch: https://git.openjdk.org/jdk/pull/13701.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/13701/head:pull/13701

PR: https://git.openjdk.org/jdk/pull/13701

Reply via email to