< prev index next >
test/jdk/java/awt/Robot/CheckCommonColors/CheckCommonColors.java
Print this page
rev 60071 : 8211999: Window positioning bugs due to overlapping GraphicsDevice bounds (Windows/HiDPI)
Reviewed-by: XXX
*** 1,7 ****
/*
! * Copyright (c) 2018, 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) 2018, 2020, 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.
*** 21,77 ****
* questions.
*/
import java.awt.Color;
import java.awt.Frame;
import java.awt.Point;
import java.awt.Robot;
import java.util.List;
/**
* @test
* @key headful
! * @bug 8215105
* @summary tests that Robot can capture the common colors without artifacts
*/
public final class CheckCommonColors {
private static final Frame frame = new Frame();
private static Robot robot;
public static void main(final String[] args) throws Exception {
robot = new Robot();
try {
! test();
} finally {
frame.dispose();
}
}
! private static void test() {
frame.setSize(400, 400);
! frame.setLocationRelativeTo(null);
frame.setUndecorated(true);
for (final Color color : List.of(Color.WHITE, Color.LIGHT_GRAY,
Color.GRAY, Color.DARK_GRAY,
Color.BLACK, Color.RED, Color.PINK,
Color.ORANGE, Color.YELLOW,
Color.GREEN, Color.MAGENTA, Color.CYAN,
Color.BLUE)) {
frame.dispose();
frame.setBackground(color);
frame.setVisible(true);
! checkPixels(color);
}
}
! private static void checkPixels(final Color color) {
int attempt = 0;
while (true) {
Point p = frame.getLocationOnScreen();
! Color pixel = robot.getPixelColor(p.x + frame.getWidth() / 2,
! p.y + frame.getHeight() / 2);
if (color.equals(pixel)) {
return;
}
if (attempt > 10) {
System.err.println("Expected: " + color);
--- 21,94 ----
* questions.
*/
import java.awt.Color;
import java.awt.Frame;
+ import java.awt.GraphicsDevice;
+ import java.awt.GraphicsEnvironment;
import java.awt.Point;
+ import java.awt.Rectangle;
import java.awt.Robot;
+ import java.awt.image.BufferedImage;
import java.util.List;
/**
* @test
* @key headful
! * @bug 8215105 8211999
* @summary tests that Robot can capture the common colors without artifacts
*/
public final class CheckCommonColors {
private static final Frame frame = new Frame();
private static Robot robot;
public static void main(final String[] args) throws Exception {
robot = new Robot();
+ var ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
+ for (GraphicsDevice gd : ge.getScreenDevices()) {
try {
! test(gd.getDefaultConfiguration().getBounds());
} finally {
frame.dispose();
}
}
+ }
! private static void test(Rectangle screen) {
frame.setSize(400, 400);
! frame.setLocation((int)screen.getCenterX() - 200,
! (int)screen.getCenterY() - 200);
frame.setUndecorated(true);
for (final Color color : List.of(Color.WHITE, Color.LIGHT_GRAY,
Color.GRAY, Color.DARK_GRAY,
Color.BLACK, Color.RED, Color.PINK,
Color.ORANGE, Color.YELLOW,
Color.GREEN, Color.MAGENTA, Color.CYAN,
Color.BLUE)) {
frame.dispose();
frame.setBackground(color);
frame.setVisible(true);
! checkPixels(color, true);
! checkPixels(color, false);
}
}
! private static void checkPixels(final Color color, boolean useRect) {
! System.out.println("color = " + color + ", useRect = " + useRect);
int attempt = 0;
while (true) {
Point p = frame.getLocationOnScreen();
! Color pixel;
! Rectangle rect = new Rectangle(p.x + frame.getWidth() / 2,
! p.y + frame.getHeight() / 2, 1, 1);
! if (useRect) {
! BufferedImage bi = robot.createScreenCapture(rect);
! pixel = new Color(bi.getRGB(0, 0));
! } else {
! pixel = robot.getPixelColor(rect.x, rect.y);
! }
if (color.equals(pixel)) {
return;
}
if (attempt > 10) {
System.err.println("Expected: " + color);
< prev index next >