| /* |
| * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. |
| * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
| * |
| * This code is free software; you can redistribute it and/or modify it |
| * under the terms of the GNU General Public License version 2 only, as |
| * published by the Free Software Foundation. |
| * |
| * This code is distributed in the hope that it will be useful, but WITHOUT |
| * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
| * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
| * version 2 for more details (a copy is included in the LICENSE file that |
| * accompanied this code). |
| * |
| * You should have received a copy of the GNU General Public License version |
| * 2 along with this work; if not, write to the Free Software Foundation, |
| * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
| * |
| * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
| * or visit www.oracle.com if you need additional information or have any |
| * questions. |
| */ |
| |
| |
| /* |
| @test |
| @bug 8142861 8143062 8147016 |
| @summary Check if multiresolution image behaves properly |
| on HiDPI + non-HiDPI display pair. |
| @author a.stepanov |
| @library /lib/testlibrary |
| @build jdk.testlibrary.OSInfo |
| @run applet/manual=yesno MultiDisplayTest.html |
| */ |
| |
| |
| import java.applet.Applet; |
| import java.awt.*; |
| import java.awt.event.*; |
| import java.awt.image.*; |
| import jdk.testlibrary.OSInfo; |
| |
| |
| public class MultiDisplayTest extends Applet { |
| |
| private static final int W = 200, H = 200; |
| |
| private static final BaseMultiResolutionImage IMG = |
| new BaseMultiResolutionImage(new BufferedImage[]{ |
| generateImage(1, Color.BLACK), generateImage(2, Color.BLUE)}); |
| |
| private static boolean checkOS() { |
| OSInfo.OSType os = OSInfo.getOSType(); |
| return (os.equals(OSInfo.OSType.WINDOWS) || |
| os.equals(OSInfo.OSType.MACOSX)); |
| } |
| |
| public void init() { this.setLayout(new BorderLayout()); } |
| |
| public void start() { |
| |
| Button b = new Button("Start"); |
| b.setEnabled(checkOS()); |
| |
| b.addActionListener(new ActionListener() { |
| @Override |
| public void actionPerformed(ActionEvent e) { |
| |
| ParentFrame p = new ParentFrame(); |
| new ChildDialog(p); |
| } |
| }); |
| |
| add(b, BorderLayout.CENTER); |
| |
| validate(); |
| setVisible(true); |
| } |
| |
| |
| private static BufferedImage generateImage(int scale, Color c) { |
| |
| BufferedImage image = new BufferedImage( |
| scale * W, scale * H, BufferedImage.TYPE_INT_RGB); |
| Graphics g = image.getGraphics(); |
| g.setColor(c); |
| g.fillRect(0, 0, scale * W, scale * H); |
| |
| g.setColor(Color.WHITE); |
| Font f = g.getFont(); |
| g.setFont(new Font(f.getName(), Font.BOLD, scale * 48)); |
| g.drawChars((scale + "X").toCharArray(), 0, 2, scale * W / 2, scale * H / 2); |
| |
| return image; |
| } |
| |
| private static class ParentFrame extends Frame { |
| |
| public ParentFrame() { |
| EventQueue.invokeLater(this::CreateUI); |
| } |
| |
| private void CreateUI() { |
| |
| addWindowListener(new WindowAdapter() { |
| @Override |
| public void windowClosing(WindowEvent e) { dispose(); } |
| }); |
| setSize(W, H); |
| setLocation(50, 50); |
| setTitle("parent"); |
| setResizable(false); |
| setVisible(true); |
| } |
| |
| @Override |
| public void paint(Graphics gr) { |
| gr.drawImage(IMG, 0, 0, this); |
| } |
| } |
| |
| private static class ChildDialog extends Dialog { |
| |
| public ChildDialog(Frame f) { |
| super(f); |
| EventQueue.invokeLater(this::CreateUI); |
| } |
| |
| private void CreateUI() { |
| |
| addWindowListener(new WindowAdapter() { |
| @Override |
| public void windowClosing(WindowEvent e) { dispose(); } |
| }); |
| setSize(W, H); |
| setTitle("child"); |
| setResizable(false); |
| setModal(true); |
| setVisible(true); |
| } |
| |
| @Override |
| public void paint(Graphics gr) { |
| gr.drawImage(IMG, 0, 0, this); |
| } |
| } |
| } |