# HG changeset patch # User yan # Date 1242114013 25200 # Node ID c56ab46cf4f7d178496c1f1d4aae449d1cdc09fd # Parent ff132b16a7c5d8e672fa4ee577f1e8ec77da63b0# Parent ff6d1d0b418008b48e7f6930779bd79de0a90eb2 Merge diff -r ff132b16a7c5 -r c56ab46cf4f7 jdk/src/share/classes/java/awt/GraphicsDevice.java --- a/jdk/src/share/classes/java/awt/GraphicsDevice.java Mon May 11 12:08:15 2009 -0700 +++ b/jdk/src/share/classes/java/awt/GraphicsDevice.java Tue May 12 00:40:13 2009 -0700 @@ -282,7 +282,7 @@ w.setOpacity(1.0f); } Color bgColor = w.getBackground(); - if (bgColor.getAlpha() < 255) { + if ((bgColor != null) && (bgColor.getAlpha() < 255)) { bgColor = new Color(bgColor.getRed(), bgColor.getGreen(), bgColor.getBlue(), 255); w.setBackground(bgColor); diff -r ff132b16a7c5 -r c56ab46cf4f7 jdk/src/solaris/classes/sun/awt/X11GraphicsConfig.java diff -r ff132b16a7c5 -r c56ab46cf4f7 jdk/src/solaris/classes/sun/java2d/x11/X11PMBlitBgLoops.java diff -r ff132b16a7c5 -r c56ab46cf4f7 jdk/src/solaris/classes/sun/java2d/x11/X11PMBlitLoops.java diff -r ff132b16a7c5 -r c56ab46cf4f7 jdk/src/solaris/classes/sun/java2d/x11/X11SurfaceData.java --- a/jdk/src/solaris/classes/sun/java2d/x11/X11SurfaceData.java Mon May 11 12:08:15 2009 -0700 +++ b/jdk/src/solaris/classes/sun/java2d/x11/X11SurfaceData.java Tue May 12 00:40:13 2009 -0700 @@ -530,6 +530,7 @@ sType = transparent ? X11SurfaceData.IntBgrX11_BM : X11SurfaceData.IntBgrX11; } } else { + throw new sun.java2d.InvalidPipeException("Unsupported bit " + "depth/cm combo: " + cm.getPixelSize() + diff -r ff132b16a7c5 -r c56ab46cf4f7 jdk/src/solaris/native/sun/awt/X11Color.c diff -r ff132b16a7c5 -r c56ab46cf4f7 jdk/src/solaris/native/sun/awt/awt_GraphicsEnv.c diff -r ff132b16a7c5 -r c56ab46cf4f7 jdk/src/solaris/native/sun/awt/awt_p.h diff -r ff132b16a7c5 -r c56ab46cf4f7 jdk/test/java/awt/FullScreen/TranslucentWindow/TranslucentWindow.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/awt/FullScreen/TranslucentWindow/TranslucentWindow.java Tue May 12 00:40:13 2009 -0700 @@ -0,0 +1,83 @@ +/* + * Copyright 2009 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* + * @test + * @bug 6837004 + * @summary Checks that non-opaque window can be made a fullscreen window + * @author Artem Ananiev + * @run main TranslucentWindow + */ + +import java.awt.*; +import java.awt.geom.*; + +import static java.awt.GraphicsDevice.WindowTranslucency.*; + +import sun.awt.SunToolkit; + +public class TranslucentWindow { + public static void main(String args[]) { + GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); + GraphicsDevice gd = ge.getDefaultScreenDevice(); + + Frame f = new Frame("Test frame"); + f.setBounds(100, 100, 320, 240); + + // First, check it can be made fullscreen window without any effects applied + gd.setFullScreenWindow(f); + ((SunToolkit)Toolkit.getDefaultToolkit()).realSync(); + + gd.setFullScreenWindow(null); + ((SunToolkit)Toolkit.getDefaultToolkit()).realSync(); + + // Second, check if it applying any effects doesn't prevent the window + // from going into the fullscreen mode + if (gd.isWindowTranslucencySupported(PERPIXEL_TRANSPARENT)) { + f.setShape(new Ellipse2D.Float(0, 0, f.getWidth(), f.getHeight())); + } + if (gd.isWindowTranslucencySupported(TRANSLUCENT)) { + f.setOpacity(0.5f); + } + if (gd.isWindowTranslucencySupported(PERPIXEL_TRANSLUCENT)) { + f.setBackground(new Color(0, 0, 0, 128)); + } + gd.setFullScreenWindow(f); + ((SunToolkit)Toolkit.getDefaultToolkit()).realSync(); + + // Third, make sure all the effects are unset when entering the fullscreen mode + if (f.getShape() != null) { + throw new RuntimeException("Test FAILED: fullscreen window shape is not null"); + } + if (Math.abs(f.getOpacity() - 1.0f) > 1e-4) { + throw new RuntimeException("Test FAILED: fullscreen window opacity is not 1.0f"); + } + Color bgColor = f.getBackground(); + if ((bgColor != null) && (bgColor.getAlpha() != 255)) { + throw new RuntimeException("Test FAILED: fullscreen window background color is not opaque"); + } + + f.dispose(); + System.out.println("Test PASSED"); + } +}