--- /dev/null 2016-02-05 14:39:08.906021640 +0300 +++ new/test/java/awt/image/multiresolution/MultiDisplayTest/MultiDisplayTest.html 2016-02-05 14:46:44.200932828 +0300 @@ -0,0 +1,62 @@ + + + + + MultiDisplayTest + + + + +This test is for OS X or Windows only. +For other OSes please simply push "Pass". + +The test requires two-display configuration, where + +- 1st display is operating in HiDPI mode; +- 2nd display is non-HiDPI. + +In other cases please simply push "Pass". + + +To run test please push "Start". + +Then drag parent / child to different displays and check +that the proper image is shown for every window +(must be "black 1x" for non-HiDPI and "blue 2x" for HiDPI). + +Please try to drag both parent and child, +do it fast several times and check if no artefacts occur. + +Try to switch display resolution (high to low and back). + +For Mac OS X please check also the behavior for +translucent windows appearing on the 2nd (non-active) display +and Mission Control behavior. + +Close the windows. + +In case if no issues occur please push "Pass", otherwise "Fail". + + + --- /dev/null 2016-02-05 14:39:08.906021640 +0300 +++ new/test/java/awt/image/multiresolution/MultiDisplayTest/MultiDisplayTest.java 2016-02-05 14:46:45.012936856 +0300 @@ -0,0 +1,147 @@ +/* + * 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); + } + } +}