1 /* GraphicsConfiguration.java -- describes characteristics of graphics 2 Copyright (C) 2000, 2001, 2002 Free Software Foundation 3 4 This file is part of GNU Classpath. 5 6 GNU Classpath is free software; you can redistribute it and/or modify 7 it under the terms of the GNU General Public License as published by 8 the Free Software Foundation; either version 2, or (at your option) 9 any later version. 10 11 GNU Classpath is distributed in the hope that it will be useful, but 12 WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 General Public License for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with GNU Classpath; see the file COPYING. If not, write to the 18 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 19 02110-1301 USA. 20 21 Linking this library statically or dynamically with other modules is 22 making a combined work based on this library. Thus, the terms and 23 conditions of the GNU General Public License cover the whole 24 combination. 25 26 As a special exception, the copyright holders of this library give you 27 permission to link this library with independent modules to produce an 28 executable, regardless of the license terms of these independent 29 modules, and to copy and distribute the resulting executable under 30 terms of your choice, provided that you also meet, for each linked 31 independent module, the terms and conditions of the license of that 32 module. An independent module is a module which is not derived from 33 or based on this library. If you modify this library, you may extend 34 this exception to your version of the library, but you are not 35 obligated to do so. If you do not wish to do so, delete this 36 exception statement from your version. */ 37 38 39 package java.awt; 40 41 import java.awt.geom.AffineTransform; 42 import java.awt.image.BufferedImage; 43 import java.awt.image.ColorModel; 44 import java.awt.image.VolatileImage; 45 46 /** 47 * This class describes the configuration of various graphics devices, such 48 * as a monitor or printer. Different configurations may exist for the same 49 * device, according to the different native modes supported. 50 * 51 * <p>Virtual devices are supported (for example, in a multiple screen 52 * environment, a virtual device covers all screens simultaneously); the 53 * configuration will have a non-zero relative coordinate system in such 54 * a case. 55 * 56 * @author Eric Blake (ebb9@email.byu.edu) 57 * @see Window 58 * @see Frame 59 * @see GraphicsEnvironment 60 * @see GraphicsDevice 61 * @since 1.0 62 * @status updated to 1.4 63 */ 64 public abstract class GraphicsConfiguration 65 { 66 67 /** The cached image capabilities. */ 68 private ImageCapabilities imageCapabilities; 69 70 /** The cached buffer capabilities. */ 71 private BufferCapabilities bufferCapabilities; 72 73 /** 74 * The default constructor. 75 * 76 * @see GraphicsDevice#getConfigurations() 77 * @see GraphicsDevice#getDefaultConfiguration() 78 * @see GraphicsDevice#getBestConfiguration(GraphicsConfigTemplate) 79 * @see Graphics2D#getDeviceConfiguration() 80 */ GraphicsConfiguration()81 protected GraphicsConfiguration () 82 { 83 } 84 85 /** 86 * Gets the associated device that this configuration describes. 87 * 88 * @return the device 89 */ getDevice()90 public abstract GraphicsDevice getDevice(); 91 92 /** 93 * Returns a buffered image optimized to this device, so that blitting can 94 * be supported in the buffered image. 95 * 96 * @param w the width of the buffer 97 * @param h the height of the buffer 98 * @return the buffered image, or null if none is supported 99 */ createCompatibleImage(int w, int h)100 public abstract BufferedImage createCompatibleImage(int w, int h); 101 102 /** 103 * Returns a buffered volatile image optimized to this device, so that 104 * blitting can be supported in the buffered image. Because the buffer is 105 * volatile, it can be optimized by native graphics accelerators. 106 * 107 * @param w the width of the buffer 108 * @param h the height of the buffer 109 * @return the buffered image, or null if none is supported 110 * @see Component#createVolatileImage(int, int) 111 * @since 1.4 112 */ createCompatibleVolatileImage(int w, int h)113 public abstract VolatileImage createCompatibleVolatileImage(int w, int h); 114 115 /** 116 * Returns a buffered volatile image optimized to this device, and with the 117 * given capabilities, so that blitting can be supported in the buffered 118 * image. Because the buffer is volatile, it can be optimized by native 119 * graphics accelerators. 120 * 121 * @param w the width of the buffer 122 * @param h the height of the buffer 123 * @param caps the desired capabilities of the image buffer 124 * @return the buffered image, or null if none is supported 125 * @throws AWTException if the capabilities cannot be met 126 * @since 1.4 127 */ createCompatibleVolatileImage(int w, int h, ImageCapabilities caps)128 public VolatileImage createCompatibleVolatileImage(int w, int h, 129 ImageCapabilities caps) 130 throws AWTException 131 { 132 // Must be overridden by implementations to check caps. 133 return createCompatibleVolatileImage(w, h); 134 } 135 136 /** 137 * Returns a buffered volatile image optimized to this device, and 138 * with the given transparency. Because the buffer is volatile, it 139 * can be optimized by native graphics accelerators. 140 * 141 * @param width the width of the buffer 142 * @param height the height of the buffer 143 * @param transparency the transparency value for the buffer 144 * @return the buffered image, or null if none is supported 145 * @since 1.5 146 */ createCompatibleVolatileImage(int width, int height, int transparency)147 public abstract VolatileImage createCompatibleVolatileImage(int width, 148 int height, 149 int transparency); 150 151 /** 152 * Creates a volatile image with the specified capabilities and transparency. 153 * If the backend cannot meet the requested capabilities and transparency, 154 * an AWTException is thrown. 155 * 156 * @param width the width of the image 157 * @param height the height of the image 158 * @param caps the requested capabilities 159 * @param transparency the required transparency 160 * 161 * @return a volatile image with the specified capabilites and transparency 162 * 163 * @throws AWTException if the required capabilities and transparency cannot 164 * be met 165 * 166 * @since 1.5 167 */ createCompatibleVolatileImage(int width, int height, ImageCapabilities caps, int transparency)168 public VolatileImage createCompatibleVolatileImage(int width, int height, 169 ImageCapabilities caps, 170 int transparency) 171 throws AWTException 172 { 173 // Must be overridden by implementations to check caps. 174 return createCompatibleVolatileImage(width, height, transparency); 175 } 176 177 /** 178 * Returns a buffered image optimized to this device, and with the specified 179 * transparency, so that blitting can be supported in the buffered image. 180 * 181 * @param w the width of the buffer 182 * @param h the height of the buffer 183 * @param transparency the transparency of the buffer 184 * @return the buffered image, or null if none is supported 185 * @see Transparency#OPAQUE 186 * @see Transparency#BITMASK 187 * @see Transparency#TRANSLUCENT 188 */ createCompatibleImage(int w, int h, int transparency)189 public abstract BufferedImage createCompatibleImage(int w, int h, 190 int transparency); 191 192 /** 193 * Gets the color model of the corresponding device. 194 * 195 * @return the color model 196 */ getColorModel()197 public abstract ColorModel getColorModel(); 198 199 /** 200 * Gets a color model for the corresponding device which supports the desired 201 * transparency level. 202 * 203 * @param transparency the transparency of the model 204 * @return the color model, with transparency 205 * @see Transparency#OPAQUE 206 * @see Transparency#BITMASK 207 * @see Transparency#TRANSLUCENT 208 */ getColorModel(int transparency)209 public abstract ColorModel getColorModel(int transparency); 210 211 /** 212 * Returns a transform that maps user coordinates to device coordinates. The 213 * preferred mapping is about 72 user units to 1 inch (2.54 cm) of physical 214 * space. This is often the identity transform. The device coordinates have 215 * the origin at the upper left, with increasing x to the right, and 216 * increasing y to the bottom. 217 * 218 * @return the transformation from user space to device space 219 * @see #getNormalizingTransform() 220 */ getDefaultTransform()221 public abstract AffineTransform getDefaultTransform(); 222 223 /** 224 * Returns a transform that maps user coordinates to device coordinates. The 225 * exact mapping is 72 user units to 1 inch (2.54 cm) of physical space. 226 * This is often the identity transform. The device coordinates have the 227 * origin at the upper left, with increasing x to the right, and increasing 228 * y to the bottom. Note that this is more accurate (and thus, sometimes more 229 * costly) than the default transform. 230 * 231 * @return the normalized transformation from user space to device space 232 * @see #getDefaultTransform() 233 */ getNormalizingTransform()234 public abstract AffineTransform getNormalizingTransform(); 235 236 /** 237 * Returns the bounds of the configuration, in device coordinates. If this 238 * is a virtual device (for example, encompassing several screens), the 239 * bounds may have a non-zero origin. 240 * 241 * @return the device bounds 242 * @since 1.3 243 */ getBounds()244 public abstract Rectangle getBounds(); 245 246 /** 247 * Returns the buffering capabilities of this configuration. 248 * 249 * @return the buffer capabilities 250 * @since 1.4 251 */ getBufferCapabilities()252 public BufferCapabilities getBufferCapabilities() 253 { 254 if (imageCapabilities == null) 255 getImageCapabilities(); 256 257 if (bufferCapabilities == null) 258 bufferCapabilities = new BufferCapabilities(imageCapabilities, 259 imageCapabilities, null); 260 return bufferCapabilities; 261 } 262 263 /** 264 * Returns the imaging capabilities of this configuration. 265 * 266 * @return the image capabilities 267 * @since 1.4 268 */ getImageCapabilities()269 public ImageCapabilities getImageCapabilities() 270 { 271 if (imageCapabilities == null) 272 imageCapabilities = new ImageCapabilities(false); 273 return imageCapabilities; 274 } 275 } // class GraphicsConfiguration 276