> 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: Update src/java.desktop/windows/classes/com/sun/java/swing/plaf/windows/XPStyle.java Co-authored-by: Andrey Turbanov <turban...@gmail.com> ------------- Changes: - all: https://git.openjdk.org/jdk/pull/13701/files - new: https://git.openjdk.org/jdk/pull/13701/files/179faf6a..00ce4978 Webrevs: - full: https://webrevs.openjdk.org/?repo=jdk&pr=13701&range=03 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=13701&range=02-03 Stats: 1 line in 1 file changed: 0 ins; 0 del; 1 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