From 8be4db36d1a72e6f4a25e891d56bb1e213586a2c Mon Sep 17 00:00:00 2001 From: mkoch Date: Mon, 25 Apr 2005 20:58:13 +0000 Subject: 2005-04-25 Jeroen Frijters * java/awt/GraphicsEnvironment.java (localGraphicsEnvironment): New field. (getLocalGraphicsEnvironment): Added support for java.awt.graphicsenv property. (isHeadless): Added support for java.awt.headless property. (isHeadlessInstance): Call headless(). 2005-04-25 Roman Kennke * gnu/java/awt/peer/gtk/GdkScreenGraphicsDevice.java (getDisplayMode): Added. Returns the current display mode. (isFullScreenSupported): Added. * java/awt/GraphicsDevice.java (setFullScreenWindow): Implemented a primitive fullscreen mode. This resizes and relocates the fullscreen window so that it uses the whole screen. This is not a fully accelerated fullscreen exclusive mode. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@98740 138bc75d-0d04-0410-961f-82ee72b054a4 --- libjava/java/awt/GraphicsDevice.java | 33 ++++++++++++++---- libjava/java/awt/GraphicsEnvironment.java | 56 ++++++++++++++++++++++++------- 2 files changed, 69 insertions(+), 20 deletions(-) (limited to 'libjava/java/awt') diff --git a/libjava/java/awt/GraphicsDevice.java b/libjava/java/awt/GraphicsDevice.java index c01723356b3..55a80f23e62 100644 --- a/libjava/java/awt/GraphicsDevice.java +++ b/libjava/java/awt/GraphicsDevice.java @@ -64,6 +64,12 @@ public abstract class GraphicsDevice /** The current full-screen window, or null if there is none. */ private Window full_screen; + /** + * The bounds of the fullscreen window before it has been switched to full + * screen. + */ + private Rectangle fullScreenOldBounds; + /** The current display mode, or null if unknown. */ private DisplayMode mode; @@ -151,9 +157,9 @@ public abstract class GraphicsDevice *
* If isFullScreenSupported() returns false, full-screen * exclusive mode is simulated by resizing the window to the size of the - * screen and positioning it at (0,0). - * - * XXX Not yet implemented in Classpath. + * screen and positioning it at (0,0). This is also what this method does. + * If a device supports real fullscreen mode then it should override this + * method as well as #isFullScreenSupported and #getFullScreenWindow. * * @param w the window to toggle * @see #isFullScreenSupported() @@ -164,11 +170,24 @@ public abstract class GraphicsDevice */ public synchronized void setFullScreenWindow(Window w) { + // Restore the previous window to normal mode and release the reference. if (full_screen != null) - ; // XXX Restore the previous window to normal mode. - full_screen = w; - // XXX If w != null, make it full-screen. - throw new Error("not implemented"); + { + full_screen.setBounds(fullScreenOldBounds); + } + + full_screen = null; + + // If w != null, make it full-screen. + if (w != null) + { + fullScreenOldBounds = w.getBounds(); + full_screen = w; + DisplayMode dMode = getDisplayMode(); + full_screen.setBounds(0, 0, dMode.getWidth(), dMode.getHeight()); + full_screen.requestFocus(); + full_screen.setLocationRelativeTo(null); + } } /** diff --git a/libjava/java/awt/GraphicsEnvironment.java b/libjava/java/awt/GraphicsEnvironment.java index b963f4bab2b..f93e0f97e25 100644 --- a/libjava/java/awt/GraphicsEnvironment.java +++ b/libjava/java/awt/GraphicsEnvironment.java @@ -1,5 +1,5 @@ /* GraphicsEnvironment.java -- information about the graphics environment - Copyright (C) 2002, 2004 Free Software Foundation, Inc. + Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -39,7 +39,7 @@ exception statement from your version. */ package java.awt; import gnu.java.awt.ClasspathToolkit; - +import gnu.classpath.SystemProperties; import java.awt.image.BufferedImage; import java.util.Locale; @@ -56,6 +56,8 @@ import java.util.Locale; */ public abstract class GraphicsEnvironment { + private static GraphicsEnvironment localGraphicsEnvironment; + /** * The environment must be obtained from a factory or query method, hence * this constructor is protected. @@ -65,16 +67,43 @@ public abstract class GraphicsEnvironment } /** - * Returns the local graphics environment. + * Returns the local graphics environment. If the java.awt.graphicsenv + * system property is set, it instantiates the specified class, + * otherwise it assume that the awt toolkit is a ClasspathToolkit + * and delegates to it to create the instance. * - * XXX Not implemented in Classpath yet. * @return the local environment */ public static GraphicsEnvironment getLocalGraphicsEnvironment() { - ClasspathToolkit tk; - tk = ((ClasspathToolkit) Toolkit.getDefaultToolkit ()); - return tk.getLocalGraphicsEnvironment (); + if (localGraphicsEnvironment != null) + return localGraphicsEnvironment; + + String graphicsenv = SystemProperties.getProperty("java.awt.graphicsenv", + null); + if (graphicsenv != null) + { + try + { + // We intentionally use the bootstrap class loader. + localGraphicsEnvironment = (GraphicsEnvironment) + Class.forName(graphicsenv).newInstance(); + return localGraphicsEnvironment; + } + catch (Exception x) + { + throw (InternalError) + new InternalError("Unable to instantiate java.awt.graphicsenv") + .initCause(x); + } + } + else + { + ClasspathToolkit tk; + tk = ((ClasspathToolkit) Toolkit.getDefaultToolkit()); + localGraphicsEnvironment = tk.getLocalGraphicsEnvironment(); + return localGraphicsEnvironment; + } } /** @@ -83,7 +112,8 @@ public abstract class GraphicsEnvironment * Windows Toolkit (java.awt) throw a {@link HeadlessException} if this * returns true. * - * XXX For now, Classpath assumes that it is never headless. + * This method returns true if the java.awt.headless property is set + * to "true". * * @return true if the environment is headless, meaning that graphics are * unsupported @@ -91,16 +121,16 @@ public abstract class GraphicsEnvironment */ public static boolean isHeadless() { - // XXX Should be: getLocalGraphicsEnvironment().isHeadlessInstance(); - return false; + String headless = SystemProperties.getProperty("java.awt.headless", null); + return "true".equalsIgnoreCase(headless); } /** * Check if the given environment is headless, meaning that it does not * support a display, keyboard, or mouse. Many methods in the Abstract * Windows Toolkit (java.awt) throw a {@link HeadlessException} if this - * returns true. This default implementation returns false, so subclasses - * need only override it if they are headless. + * returns true. This default implementation returns isHeadless(), so + * subclasses need only override it if they differ. * * @return true if the environment is headless, meaning that graphics are * unsupported @@ -108,7 +138,7 @@ public abstract class GraphicsEnvironment */ public boolean isHeadlessInstance() { - return false; + return isHeadless(); } /** -- cgit v1.2.1