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