| /* GraphicsDevice.java -- information about a graphics device |
| Copyright (C) 2002, 2005 Free Software Foundation, Inc. |
| |
| This file is part of GNU Classpath. |
| |
| GNU Classpath is free software; you can redistribute it and/or modify |
| it under the terms of the GNU General Public License as published by |
| the Free Software Foundation; either version 2, or (at your option) |
| any later version. |
| |
| GNU Classpath 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 for more details. |
| |
| You should have received a copy of the GNU General Public License |
| along with GNU Classpath; see the file COPYING. If not, write to the |
| Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA |
| 02110-1301 USA. |
| |
| Linking this library statically or dynamically with other modules is |
| making a combined work based on this library. Thus, the terms and |
| conditions of the GNU General Public License cover the whole |
| combination. |
| |
| As a special exception, the copyright holders of this library give you |
| permission to link this library with independent modules to produce an |
| executable, regardless of the license terms of these independent |
| modules, and to copy and distribute the resulting executable under |
| terms of your choice, provided that you also meet, for each linked |
| independent module, the terms and conditions of the license of that |
| module. An independent module is a module which is not derived from |
| or based on this library. If you modify this library, you may extend |
| this exception to your version of the library, but you are not |
| obligated to do so. If you do not wish to do so, delete this |
| exception statement from your version. */ |
| |
| |
| package java.awt; |
| |
| import java.awt.image.VolatileImage; |
| |
| /** |
| * This describes a graphics device available to the given environment. This |
| * includes screen and printer devices, and the different configurations for |
| * each device. Also, this allows you to create virtual devices which operate |
| * over a multi-screen environment. |
| * |
| * @author Eric Blake (ebb9@email.byu.edu) |
| * @see GraphicsEnvironment |
| * @see GraphicsConfiguration |
| * @since 1.3 |
| * @status updated to 1.4 |
| */ |
| public abstract class GraphicsDevice |
| { |
| /** Device is a raster screen. */ |
| public static final int TYPE_RASTER_SCREEN = 0; |
| |
| /** Device is a printer. */ |
| public static final int TYPE_PRINTER = 1; |
| |
| /** Device is an image buffer not visible to the user. */ |
| public static final int TYPE_IMAGE_BUFFER = 2; |
| |
| /** 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; |
| |
| /** |
| * The default constructor. |
| * |
| * @see GraphicsEnvironment#getScreenDevices() |
| * @see GraphicsEnvironment#getDefaultScreenDevice() |
| * @see GraphicsConfiguration#getDevice() |
| */ |
| protected GraphicsDevice() |
| { |
| } |
| |
| /** |
| * Returns the type of the device. |
| * |
| * @return the device type |
| * @see #TYPE_RASTER_SCREEN |
| * @see #TYPE_PRINTER |
| * @see #TYPE_IMAGE_BUFFER |
| */ |
| public abstract int getType(); |
| |
| /** |
| * Returns an identification string for the device. This can be |
| * vendor-specific, and may be useful for debugging. |
| * |
| * @return the identification |
| */ |
| public abstract String getIDstring(); |
| |
| /** |
| * Return all configurations valid for this device. |
| * |
| * @return an array of configurations |
| */ |
| public abstract GraphicsConfiguration[] getConfigurations(); |
| |
| /** |
| * Return the default configuration for this device. |
| * |
| * @return the default configuration |
| */ |
| public abstract GraphicsConfiguration getDefaultConfiguration(); |
| |
| /** |
| * Return the best configuration, according to the criteria in the given |
| * template. |
| * |
| * @param template the template to adjust by |
| * @return the best configuration |
| * @throws NullPointerException if template is null |
| */ |
| public GraphicsConfiguration getBestConfiguration |
| (GraphicsConfigTemplate template) |
| { |
| return template.getBestConfiguration(getConfigurations()); |
| } |
| |
| /** |
| * Returns true if the device supports full-screen exclusive mode. The |
| * default implementation returns true; subclass it if this is not the case. |
| * |
| * @return true if full screen support is available |
| * @since 1.4 |
| */ |
| public boolean isFullScreenSupported() |
| { |
| return true; |
| } |
| |
| /** |
| * Toggle the given window between full screen and normal mode. The previous |
| * full-screen window, if different, is restored; if the given window is |
| * null, no window will be full screen. If |
| * <code>isFullScreenSupported()</code> returns true, full screen mode is |
| * considered to be exclusive, which implies:<ul> |
| * <li>Windows cannot overlap the full-screen window. All other application |
| * windows will always appear beneath the full-screen window in the |
| * Z-order.</li> |
| * <li>Input method windows are disabled. It is advisable to call |
| * <code>Component.enableInputMethods(false)</code> to make a component |
| * a non-client of the input method framework.</li> |
| * </ul><br> |
| * If <code>isFullScreenSupported()</code> returns false, full-screen |
| * exclusive mode is simulated by resizing the window to the size of the |
| * 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() |
| * @see #getFullScreenWindow() |
| * @see #setDisplayMode(DisplayMode) |
| * @see Component#enableInputMethods(boolean) |
| * @since 1.4 |
| */ |
| public synchronized void setFullScreenWindow(Window w) |
| { |
| // Restore the previous window to normal mode and release the reference. |
| if (full_screen != null) |
| { |
| 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); |
| } |
| } |
| |
| /** |
| * Returns the current full-screen window of the device, or null if no |
| * window is full-screen. |
| * |
| * @return the full-screen window |
| * @see #setFullScreenWindow(Window) |
| * @since 1.4 |
| */ |
| public Window getFullScreenWindow() |
| { |
| return full_screen; |
| } |
| |
| /** |
| * Returns whether this device supports low-level display changes. This may |
| * depend on whether full-screen exclusive mode is available. |
| * |
| * XXX The default implementation returns false for now. |
| * |
| * @return true if display changes are supported |
| * @see #setDisplayMode(DisplayMode) |
| * @since 1.4 |
| */ |
| public boolean isDisplayChangeSupported() |
| { |
| return false; |
| } |
| |
| /** |
| * Sets the display mode. This may be dependent on the availability of |
| * full-screen exclusive mode. |
| * |
| * @param mode the new mode |
| * @throws IllegalArgumentException if the new mode is not in getDisplayModes |
| * @throws UnsupportedOperationException if ! isDisplayChangeSupported() |
| * @see #getDisplayMode() |
| * @see #getDisplayModes() |
| * @see #isDisplayChangeSupported() |
| * @since 1.4 |
| */ |
| public void setDisplayMode(DisplayMode mode) |
| { |
| DisplayMode[] array = getDisplayModes(); |
| if (! isDisplayChangeSupported()) |
| throw new UnsupportedOperationException(); |
| int i = array == null ? 0 : array.length; |
| while (--i >= 0) |
| if (array[i].equals(mode)) |
| break; |
| if (i < 0) |
| throw new IllegalArgumentException(); |
| this.mode = mode; |
| } |
| |
| /** |
| * Returns the current display mode of this device, or null if unknown. |
| * |
| * @return the current display mode |
| * @see #setDisplayMode(DisplayMode) |
| * @see #getDisplayModes() |
| * @since 1.4 |
| */ |
| public DisplayMode getDisplayMode() |
| { |
| return mode; |
| } |
| |
| /** |
| * Return an array of all available display modes. This implementation |
| * returns a 0-length array, so subclasses must override this. |
| * |
| * @return the array of available modes |
| * @since 1.4 |
| */ |
| public DisplayMode[] getDisplayModes() |
| { |
| return new DisplayMode[0]; |
| } |
| |
| /** |
| * Return the number of bytes available in accelerated memory on this |
| * device. The device may support creation or caching on a first-come, |
| * first-served basis, depending on the operating system and driver. |
| * Memory may be a finite resource, and because of multi-threading, you |
| * are not guaranteed that the result of this method ensures your image |
| * will successfully be put in accelerated memory. A negative result means |
| * the memory is unlimited. The default implementation assumes no special |
| * memory is available, and returns 0. |
| * |
| * @return the size of accelerated memory available |
| * @see VolatileImage#flush() |
| * @see ImageCapabilities#isAccelerated() |
| */ |
| public int getAvailableAcceleratedMemory() |
| { |
| return 0; |
| } |
| } // class GraphicsDevice |