< prev index next >

test/java/awt/Robot/HiDPIMouseClick/HiDPIRobotMouseClick.java

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 2015, 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. --- 1,7 ---- /* ! * Copyright (c) 2015, 2017, 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.
*** 25,73 **** import java.awt.Rectangle; import java.awt.Robot; import java.awt.event.InputEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; ! import javax.swing.UIManager; /* @test * @bug 8073320 * @summary Windows HiDPI support ! * @author Alexander Scherbatiy ! * @requires (os.family == "windows") ! * @run main/othervm -Dsun.java2d.win.uiScale=2 HiDPIRobotMouseClick */ public class HiDPIRobotMouseClick { private static volatile int mouseX; private static volatile int mouseY; public static void main(String[] args) throws Exception { ! ! try { ! UIManager.setLookAndFeel( ! "com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); ! } catch (Exception e) { return; } Frame frame = new Frame(); ! frame.setBounds(30, 20, 400, 300); frame.setUndecorated(true); frame.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { mouseX = e.getXOnScreen(); mouseY = e.getYOnScreen(); } }); frame.setVisible(true); - Robot robot = new Robot(); robot.waitForIdle(); Thread.sleep(200); Rectangle rect = frame.getBounds(); rect.setLocation(frame.getLocationOnScreen()); --- 25,94 ---- import java.awt.Rectangle; import java.awt.Robot; import java.awt.event.InputEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; ! import java.util.List; ! import java.util.concurrent.CountDownLatch; ! ! import jdk.testlibrary.OSInfo; /* @test * @bug 8073320 * @summary Windows HiDPI support ! * @library ../../../../lib/testlibrary ! * @build jdk.testlibrary.OSInfo ! * @run main/othervm HiDPIRobotMouseClick ! * @run main/othervm -Dsun.java2d.uiScale=1 HiDPIRobotMouseClick ! * @run main/othervm -Dsun.java2d.uiScale=2 HiDPIRobotMouseClick ! * @run main/othervm -Dsun.java2d.win.uiScaleX=3 -Dsun.java2d.win.uiScaleY=2 ! * HiDPIRobotMouseClick ! * @run main/othervm -Dsun.java2d.win.uiScaleX=2 -Dsun.java2d.win.uiScaleY=3 ! * HiDPIRobotMouseClick */ public class HiDPIRobotMouseClick { private static volatile int mouseX; private static volatile int mouseY; + private static CountDownLatch go; + private static Robot robot; public static void main(String[] args) throws Exception { ! if (!OSInfo.getOSType().equals(OSInfo.OSType.WINDOWS) ! && System.getProperty("sun.java2d.win.uiScaleX") != null) { return; } + robot = new Robot(); + robot.setAutoDelay(50); + for (int size : List.of(50, 87, 100, 123, 137, 150)) { + test(size); + } + } + + private static void test(int size) throws Exception { + go = new CountDownLatch(1); + mouseX = -1; + mouseY = -1; + robot.mouseMove(100, 100); Frame frame = new Frame(); ! frame.setSize(size, size + 1); ! frame.setLocationRelativeTo(null); frame.setUndecorated(true); frame.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { mouseX = e.getXOnScreen(); mouseY = e.getYOnScreen(); + go.countDown(); } }); frame.setVisible(true); robot.waitForIdle(); Thread.sleep(200); Rectangle rect = frame.getBounds(); rect.setLocation(frame.getLocationOnScreen());
*** 76,87 **** int y = (int) rect.getCenterY(); robot.mouseMove(x, y); robot.mousePress(InputEvent.BUTTON1_MASK); robot.mouseRelease(InputEvent.BUTTON1_MASK); ! robot.waitForIdle(); ! if (x != mouseX || y != mouseY) { throw new RuntimeException("Wrong mouse click point!"); } } } --- 97,110 ---- int y = (int) rect.getCenterY(); robot.mouseMove(x, y); robot.mousePress(InputEvent.BUTTON1_MASK); robot.mouseRelease(InputEvent.BUTTON1_MASK); ! go.await(); ! frame.dispose(); if (x != mouseX || y != mouseY) { + System.err.println("Expected: x = " + x + ", y = " + y); + System.err.println("Actual: x = " + mouseX + ", y = " + mouseY); throw new RuntimeException("Wrong mouse click point!"); } } }
< prev index next >