From 304dd34238443051639b2ce89034e26689938edc Mon Sep 17 00:00:00 2001 From: art Date: Wed, 6 May 2009 12:39:23 +0400 Subject: [PATCH] 6837004: java.awt.GraphicsDevice.setFullScreenWindow throws NPE for windows with background color not set Reviewed-by: yan, dcherepanov --- .../classes/java/awt/GraphicsDevice.java | 2 +- .../TranslucentWindow/TranslucentWindow.java | 83 +++++++++++++++++++ 2 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 test/java/awt/FullScreen/TranslucentWindow/TranslucentWindow.java diff --git a/src/share/classes/java/awt/GraphicsDevice.java b/src/share/classes/java/awt/GraphicsDevice.java index c7d9b13fb..2080225ab 100644 --- a/src/share/classes/java/awt/GraphicsDevice.java +++ b/src/share/classes/java/awt/GraphicsDevice.java @@ -282,7 +282,7 @@ public abstract class GraphicsDevice { 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 --git a/test/java/awt/FullScreen/TranslucentWindow/TranslucentWindow.java b/test/java/awt/FullScreen/TranslucentWindow/TranslucentWindow.java new file mode 100644 index 000000000..9facaaeb9 --- /dev/null +++ b/test/java/awt/FullScreen/TranslucentWindow/TranslucentWindow.java @@ -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"); + } +} -- GitLab