jdk/test/javax/swing/JComponent/6683775/bug6683775.java
author art
Thu, 21 May 2009 12:29:25 +0400
changeset 2808 a139a919f645
child 21596 0e3a39f29dbc
permissions -rw-r--r--
6794764: Translucent windows are completely repainted on every paint event, on Windows 6719382: Printing of AWT components on windows is not working 6726866: Repainting artifacts when resizing or dragging JInternalFrames in non-opaque toplevel 6683775: Painting artifacts is seen when panel is made setOpaque(false) for a translucent window Reviewed-by: anthony, tdv, alexp
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2808
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
     1
/* @test
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
     2
   @bug 6683775 6794764
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
     3
   @summary Painting artifacts is seen when panel is made setOpaque(false) for a translucent window
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
     4
   @author Alexander Potochkin
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
     5
   @run main bug6683775
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
     6
*/
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
     7
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
     8
import com.sun.awt.AWTUtilities;
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
     9
import sun.awt.SunToolkit;
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    10
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    11
import javax.swing.*;
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    12
import java.awt.*;
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    13
import java.awt.image.BufferedImage;
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    14
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    15
public class bug6683775 {
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    16
    public static void main(String[] args) throws Exception {
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    17
        GraphicsConfiguration gc = getGC();
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    18
        if (!AWTUtilities.isTranslucencySupported(
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    19
                AWTUtilities.Translucency.PERPIXEL_TRANSLUCENT)
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    20
                || gc == null) {
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    21
            return;
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    22
        }
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    23
        SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    24
        Robot robot = new Robot();
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    25
        final JFrame testFrame = new JFrame(gc);
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    26
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    27
        SwingUtilities.invokeLater(new Runnable() {
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    28
            public void run() {
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    29
                JFrame backgroundFrame = new JFrame("Background frame");
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    30
                backgroundFrame.setUndecorated(true);
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    31
                JPanel panel = new JPanel();
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    32
                panel.setBackground(Color.RED);
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    33
                backgroundFrame.add(panel);
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    34
                backgroundFrame.setSize(200, 200);
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    35
                backgroundFrame.setVisible(true);
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    36
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    37
                testFrame.setUndecorated(true);
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    38
                JPanel p = new JPanel();
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    39
                p.setOpaque(false);
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    40
                testFrame.add(p);
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    41
                AWTUtilities.setWindowOpaque(testFrame, false);
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    42
                testFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    43
                testFrame.setSize(400, 400);
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    44
                testFrame.setLocation(0, 0);
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    45
                testFrame.setVisible(true);
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    46
            }
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    47
        });
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    48
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    49
        toolkit.realSync();
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    50
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    51
        //robot.getPixelColor() didn't work right for some reason
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    52
        BufferedImage capture = robot.createScreenCapture(new Rectangle(100, 100));
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    53
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    54
        int redRGB = Color.RED.getRGB();
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    55
        if (redRGB != capture.getRGB(10, 10)) {
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    56
            throw new RuntimeException("Transparent frame is not transparent!");
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    57
        }
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    58
    }
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    59
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    60
    private static GraphicsConfiguration getGC() {
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    61
        GraphicsConfiguration transparencyCapableGC =
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    62
                GraphicsEnvironment.getLocalGraphicsEnvironment()
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    63
                        .getDefaultScreenDevice().getDefaultConfiguration();
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    64
        if (!AWTUtilities.isTranslucencyCapable(transparencyCapableGC)) {
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    65
            transparencyCapableGC = null;
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    66
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    67
            GraphicsEnvironment env =
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    68
                    GraphicsEnvironment.getLocalGraphicsEnvironment();
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    69
            GraphicsDevice[] devices = env.getScreenDevices();
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    70
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    71
            for (int i = 0; i < devices.length && transparencyCapableGC == null; i++) {
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    72
                GraphicsConfiguration[] configs = devices[i].getConfigurations();
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    73
                for (int j = 0; j < configs.length && transparencyCapableGC == null; j++) {
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    74
                    if (AWTUtilities.isTranslucencyCapable(configs[j])) {
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    75
                        transparencyCapableGC = configs[j];
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    76
                    }
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    77
                }
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    78
            }
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    79
        }
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    80
        return transparencyCapableGC;
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    81
    }
a139a919f645 6794764: Translucent windows are completely repainted on every paint event, on Windows
art
parents:
diff changeset
    82
}