< 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 >