[prev in list] [next in list] [prev in thread] [next in thread]
List: openjdk-2d-dev
Subject: Integrated: JDK-8294427 - Check boxes and radio buttons have rendering issues on Windows in High DPI
From: Rajat Mahajan <rmahajan () openjdk ! org>
Date: 2023-06-28 21:10:11
Message-ID: cDgpgvEIvBY4pKpzk6VvOW0sj4p8yu4ZUTMTfKLkgz4=.b4e40bab-bedf-4cfa-9d2d-5b6b2267ab1c () github ! com
[Download RAW message or body]
On Thu, 27 Apr 2023 19:25:55 GMT, Rajat Mahajan <rmahajan@openjdk.org> wrote:
> 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 automated testing. Also tested with SwingSet2 .
>
> ___________________________________
> 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%.
This pull request has now been integrated.
Changeset: a63afa4a
Author: Rajat Mahajan <rmahajan@openjdk.org>
Committer: Alexey Ivanov <aivanov@openjdk.org>
URL: https://git.openjdk.org/jdk/commit/a63afa4aa62863d1a199a0fb7d2f56ff8fcd04fd
Stats: 198 lines in 5 files changed: 100 ins; 36 del; 62 mod
8294427: Check boxes and radio buttons have rendering issues on Windows in High DPI \
env
Reviewed-by: aivanov, achung
-------------
PR: https://git.openjdk.org/jdk/pull/13701
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic