< prev index next >
test/java/awt/Robot/HiDPIMouseClick/HiDPIRobotMouseClick.java
Print this page
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * 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,49 +25,70 @@
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;
+import java.util.List;
+import java.util.concurrent.CountDownLatch;
+
+import jdk.testlibrary.OSInfo;
/* @test
* @bug 8073320
* @summary Windows HiDPI support
- * @author Alexander Scherbatiy
- * @requires (os.family == "windows")
- * @run main/othervm -Dsun.java2d.win.uiScale=2 HiDPIRobotMouseClick
+ * @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 {
-
- try {
- UIManager.setLookAndFeel(
- "com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
- } catch (Exception e) {
+ 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.setBounds(30, 20, 400, 300);
+ 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 robot = new Robot();
robot.waitForIdle();
Thread.sleep(200);
Rectangle rect = frame.getBounds();
rect.setLocation(frame.getLocationOnScreen());
@@ -76,12 +97,14 @@
int y = (int) rect.getCenterY();
robot.mouseMove(x, y);
robot.mousePress(InputEvent.BUTTON1_MASK);
robot.mouseRelease(InputEvent.BUTTON1_MASK);
- robot.waitForIdle();
-
+ 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 >