> When a list of icons is set on a window, the most appropiate icon is selected 
> depending on the graphics configuration. But if the graphics configuration 
> changes (because the window is moved to a different screen, or because the 
> DPI settings of the screen is changed), the frame icon isn't updated.
> 
> Here is an example illustrating the issue:
> 
>     public static void main(String[] args) throws Exception {
>         SwingUtilities.invokeLater(() -> {
>             JFrame frame = new JFrame("Window Icon Test");
>             frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
>             frame.setSize(400, 300);
>             frame.setVisible(true);
> 
>             List<Image> images = new ArrayList<>();
>             for (int size = 16; size <= 32; size++) {
>                 // create an image displaying the size used
>                 BufferedImage image = new BufferedImage(size, size, 
> BufferedImage.TYPE_INT_ARGB);
>                 Graphics2D g = image.createGraphics();
>                 g.setFont(new Font("dialog", Font.BOLD, 12));
>                 g.setColor(Color.BLACK);
>                 g.drawString(String.valueOf(size), 0, size - (size - 
> g.getFont().getSize()) / 2);
>                 images.add(image);
>             }
> 
>             frame.setIconImages(images);
>         });
>     }
> 
> On Windows if the screen scaling is set to 100% the 16x16 icon is picked from 
> the list. If the scaling of the screen is set to 150% while the application 
> is running, the 16x16 icon is upscaled and looks blurry.
> 
> A way to work around this issue is to listen for graphics configuration 
> changes with:
> 
>     frame.addPropertyChangeListener("graphicsConfiguration", event -> 
> frame.setIconImages(frame.getIconImages()));
> 
> 
> Ideally this should be done automatically by the JDK. Maybe the `WindowPeer` 
> could call `updateIconImages()` when `updateGraphicsData()` or 
> `displayChanged()` is invoked?

Emmanuel Bourg has updated the pull request incrementally with five additional 
commits since the last revision:

 - Test case for the window icon update on DPI change (other changes)
 - Test case for the window icon update on DPI change (@compile not needed)
 - Test case for the window icon update on DPI change (center the frame)
 - Test case for the window icon update on DPI change (specific message for 
timeouts)
 - Test case for the window icon update on DPI change (icon with a white 
background and centered text)

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

Changes:
  - all: https://git.openjdk.java.net/jdk/pull/6180/files
  - new: https://git.openjdk.java.net/jdk/pull/6180/files/0465d84d..ea61ec84

Webrevs:
 - full: https://webrevs.openjdk.java.net/?repo=jdk&pr=6180&range=02
 - incr: https://webrevs.openjdk.java.net/?repo=jdk&pr=6180&range=01-02

  Stats: 19 lines in 1 file changed: 12 ins; 2 del; 5 mod
  Patch: https://git.openjdk.java.net/jdk/pull/6180.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/6180/head:pull/6180

PR: https://git.openjdk.java.net/jdk/pull/6180

Reply via email to