On Thu, 6 Jan 2022 09:09:04 GMT, Emmanuel Bourg <d...@openjdk.java.net> wrote:
>> 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? > > 1. Run the test code on a screen with DPI scaling set to 100%, the frame icon > displayed should be "16" > >  > > 2. Change the DPI scaling of the screen (or move the frame to a secondary > screen with a different scaling), the frame icon should change ("20" at 125%, > "24" at 150%) > >  @ebourg can you add one ? ------------- PR: https://git.openjdk.java.net/jdk/pull/6180