From ef2bd5721316f208a458fecfffa02ec2c0ea7fe0 Mon Sep 17 00:00:00 2001 From: Damon Nguyen Date: Thu, 21 Mar 2024 16:12:47 +0000 Subject: [PATCH] 8328558: Convert javax/swing/JCheckBox/8032667/bug8032667.java applet test to main Reviewed-by: abhiscxk, psadhukhan, aivanov --- .../swing/JCheckBox/8032667/bug8032667.html | 36 ------ .../8032667/bug8032667_image_diff.java | 116 ------------------ .../JCheckBox/{8032667 => }/bug8032667.java | 71 +++++++---- 3 files changed, 44 insertions(+), 179 deletions(-) delete mode 100644 test/jdk/javax/swing/JCheckBox/8032667/bug8032667.html delete mode 100644 test/jdk/javax/swing/JCheckBox/8032667/bug8032667_image_diff.java rename test/jdk/javax/swing/JCheckBox/{8032667 => }/bug8032667.java (56%) diff --git a/test/jdk/javax/swing/JCheckBox/8032667/bug8032667.html b/test/jdk/javax/swing/JCheckBox/8032667/bug8032667.html deleted file mode 100644 index 33cc90e77cf..00000000000 --- a/test/jdk/javax/swing/JCheckBox/8032667/bug8032667.html +++ /dev/null @@ -1,36 +0,0 @@ - - - - - -Verify that scaled components are rendered smoothly to image. - -1. Run the test. -2. Check that Selected and Deselected JCheckBox icons are drawn smoothly. -If so, press PASS, else press FAIL. - - - - - diff --git a/test/jdk/javax/swing/JCheckBox/8032667/bug8032667_image_diff.java b/test/jdk/javax/swing/JCheckBox/8032667/bug8032667_image_diff.java deleted file mode 100644 index 827b0fe1e63..00000000000 --- a/test/jdk/javax/swing/JCheckBox/8032667/bug8032667_image_diff.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright (c) 2014, 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. - * - * 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. - */ -import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.Graphics2D; -import java.awt.Image; -import java.awt.image.BufferedImage; -import javax.swing.JCheckBox; -import javax.swing.JComponent; -import javax.swing.SwingUtilities; - -import jdk.test.lib.Platform; - -/* @test - * @bug 8032667 - * @summary [macosx] Components cannot be rendered in HiDPI to BufferedImage - * @library /test/lib - * @build jdk.test.lib.Platform - * @run main bug8032667_image_diff - */ -public class bug8032667_image_diff { - - static final int IMAGE_WIDTH = 130; - static final int IMAGE_HEIGHT = 50; - - public static void main(String[] args) throws Exception { - - if (!Platform.isOSX()) { - return; - } - - SwingUtilities.invokeAndWait(new Runnable() { - @Override - public void run() { - - JCheckBox checkBox = new JCheckBox(); - checkBox.setSelected(true); - checkBox.setSize(new Dimension(IMAGE_WIDTH, IMAGE_HEIGHT)); - - final BufferedImage image1 = getHiDPIImage(checkBox); - final BufferedImage image2 = getScaledImage(checkBox); - - if(equal(image1, image2)){ - throw new RuntimeException("2x image equals to non smooth image"); - } - } - }); - } - - static boolean equal(BufferedImage image1, BufferedImage image2) { - - int w = image1.getWidth(); - int h = image1.getHeight(); - - if (w != image2.getWidth() || h != image2.getHeight()) { - return false; - } - - for (int i = 0; i < w; i++) { - for (int j = 0; j < h; j++) { - int color1 = image1.getRGB(i, j); - int color2 = image2.getRGB(i, j); - - if (color1 != color2) { - return false; - } - } - } - return true; - } - - static BufferedImage getHiDPIImage(JComponent component) { - return getImage(component, 2, IMAGE_WIDTH, IMAGE_HEIGHT); - } - - static BufferedImage getScaledImage(JComponent component) { - Image image1x = getImage(component, 1, IMAGE_WIDTH, IMAGE_HEIGHT); - final BufferedImage image2x = new BufferedImage( - 2 * IMAGE_WIDTH, 2 * IMAGE_HEIGHT, BufferedImage.TYPE_INT_ARGB); - final Graphics g = image2x.getGraphics(); - ((Graphics2D) g).scale(2, 2); - g.drawImage(image1x, 0, 0, null); - g.dispose(); - return image2x; - } - - static BufferedImage getImage(JComponent component, int scale, int width, int height) { - final BufferedImage image = new BufferedImage( - scale * width, scale * height, BufferedImage.TYPE_INT_ARGB); - final Graphics g = image.getGraphics(); - ((Graphics2D) g).scale(scale, scale); - component.paint(g); - g.dispose(); - return image; - } -} diff --git a/test/jdk/javax/swing/JCheckBox/8032667/bug8032667.java b/test/jdk/javax/swing/JCheckBox/bug8032667.java similarity index 56% rename from test/jdk/javax/swing/JCheckBox/8032667/bug8032667.java rename to test/jdk/javax/swing/JCheckBox/bug8032667.java index fda8852e520..3fa1a90b41f 100644 --- a/test/jdk/javax/swing/JCheckBox/8032667/bug8032667.java +++ b/test/jdk/javax/swing/JCheckBox/bug8032667.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2024, 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 @@ -20,24 +20,28 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ + import java.awt.BorderLayout; -import java.awt.Canvas; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.image.BufferedImage; -import javax.swing.JApplet; + import javax.swing.JCheckBox; import javax.swing.JComponent; -import javax.swing.SwingUtilities; +import javax.swing.JFrame; +import javax.swing.JPanel; /* @test * @bug 8032667 + * @library /java/awt/regtesthelpers + * @build PassFailJFrame * @summary [macosx] Components cannot be rendered in HiDPI to BufferedImage - * @run applet/manual=yesno bug8032667.html + * @run main/manual bug8032667 */ -public class bug8032667 extends JApplet { + +public class bug8032667 { static final int scale = 2; static final int width = 130; @@ -45,30 +49,43 @@ public class bug8032667 extends JApplet { static final int scaledWidth = scale * width; static final int scaledHeight = scale * height; - @Override - public void init() { - SwingUtilities.invokeLater(new Runnable() { + private static final String INSTRUCTIONS = """ + Verify that scaled components are rendered smoothly to image. + 1. Run the test. + 2. Check that Selected and Deselected JCheckBox icons are drawn smoothly. + If so, press PASS, else press FAIL. + """; + + public static void main(String[] args) throws Exception { + PassFailJFrame.builder() + .title("bug8032667 Test Instructions") + .instructions(INSTRUCTIONS) + .rows((int) INSTRUCTIONS.lines().count() + 2) + .columns(40) + .testUI(bug8032667::createAndShowGUI) + .build() + .awaitAndCheck(); + } + + public static JFrame createAndShowGUI() { + JFrame frame = new JFrame("bug8032667 HiDPI Component Test"); + frame.setLayout(new BorderLayout()); + frame.setBounds(0, 400, 400, 400); + + final Image image1 = getImage(getCheckBox("Deselected", false)); + final Image image2 = getImage(getCheckBox("Selected", true)); + JPanel panel = new JPanel() { @Override - public void run() { - - final Image image1 = getImage(getCheckBox("Deselected", false)); - final Image image2 = getImage(getCheckBox("Selected", true)); - - Canvas canvas = new Canvas() { - - @Override - public void paint(Graphics g) { - super.paint(g); - g.drawImage(image1, 0, 0, scaledWidth, scaledHeight, this); - g.drawImage(image2, 0, scaledHeight + 5, - scaledWidth, scaledHeight, this); - } - }; - - getContentPane().add(canvas, BorderLayout.CENTER); + public void paint(Graphics g) { + super.paint(g); + g.drawImage(image1, 0, 0, scaledWidth, scaledHeight, this); + g.drawImage(image2, 0, scaledHeight + 5, + scaledWidth, scaledHeight, this); } - }); + }; + frame.add(panel, BorderLayout.CENTER); + return frame; } static JCheckBox getCheckBox(String text, boolean selected) {