[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