| /* RenderingHints.java -- |
| Copyright (C) 2000, 2001, 2002, 2004, 2005 Free Software Foundation |
| |
| 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.util.Collection; |
| import java.util.Collections; |
| import java.util.HashMap; |
| import java.util.Iterator; |
| import java.util.Map; |
| import java.util.Set; |
| |
| /** |
| * A collection of (key, value) items that provide 'hints' for the |
| * {@link java.awt.Graphics2D} rendering pipeline. Because these |
| * items are hints only, they may be ignored by a particular |
| * {@link java.awt.Graphics2D} implementation. |
| * |
| * @author Rolf W. Rasmussen (rolfwr@ii.uib.no) |
| * @author Eric Blake (ebb9@email.byu.edu) |
| */ |
| public class RenderingHints implements Map, Cloneable |
| { |
| /** |
| * The base class used to represent keys. |
| */ |
| public abstract static class Key |
| { |
| private final int key; |
| |
| /** |
| * Creates a new key. |
| * |
| * @param privateKey the private key. |
| */ |
| protected Key(int privateKey) |
| { |
| key = privateKey; |
| } |
| |
| /** |
| * Returns <code>true</code> if the specified value is compatible with |
| * this key, and <code>false</code> otherwise. |
| * |
| * @param value the value (<code>null</code> permitted). |
| * |
| * @return A boolean. |
| */ |
| public abstract boolean isCompatibleValue(Object value); |
| |
| /** |
| * Returns the private key for this instance. |
| * |
| * @return The private key. |
| */ |
| protected final int intKey() |
| { |
| return key; |
| } |
| |
| /** |
| * Returns a hash code for the key. |
| * |
| * @return A hash code. |
| */ |
| public final int hashCode() |
| { |
| return System.identityHashCode(this); |
| } |
| |
| /** |
| * Checks this key for equality with an arbitrary object. |
| * |
| * @param other the object (<code>null</code> permitted) |
| * |
| * @return A boolean. |
| */ |
| public final boolean equals(Object other) |
| { |
| return this == other; |
| } |
| } // class Key |
| |
| private static final class KeyImpl extends Key |
| { |
| final String description; |
| final Object v1; |
| final Object v2; |
| final Object v3; |
| |
| KeyImpl(int privateKey, String description, |
| Object v1, Object v2, Object v3) |
| { |
| super(privateKey); |
| this.description = description; |
| this.v1 = v1; |
| this.v2 = v2; |
| this.v3 = v3; |
| } |
| |
| /** |
| * Returns <code>true</code> if the specified value is compatible with |
| * this key, and <code>false</code> otherwise. |
| * |
| * @param value the value (<code>null</code> permitted). |
| * |
| * @return A boolean. |
| */ |
| public boolean isCompatibleValue(Object value) |
| { |
| return value == v1 || value == v2 || value == v3; |
| } |
| |
| /** |
| * Returns a string representation of the key. |
| * |
| * @return A string. |
| */ |
| public String toString() |
| { |
| return description; |
| } |
| } // class KeyImpl |
| |
| private HashMap hintMap = new HashMap(); |
| |
| /** |
| * A key for the 'antialiasing' hint. Permitted values are: |
| * <p> |
| * <table> |
| * <tr> |
| * <td>{@link #VALUE_ANTIALIAS_OFF}</td> |
| * <td>Render without antialiasing (better speed).</td> |
| * </tr> |
| * <tr> |
| * <td>{@link #VALUE_ANTIALIAS_ON}</td> |
| * <td>Render with antialiasing (better quality).</td> |
| * </tr> |
| * <tr> |
| * <td>{@link #VALUE_ANTIALIAS_DEFAULT}</td> |
| * <td>Use the default value for antialiasing.</td> |
| * </tr> |
| * </table> |
| */ |
| public static final Key KEY_ANTIALIASING; |
| |
| /** |
| * This value is for use with the {@link #KEY_ANTIALIASING} key. |
| */ |
| public static final Object VALUE_ANTIALIAS_ON |
| = "Antialiased rendering mode"; |
| |
| /** |
| * This value is for use with the {@link #KEY_ANTIALIASING} key. |
| */ |
| public static final Object VALUE_ANTIALIAS_OFF |
| = "Nonantialiased rendering mode"; |
| |
| /** |
| * This value is for use with the {@link #KEY_ANTIALIASING} key. |
| */ |
| public static final Object VALUE_ANTIALIAS_DEFAULT |
| = "Default antialiasing rendering mode"; |
| |
| /** |
| * A key for the 'rendering' hint. Permitted values are: |
| * <p> |
| * <table> |
| * <tr> |
| * <td>{@link #VALUE_RENDER_SPEED}</td> |
| * <td>Prefer speed over quality when rendering.</td> |
| * </tr> |
| * <tr> |
| * <td>{@link #VALUE_RENDER_QUALITY}</td> |
| * <td>Prefer quality over speed when rendering.</td> |
| * </tr> |
| * <tr> |
| * <td>{@link #VALUE_RENDER_DEFAULT}</td> |
| * <td>Use the default value for quality vs. speed when rendering.</td> |
| * </tr> |
| * </table> |
| */ |
| public static final Key KEY_RENDERING; |
| |
| /** |
| * This value is for use with the {@link #KEY_RENDERING} key. |
| */ |
| public static final Object VALUE_RENDER_SPEED |
| = "Fastest rendering methods"; |
| |
| /** |
| * This value is for use with the {@link #KEY_RENDERING} key. |
| */ |
| public static final Object VALUE_RENDER_QUALITY |
| = "Highest quality rendering methods"; |
| |
| /** |
| * This value is for use with the {@link #KEY_RENDERING} key. |
| */ |
| public static final Object VALUE_RENDER_DEFAULT |
| = "Default rendering methods"; |
| |
| /** |
| * A key for the 'dithering' hint. Permitted values are: |
| * <p> |
| * <table> |
| * <tr> |
| * <td>{@link #VALUE_DITHER_DISABLE}</td> |
| * <td>Disable dithering.</td> |
| * </tr> |
| * <tr> |
| * <td>{@link #VALUE_DITHER_ENABLE}</td> |
| * <td>Enable dithering.</td> |
| * </tr> |
| * <tr> |
| * <td>{@link #VALUE_DITHER_DEFAULT}</td> |
| * <td>Use the default value for dithering.</td> |
| * </tr> |
| * </table> |
| */ |
| public static final Key KEY_DITHERING; |
| |
| /** |
| * This value is for use with the {@link #KEY_DITHERING} key. |
| */ |
| public static final Object VALUE_DITHER_DISABLE |
| = "Nondithered rendering mode"; |
| |
| /** |
| * This value is for use with the {@link #KEY_DITHERING} key. |
| */ |
| public static final Object VALUE_DITHER_ENABLE |
| = "Dithered rendering mode"; |
| |
| /** |
| * This value is for use with the {@link #KEY_DITHERING} key. |
| */ |
| public static final Object VALUE_DITHER_DEFAULT |
| = "Default dithering mode"; |
| |
| /** |
| * A key for the 'text antialiasing' hint. Permitted values are: |
| * <p> |
| * <table> |
| * <tr> |
| * <td>{@link #VALUE_TEXT_ANTIALIAS_ON}</td> |
| * <td>Render text with antialiasing (better quality usually).</td> |
| * </tr> |
| * <tr> |
| * <td>{@link #VALUE_TEXT_ANTIALIAS_OFF}</td> |
| * <td>Render test without antialiasing (better speed).</td> |
| * </tr> |
| * <tr> |
| * <td>{@link #VALUE_TEXT_ANTIALIAS_DEFAULT}</td> |
| * <td>Use the default value for text antialiasing.</td> |
| * </tr> |
| * </table> |
| */ |
| public static final Key KEY_TEXT_ANTIALIASING; |
| |
| /** |
| * This value is for use with the {@link #KEY_TEXT_ANTIALIASING} key. |
| */ |
| public static final Object VALUE_TEXT_ANTIALIAS_ON |
| = "Antialiased text mode"; |
| |
| /** |
| * This value is for use with the {@link #KEY_TEXT_ANTIALIASING} key. |
| */ |
| public static final Object VALUE_TEXT_ANTIALIAS_OFF |
| = "Nonantialiased text mode"; |
| |
| /** |
| * This value is for use with the {@link #KEY_TEXT_ANTIALIASING} key. |
| */ |
| public static final Object VALUE_TEXT_ANTIALIAS_DEFAULT |
| = "Default antialiasing text mode"; |
| |
| /** |
| * A key for the 'fractional metrics' hint. Permitted values are: |
| * <p> |
| * <table> |
| * <tr> |
| * <td>{@link #VALUE_FRACTIONALMETRICS_OFF}</td> |
| * <td>Render text with fractional metrics off.</td> |
| * </tr> |
| * <tr> |
| * <td>{@link #VALUE_FRACTIONALMETRICS_ON}</td> |
| * <td>Render text with fractional metrics on.</td> |
| * </tr> |
| * <tr> |
| * <td>{@link #VALUE_FRACTIONALMETRICS_DEFAULT}</td> |
| * <td>Use the default value for fractional metrics.</td> |
| * </tr> |
| * </table> |
| */ |
| public static final Key KEY_FRACTIONALMETRICS; |
| |
| /** |
| * This value is for use with the {@link #KEY_FRACTIONALMETRICS} key. |
| */ |
| public static final Object VALUE_FRACTIONALMETRICS_OFF |
| = "Integer text metrics mode"; |
| |
| /** |
| * This value is for use with the {@link #KEY_FRACTIONALMETRICS} key. |
| */ |
| public static final Object VALUE_FRACTIONALMETRICS_ON |
| = "Fractional text metrics mode"; |
| |
| /** |
| * This value is for use with the {@link #KEY_FRACTIONALMETRICS} key. |
| */ |
| public static final Object VALUE_FRACTIONALMETRICS_DEFAULT |
| = "Default fractional text metrics mode"; |
| |
| /** |
| * A key for the 'interpolation' hint. Permitted values are: |
| * <p> |
| * <table> |
| * <tr> |
| * <td>{@link #VALUE_INTERPOLATION_NEAREST_NEIGHBOR}</td> |
| * <td>Use nearest neighbour interpolation.</td> |
| * </tr> |
| * <tr> |
| * <td>{@link #VALUE_INTERPOLATION_BILINEAR}</td> |
| * <td>Use bilinear interpolation.</td> |
| * </tr> |
| * <tr> |
| * <td>{@link #VALUE_INTERPOLATION_BICUBIC}</td> |
| * <td>Use bicubic interpolation.</td> |
| * </tr> |
| * </table> |
| */ |
| public static final Key KEY_INTERPOLATION; |
| |
| /** |
| * This value is for use with the {@link #KEY_INTERPOLATION} key. |
| */ |
| public static final Object VALUE_INTERPOLATION_NEAREST_NEIGHBOR |
| = "Nearest Neighbor image interpolation mode"; |
| |
| /** |
| * This value is for use with the {@link #KEY_INTERPOLATION} key. |
| */ |
| public static final Object VALUE_INTERPOLATION_BILINEAR |
| = "Bilinear image interpolation mode"; |
| |
| /** |
| * This value is for use with the {@link #KEY_INTERPOLATION} key. |
| */ |
| public static final Object VALUE_INTERPOLATION_BICUBIC |
| = "Bicubic image interpolation mode"; |
| |
| /** |
| * A key for the 'alpha interpolation' hint. Permitted values are: |
| * <p> |
| * <table> |
| * <tr> |
| * <td>{@link #VALUE_ALPHA_INTERPOLATION_SPEED}</td> |
| * <td>Prefer speed over quality.</td> |
| * </tr> |
| * <tr> |
| * <td>{@link #VALUE_ALPHA_INTERPOLATION_QUALITY}</td> |
| * <td>Prefer quality over speed.</td> |
| * </tr> |
| * <tr> |
| * <td>{@link #VALUE_ALPHA_INTERPOLATION_DEFAULT}</td> |
| * <td>Use the default setting.</td> |
| * </tr> |
| * </table> |
| */ |
| public static final Key KEY_ALPHA_INTERPOLATION; |
| |
| /** |
| * This value is for use with the {@link #KEY_ALPHA_INTERPOLATION} key. |
| */ |
| public static final Object VALUE_ALPHA_INTERPOLATION_SPEED |
| = "Fastest alpha blending methods"; |
| |
| /** |
| * This value is for use with the {@link #KEY_ALPHA_INTERPOLATION} key. |
| */ |
| public static final Object VALUE_ALPHA_INTERPOLATION_QUALITY |
| = "Highest quality alpha blending methods"; |
| |
| /** |
| * This value is for use with the {@link #KEY_ALPHA_INTERPOLATION} key. |
| */ |
| public static final Object VALUE_ALPHA_INTERPOLATION_DEFAULT |
| = "Default alpha blending methods"; |
| |
| /** |
| * A key for the 'color rendering' hint. Permitted values are: |
| * <p> |
| * <table> |
| * <tr> |
| * <td>{@link #VALUE_COLOR_RENDER_SPEED}</td> |
| * <td>Prefer speed over quality.</td> |
| * </tr> |
| * <tr> |
| * <td>{@link #VALUE_COLOR_RENDER_QUALITY}</td> |
| * <td>Prefer quality over speed.</td> |
| * </tr> |
| * <tr> |
| * <td>{@link #VALUE_COLOR_RENDER_DEFAULT}</td> |
| * <td>Use the default setting.</td> |
| * </tr> |
| * </table> |
| */ |
| public static final Key KEY_COLOR_RENDERING; |
| |
| /** |
| * This value is for use with the {@link #KEY_COLOR_RENDERING} key. |
| */ |
| public static final Object VALUE_COLOR_RENDER_SPEED |
| = "Fastest color rendering mode"; |
| |
| /** |
| * This value is for use with the {@link #KEY_COLOR_RENDERING} key. |
| */ |
| public static final Object VALUE_COLOR_RENDER_QUALITY |
| = "Highest quality color rendering mode"; |
| |
| /** |
| * This value is for use with the {@link #KEY_COLOR_RENDERING} key. |
| */ |
| public static final Object VALUE_COLOR_RENDER_DEFAULT |
| = "Default color rendering mode"; |
| |
| /** |
| * A key for the 'stroke control' hint. Permitted values are: |
| * <p> |
| * <table> |
| * <tr> |
| * <td>{@link #VALUE_STROKE_DEFAULT}</td> |
| * <td>Use the default setting.</td> |
| * </tr> |
| * <tr> |
| * <td>{@link #VALUE_STROKE_NORMALIZE}</td> |
| * <td>XXX</td> |
| * </tr> |
| * <tr> |
| * <td>{@link #VALUE_STROKE_PURE}</td> |
| * <td>XXX</td> |
| * </tr> |
| * </table> |
| */ |
| public static final Key KEY_STROKE_CONTROL; |
| |
| /** |
| * This value is for use with the {@link #KEY_STROKE_CONTROL} key. |
| */ |
| public static final Object VALUE_STROKE_DEFAULT |
| = "Default stroke normalization"; |
| |
| /** |
| * This value is for use with the {@link #KEY_STROKE_CONTROL} key. |
| */ |
| public static final Object VALUE_STROKE_NORMALIZE |
| = "Normalize strokes for consistent rendering"; |
| |
| /** |
| * This value is for use with the {@link #KEY_STROKE_CONTROL} key. |
| */ |
| public static final Object VALUE_STROKE_PURE |
| = "Pure stroke conversion for accurate paths"; |
| |
| static |
| { |
| KEY_ANTIALIASING = new KeyImpl(1, "Global antialiasing enable key", |
| VALUE_ANTIALIAS_ON, |
| VALUE_ANTIALIAS_OFF, |
| VALUE_ANTIALIAS_DEFAULT); |
| KEY_RENDERING = new KeyImpl(2, "Global rendering quality key", |
| VALUE_RENDER_SPEED, |
| VALUE_RENDER_QUALITY, |
| VALUE_RENDER_DEFAULT); |
| KEY_DITHERING = new KeyImpl(3, "Dithering quality key", |
| VALUE_DITHER_DISABLE, |
| VALUE_DITHER_ENABLE, |
| VALUE_DITHER_DEFAULT); |
| KEY_TEXT_ANTIALIASING |
| = new KeyImpl(4, "Text-specific antialiasing enable key", |
| VALUE_TEXT_ANTIALIAS_ON, |
| VALUE_TEXT_ANTIALIAS_OFF, |
| VALUE_TEXT_ANTIALIAS_DEFAULT); |
| KEY_FRACTIONALMETRICS = new KeyImpl(5, "Fractional metrics enable key", |
| VALUE_FRACTIONALMETRICS_OFF, |
| VALUE_FRACTIONALMETRICS_ON, |
| VALUE_FRACTIONALMETRICS_DEFAULT); |
| KEY_INTERPOLATION = new KeyImpl(6, "Image interpolation method key", |
| VALUE_INTERPOLATION_NEAREST_NEIGHBOR, |
| VALUE_INTERPOLATION_BILINEAR, |
| VALUE_INTERPOLATION_BICUBIC); |
| KEY_ALPHA_INTERPOLATION |
| = new KeyImpl(7, "Alpha blending interpolation method key", |
| VALUE_ALPHA_INTERPOLATION_SPEED, |
| VALUE_ALPHA_INTERPOLATION_QUALITY, |
| VALUE_ALPHA_INTERPOLATION_DEFAULT); |
| KEY_COLOR_RENDERING = new KeyImpl(8, "Color rendering quality key", |
| VALUE_COLOR_RENDER_SPEED, |
| VALUE_COLOR_RENDER_QUALITY, |
| VALUE_COLOR_RENDER_DEFAULT); |
| KEY_STROKE_CONTROL = new KeyImpl(9, "Stroke normalization control key", |
| VALUE_STROKE_DEFAULT, |
| VALUE_STROKE_NORMALIZE, |
| VALUE_STROKE_PURE); |
| } |
| |
| /** |
| * Creates a new collection of hints containing all the (key, value) pairs |
| * in the specified map. |
| * |
| * @param init a map containing a collection of hints (<code>null</code> |
| * permitted). |
| */ |
| public RenderingHints(Map init) |
| { |
| if (init != null) |
| putAll(init); |
| } |
| |
| /** |
| * Creates a new collection containing a single (key, value) pair. |
| * |
| * @param key the key. |
| * @param value the value. |
| */ |
| public RenderingHints(Key key, Object value) |
| { |
| put(key, value); |
| } |
| |
| /** |
| * Returns the number of hints in the collection. |
| * |
| * @return The number of hints. |
| */ |
| public int size() |
| { |
| return hintMap.size(); |
| } |
| |
| /** |
| * Returns <code>true</code> if there are no hints in the collection, |
| * and <code>false</code> otherwise. |
| * |
| * @return A boolean. |
| */ |
| public boolean isEmpty() |
| { |
| return hintMap.isEmpty(); |
| } |
| |
| /** |
| * Returns <code>true</code> if the collection of hints contains the |
| * specified key, and <code>false</code> otherwise. |
| * |
| * @param key the key (<code>null</code> not permitted). |
| * |
| * @return A boolean. |
| * |
| * @throws NullPointerException if <code>key</code> is <code>null</code>. |
| * @throws ClassCastException if <code>key</code> is not a {@link Key}. |
| */ |
| public boolean containsKey(Object key) |
| { |
| if (key == null) |
| throw new NullPointerException(); |
| // don't remove the cast, it is necessary to throw the required exception |
| return hintMap.containsKey((Key) key); |
| } |
| |
| /** |
| * Returns <code>true</code> if the collection of hints contains the |
| * specified value, and <code>false</code> otherwise. |
| * |
| * @param value the value. |
| * |
| * @return A boolean. |
| */ |
| public boolean containsValue(Object value) |
| { |
| return hintMap.containsValue(value); |
| } |
| |
| /** |
| * Returns the value associated with the specified key, or <code>null</code> |
| * if there is no value defined for the key. |
| * |
| * @param key the key (<code>null</code> permitted). |
| * |
| * @return The value (possibly <code>null</code>). |
| * |
| * @throws ClassCastException if <code>key</code> is not a {@link Key}. |
| * |
| * @see #containsKey(Object) |
| */ |
| public Object get(Object key) |
| { |
| // don't remove the cast, it is necessary to throw the required exception |
| return hintMap.get((Key) key); |
| } |
| |
| /** |
| * Adds a (key, value) pair to the collection of hints (if the |
| * collection already contains the specified key, then the |
| * value is updated). |
| * |
| * @param key the key. |
| * @param value the value. |
| * |
| * @return the previous value of the key or <code>null</code> if the key |
| * didn't have a value yet. |
| */ |
| public Object put(Object key, Object value) |
| { |
| if (key == null || value == null) |
| throw new NullPointerException(); |
| if (! ((Key) key).isCompatibleValue(value)) |
| throw new IllegalArgumentException(); |
| return hintMap.put(key, value); |
| } |
| |
| /** |
| * Adds all the hints from a collection to this collection. |
| * |
| * @param hints the hint collection. |
| */ |
| public void add(RenderingHints hints) |
| { |
| hintMap.putAll(hints); |
| } |
| |
| /** |
| * Clears all the hints from this collection. |
| */ |
| public void clear() |
| { |
| hintMap.clear(); |
| } |
| |
| /** |
| * Removes a hint from the collection. |
| * |
| * @param key the key. |
| * |
| * @return The value that was associated with the key, or <code>null</code> if |
| * the key was not part of the collection |
| * |
| * @throws ClassCastException if the key is not a subclass of |
| * {@link RenderingHints.Key}. |
| */ |
| public Object remove(Object key) |
| { |
| // don't remove the (Key) cast, it is necessary to throw the exception |
| // required by the spec |
| return hintMap.remove((Key) key); |
| } |
| |
| /** |
| * Adds a collection of (key, value) pairs to the collection. |
| * |
| * @param m a map containing (key, value) items. |
| * |
| * @throws ClassCastException if the map contains a key that is not |
| * a subclass of {@link RenderingHints.Key}. |
| * @throws IllegalArgumentException if the map contains a value that is |
| * not compatible with its key. |
| */ |
| public void putAll(Map m) |
| { |
| // preprocess map to generate appropriate exceptions |
| Iterator iterator = m.keySet().iterator(); |
| while (iterator.hasNext()) |
| { |
| Key key = (Key) iterator.next(); |
| if (!key.isCompatibleValue(m.get(key))) |
| throw new IllegalArgumentException(); |
| } |
| // map is OK, update |
| hintMap.putAll(m); |
| } |
| |
| /** |
| * Returns a set containing the keys from this collection. |
| * |
| * @return A set of keys. |
| */ |
| public Set keySet() |
| { |
| return hintMap.keySet(); |
| } |
| |
| /** |
| * Returns a collection of the values from this hint collection. The |
| * collection is backed by the <code>RenderingHints</code> instance, |
| * so updates to one will affect the other. |
| * |
| * @return A collection of values. |
| */ |
| public Collection values() |
| { |
| return hintMap.values(); |
| } |
| |
| /** |
| * Returns a set of entries from the collection. |
| * |
| * @return A set of entries. |
| */ |
| public Set entrySet() |
| { |
| return Collections.unmodifiableSet(hintMap.entrySet()); |
| } |
| |
| /** |
| * Checks this collection for equality with an arbitrary object. |
| * |
| * @param o the object (<code>null</code> permitted) |
| * |
| * @return A boolean. |
| */ |
| public boolean equals(Object o) |
| { |
| return hintMap.equals(o); |
| } |
| |
| /** |
| * Returns a hash code for the collection of hints. |
| * |
| * @return A hash code. |
| */ |
| public int hashCode() |
| { |
| return hintMap.hashCode(); |
| } |
| |
| /** |
| * Creates a clone of this instance. |
| * |
| * @return A clone. |
| */ |
| public Object clone() |
| { |
| try |
| { |
| RenderingHints copy = (RenderingHints) super.clone(); |
| copy.hintMap = (HashMap) hintMap.clone(); |
| return copy; |
| } |
| catch (CloneNotSupportedException e) |
| { |
| throw (Error) new InternalError().initCause(e); // Impossible |
| } |
| } |
| |
| /** |
| * Returns a string representation of this instance. |
| * |
| * @return A string. |
| */ |
| public String toString() |
| { |
| return hintMap.toString(); |
| } |
| } // class RenderingHints |