< prev index next >

test/javax/swing/JComponent/6683775/bug6683775.java

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 2009, 2016, 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) 2009, 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.
*** 22,54 **** */ /* * @test * @key headful ! * @bug 6683775 6794764 ! * @summary Painting artifacts is seen when panel is made setOpaque(false) for a translucent window ! * @author Alexander Potochkin ! * @modules java.desktop/com.sun.awt ! * java.desktop/sun.awt ! * @run main bug6683775 */ ! import com.sun.awt.AWTUtilities; ! ! import javax.swing.*; ! import java.awt.*; import java.awt.image.BufferedImage; public class bug6683775 { static final int LOC = 100, SIZE = 200; public static void main(String[] args) throws Exception { GraphicsConfiguration gc = getGC(); ! if (!AWTUtilities.isTranslucencySupported( ! AWTUtilities.Translucency.PERPIXEL_TRANSLUCENT) ! || gc == null) { return; } Robot robot = new Robot(); final JFrame testFrame = new JFrame(gc); --- 22,57 ---- */ /* * @test * @key headful ! * @bug 6683775 6794764 8186617 ! * @summary Painting artifacts is seen when panel is made setOpaque(false) for a ! * translucent window */ ! import java.awt.Color; ! import java.awt.GraphicsConfiguration; ! import java.awt.GraphicsDevice; ! import java.awt.GraphicsEnvironment; ! import java.awt.Rectangle; ! import java.awt.Robot; ! import java.awt.Window; import java.awt.image.BufferedImage; + import javax.swing.JFrame; + import javax.swing.JPanel; + import javax.swing.SwingUtilities; + public class bug6683775 { static final int LOC = 100, SIZE = 200; public static void main(String[] args) throws Exception { GraphicsConfiguration gc = getGC(); ! if (gc == null || !gc.getDevice().isWindowTranslucencySupported( ! GraphicsDevice.WindowTranslucency.PERPIXEL_TRANSLUCENT)) { return; } Robot robot = new Robot(); final JFrame testFrame = new JFrame(gc);
*** 63,73 **** testFrame.setUndecorated(true); JPanel p = new JPanel(); p.setOpaque(false); testFrame.add(p); ! AWTUtilities.setWindowOpaque(testFrame, false); testFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); testFrame.setBounds(LOC, LOC, SIZE, SIZE); testFrame.setVisible(true); }); --- 66,76 ---- testFrame.setUndecorated(true); JPanel p = new JPanel(); p.setOpaque(false); testFrame.add(p); ! setOpaque(testFrame, false); testFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); testFrame.setBounds(LOC, LOC, SIZE, SIZE); testFrame.setVisible(true); });
*** 76,106 **** //robot.getPixelColor() didn't work right for some reason BufferedImage capture = robot.createScreenCapture(new Rectangle(LOC, LOC, SIZE, SIZE)); int redRGB = Color.RED.getRGB(); if (redRGB != capture.getRGB(SIZE/2, SIZE/2)) { throw new RuntimeException("Transparent frame is not transparent!"); } } private static GraphicsConfiguration getGC() { GraphicsConfiguration transparencyCapableGC = GraphicsEnvironment.getLocalGraphicsEnvironment() .getDefaultScreenDevice().getDefaultConfiguration(); ! if (!AWTUtilities.isTranslucencyCapable(transparencyCapableGC)) { transparencyCapableGC = null; GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment(); GraphicsDevice[] devices = env.getScreenDevices(); for (int i = 0; i < devices.length && transparencyCapableGC == null; i++) { GraphicsConfiguration[] configs = devices[i].getConfigurations(); for (int j = 0; j < configs.length && transparencyCapableGC == null; j++) { ! if (AWTUtilities.isTranslucencyCapable(configs[j])) { transparencyCapableGC = configs[j]; } } } } --- 79,120 ---- //robot.getPixelColor() didn't work right for some reason BufferedImage capture = robot.createScreenCapture(new Rectangle(LOC, LOC, SIZE, SIZE)); + SwingUtilities.invokeAndWait(testFrame::dispose); + int redRGB = Color.RED.getRGB(); if (redRGB != capture.getRGB(SIZE/2, SIZE/2)) { throw new RuntimeException("Transparent frame is not transparent!"); } } + public static void setOpaque(Window window, boolean opaque) { + Color bg = window.getBackground(); + if (bg == null) { + bg = new Color(0, 0, 0, 0); + } + window.setBackground(new Color(bg.getRed(), bg.getGreen(), bg.getBlue(), + opaque ? 255 : 0)); + } + private static GraphicsConfiguration getGC() { GraphicsConfiguration transparencyCapableGC = GraphicsEnvironment.getLocalGraphicsEnvironment() .getDefaultScreenDevice().getDefaultConfiguration(); ! if (!transparencyCapableGC.isTranslucencyCapable()) { transparencyCapableGC = null; GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment(); GraphicsDevice[] devices = env.getScreenDevices(); for (int i = 0; i < devices.length && transparencyCapableGC == null; i++) { GraphicsConfiguration[] configs = devices[i].getConfigurations(); for (int j = 0; j < configs.length && transparencyCapableGC == null; j++) { ! if (configs[j].isTranslucencyCapable()) { transparencyCapableGC = configs[j]; } } } }
< prev index next >