blob: 5dc08d914be36945f81741952c661b55364b0057 [file] [log] [blame]
J. Duke319a3b92007-12-01 00:00:00 +00001/*
2 * Copyright 1998-2005 Sun Microsystems, Inc. All Rights Reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Sun designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Sun in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
22 * CA 95054 USA or visit www.sun.com if you need additional information or
23 * have any questions.
24 */
25
26package sun.awt;
27
28import java.awt.RenderingHints;
29
30/**
31 * This class contains rendering hints that can be used by the
32 * {@link java.awt.Graphics2D} class, and classes that implement
33 * {@link java.awt.image.BufferedImageOp} and
34 * {@link java.awt.image.Raster}.
35 */
36public class SunHints {
37 /**
38 * Defines the type of all keys used to control various
39 * aspects of the rendering and imaging pipelines. Instances
40 * of this class are immutable and unique which means that
41 * tests for matches can be made using the == operator instead
42 * of the more expensive equals() method.
43 */
44 public static class Key extends RenderingHints.Key {
45 String description;
46
47 /**
48 * Construct a key using the indicated private key. Each
49 * subclass of Key maintains its own unique domain of integer
50 * keys. No two objects with the same integer key and of the
51 * same specific subclass can be constructed. An exception
52 * will be thrown if an attempt is made to construct another
53 * object of a given class with the same integer key as a
54 * pre-existing instance of that subclass of Key.
55 */
56 public Key(int privatekey, String description) {
57 super(privatekey);
58 this.description = description;
59 }
60
61 /**
62 * Returns the numeric index associated with this Key. This
63 * is useful for use in switch statements and quick lookups
64 * of the setting of a particular key.
65 */
66 public final int getIndex() {
67 return intKey();
68 }
69
70 /**
71 * Returns a string representation of the Key.
72 */
73 public final String toString() {
74 return description;
75 }
76
77 /**
78 * Returns true if the specified object is a valid value
79 * for this Key.
80 */
81 public boolean isCompatibleValue(Object val) {
82 if (val instanceof Value) {
83 return ((Value)val).isCompatibleKey(this);
84 }
85 return false;
86 }
87 }
88
89 /**
90 * Defines the type of all "enumerative" values used to control
91 * various aspects of the rendering and imaging pipelines. Instances
92 * of this class are immutable and unique which means that
93 * tests for matches can be made using the == operator instead
94 * of the more expensive equals() method.
95 */
96 public static class Value {
97 private SunHints.Key myKey;
98 private int index;
99 private String description;
100
101 private static Value[][] ValueObjects =
102 new Value[NUM_KEYS][VALS_PER_KEY];
103
104 private synchronized static void register(SunHints.Key key,
105 Value value) {
106 int kindex = key.getIndex();
107 int vindex = value.getIndex();
108 if (ValueObjects[kindex][vindex] != null) {
109 throw new InternalError("duplicate index: "+vindex);
110 }
111 ValueObjects[kindex][vindex] = value;
112 }
113
114 public static Value get(int keyindex, int valueindex) {
115 return ValueObjects[keyindex][valueindex];
116 }
117
118 /**
119 * Construct a value using the indicated private index. Each
120 * subclass of Value maintains its own unique domain of integer
121 * indices. Enforcing the uniqueness of the integer indices
122 * is left to the subclass.
123 */
124 public Value(SunHints.Key key, int index, String description) {
125 this.myKey = key;
126 this.index = index;
127 this.description = description;
128
129 register(key, this);
130 }
131
132 /**
133 * Returns the numeric index associated with this Key. This
134 * is useful for use in switch statements and quick lookups
135 * of the setting of a particular key.
136 */
137 public final int getIndex() {
138 return index;
139 }
140
141 /**
142 * Returns a string representation of this Value.
143 */
144 public final String toString() {
145 return description;
146 }
147
148 /**
149 * Returns true if the specified object is a valid Key
150 * for this Value.
151 */
152 public final boolean isCompatibleKey(Key k) {
153 return myKey == k;
154 }
155
156 /**
157 * The hash code for all SunHints.Value objects will be the same
158 * as the system identity code of the object as defined by the
159 * System.identityHashCode() method.
160 */
161 public final int hashCode() {
162 return System.identityHashCode(this);
163 }
164
165 /**
166 * The equals method for all SunHints.Value objects will return
167 * the same result as the equality operator '=='.
168 */
169 public final boolean equals(Object o) {
170 return this == o;
171 }
172 }
173
174 private static final int NUM_KEYS = 9;
175 private static final int VALS_PER_KEY = 8;
176
177 /**
178 * Rendering hint key and values
179 */
180 public static final int INTKEY_RENDERING = 0;
181 public static final int INTVAL_RENDER_DEFAULT = 0;
182 public static final int INTVAL_RENDER_SPEED = 1;
183 public static final int INTVAL_RENDER_QUALITY = 2;
184
185 /**
186 * Antialiasing hint key and values
187 */
188 public static final int INTKEY_ANTIALIASING = 1;
189 public static final int INTVAL_ANTIALIAS_DEFAULT = 0;
190 public static final int INTVAL_ANTIALIAS_OFF = 1;
191 public static final int INTVAL_ANTIALIAS_ON = 2;
192
193 /**
194 * Text antialiasing hint key and values
195 */
196 public static final int INTKEY_TEXT_ANTIALIASING = 2;
197 public static final int INTVAL_TEXT_ANTIALIAS_DEFAULT = 0;
198 public static final int INTVAL_TEXT_ANTIALIAS_OFF = 1;
199 public static final int INTVAL_TEXT_ANTIALIAS_ON = 2;
200 public static final int INTVAL_TEXT_ANTIALIAS_GASP = 3;
201 public static final int INTVAL_TEXT_ANTIALIAS_LCD_HRGB = 4;
202 public static final int INTVAL_TEXT_ANTIALIAS_LCD_HBGR = 5;
203 public static final int INTVAL_TEXT_ANTIALIAS_LCD_VRGB = 6;
204 public static final int INTVAL_TEXT_ANTIALIAS_LCD_VBGR = 7;
205
206 /**
207 * Font fractional metrics hint key and values
208 */
209 public static final int INTKEY_FRACTIONALMETRICS = 3;
210 public static final int INTVAL_FRACTIONALMETRICS_DEFAULT = 0;
211 public static final int INTVAL_FRACTIONALMETRICS_OFF = 1;
212 public static final int INTVAL_FRACTIONALMETRICS_ON = 2;
213
214 /**
215 * Dithering hint key and values
216 */
217 public static final int INTKEY_DITHERING = 4;
218 public static final int INTVAL_DITHER_DEFAULT = 0;
219 public static final int INTVAL_DITHER_DISABLE = 1;
220 public static final int INTVAL_DITHER_ENABLE = 2;
221
222 /**
223 * Interpolation hint key and values
224 */
225 public static final int INTKEY_INTERPOLATION = 5;
226 public static final int INTVAL_INTERPOLATION_NEAREST_NEIGHBOR = 0;
227 public static final int INTVAL_INTERPOLATION_BILINEAR = 1;
228 public static final int INTVAL_INTERPOLATION_BICUBIC = 2;
229
230 /**
231 * Alpha interpolation hint key and values
232 */
233 public static final int INTKEY_ALPHA_INTERPOLATION = 6;
234 public static final int INTVAL_ALPHA_INTERPOLATION_DEFAULT = 0;
235 public static final int INTVAL_ALPHA_INTERPOLATION_SPEED = 1;
236 public static final int INTVAL_ALPHA_INTERPOLATION_QUALITY = 2;
237
238 /**
239 * Color rendering hint key and values
240 */
241 public static final int INTKEY_COLOR_RENDERING = 7;
242 public static final int INTVAL_COLOR_RENDER_DEFAULT = 0;
243 public static final int INTVAL_COLOR_RENDER_SPEED = 1;
244 public static final int INTVAL_COLOR_RENDER_QUALITY = 2;
245
246 /**
247 * Stroke normalization control hint key and values
248 */
249 public static final int INTKEY_STROKE_CONTROL = 8;
250 public static final int INTVAL_STROKE_DEFAULT = 0;
251 public static final int INTVAL_STROKE_NORMALIZE = 1;
252 public static final int INTVAL_STROKE_PURE = 2;
253
254 /**
255 * LCD text contrast control hint key.
256 * Value is "100" to make discontiguous with the others which
257 * are all enumerative and are of a different class.
258 */
259 public static final int INTKEY_AATEXT_LCD_CONTRAST = 100;
260
261 /**
262 * Rendering hint key and value objects
263 */
264 public static final Key KEY_RENDERING =
265 new SunHints.Key(SunHints.INTKEY_RENDERING,
266 "Global rendering quality key");
267 public static final Object VALUE_RENDER_SPEED =
268 new SunHints.Value(KEY_RENDERING,
269 SunHints.INTVAL_RENDER_SPEED,
270 "Fastest rendering methods");
271 public static final Object VALUE_RENDER_QUALITY =
272 new SunHints.Value(KEY_RENDERING,
273 SunHints.INTVAL_RENDER_QUALITY,
274 "Highest quality rendering methods");
275 public static final Object VALUE_RENDER_DEFAULT =
276 new SunHints.Value(KEY_RENDERING,
277 SunHints.INTVAL_RENDER_DEFAULT,
278 "Default rendering methods");
279
280 /**
281 * Antialiasing hint key and value objects
282 */
283 public static final Key KEY_ANTIALIASING =
284 new SunHints.Key(SunHints.INTKEY_ANTIALIASING,
285 "Global antialiasing enable key");
286 public static final Object VALUE_ANTIALIAS_ON =
287 new SunHints.Value(KEY_ANTIALIASING,
288 SunHints.INTVAL_ANTIALIAS_ON,
289 "Antialiased rendering mode");
290 public static final Object VALUE_ANTIALIAS_OFF =
291 new SunHints.Value(KEY_ANTIALIASING,
292 SunHints.INTVAL_ANTIALIAS_OFF,
293 "Nonantialiased rendering mode");
294 public static final Object VALUE_ANTIALIAS_DEFAULT =
295 new SunHints.Value(KEY_ANTIALIASING,
296 SunHints.INTVAL_ANTIALIAS_DEFAULT,
297 "Default antialiasing rendering mode");
298
299 /**
300 * Text antialiasing hint key and value objects
301 */
302 public static final Key KEY_TEXT_ANTIALIASING =
303 new SunHints.Key(SunHints.INTKEY_TEXT_ANTIALIASING,
304 "Text-specific antialiasing enable key");
305 public static final Object VALUE_TEXT_ANTIALIAS_ON =
306 new SunHints.Value(KEY_TEXT_ANTIALIASING,
307 SunHints.INTVAL_TEXT_ANTIALIAS_ON,
308 "Antialiased text mode");
309 public static final Object VALUE_TEXT_ANTIALIAS_OFF =
310 new SunHints.Value(KEY_TEXT_ANTIALIASING,
311 SunHints.INTVAL_TEXT_ANTIALIAS_OFF,
312 "Nonantialiased text mode");
313 public static final Object VALUE_TEXT_ANTIALIAS_DEFAULT =
314 new SunHints.Value(KEY_TEXT_ANTIALIASING,
315 SunHints.INTVAL_TEXT_ANTIALIAS_DEFAULT,
316 "Default antialiasing text mode");
317 public static final Object VALUE_TEXT_ANTIALIAS_GASP =
318 new SunHints.Value(KEY_TEXT_ANTIALIASING,
319 SunHints.INTVAL_TEXT_ANTIALIAS_GASP,
320 "gasp antialiasing text mode");
321 public static final Object VALUE_TEXT_ANTIALIAS_LCD_HRGB =
322 new SunHints.Value(KEY_TEXT_ANTIALIASING,
323 SunHints.INTVAL_TEXT_ANTIALIAS_LCD_HRGB,
324 "LCD HRGB antialiasing text mode");
325 public static final Object VALUE_TEXT_ANTIALIAS_LCD_HBGR =
326 new SunHints.Value(KEY_TEXT_ANTIALIASING,
327 SunHints.INTVAL_TEXT_ANTIALIAS_LCD_HBGR,
328 "LCD HBGR antialiasing text mode");
329 public static final Object VALUE_TEXT_ANTIALIAS_LCD_VRGB =
330 new SunHints.Value(KEY_TEXT_ANTIALIASING,
331 SunHints.INTVAL_TEXT_ANTIALIAS_LCD_VRGB,
332 "LCD VRGB antialiasing text mode");
333 public static final Object VALUE_TEXT_ANTIALIAS_LCD_VBGR =
334 new SunHints.Value(KEY_TEXT_ANTIALIASING,
335 SunHints.INTVAL_TEXT_ANTIALIAS_LCD_VBGR,
336 "LCD VBGR antialiasing text mode");
337
338 /**
339 * Font fractional metrics hint key and value objects
340 */
341 public static final Key KEY_FRACTIONALMETRICS =
342 new SunHints.Key(SunHints.INTKEY_FRACTIONALMETRICS,
343 "Fractional metrics enable key");
344 public static final Object VALUE_FRACTIONALMETRICS_ON =
345 new SunHints.Value(KEY_FRACTIONALMETRICS,
346 SunHints.INTVAL_FRACTIONALMETRICS_ON,
347 "Fractional text metrics mode");
348 public static final Object VALUE_FRACTIONALMETRICS_OFF =
349 new SunHints.Value(KEY_FRACTIONALMETRICS,
350 SunHints.INTVAL_FRACTIONALMETRICS_OFF,
351 "Integer text metrics mode");
352 public static final Object VALUE_FRACTIONALMETRICS_DEFAULT =
353 new SunHints.Value(KEY_FRACTIONALMETRICS,
354 SunHints.INTVAL_FRACTIONALMETRICS_DEFAULT,
355 "Default fractional text metrics mode");
356
357 /**
358 * Dithering hint key and value objects
359 */
360 public static final Key KEY_DITHERING =
361 new SunHints.Key(SunHints.INTKEY_DITHERING,
362 "Dithering quality key");
363 public static final Object VALUE_DITHER_ENABLE =
364 new SunHints.Value(KEY_DITHERING,
365 SunHints.INTVAL_DITHER_ENABLE,
366 "Dithered rendering mode");
367 public static final Object VALUE_DITHER_DISABLE =
368 new SunHints.Value(KEY_DITHERING,
369 SunHints.INTVAL_DITHER_DISABLE,
370 "Nondithered rendering mode");
371 public static final Object VALUE_DITHER_DEFAULT =
372 new SunHints.Value(KEY_DITHERING,
373 SunHints.INTVAL_DITHER_DEFAULT,
374 "Default dithering mode");
375
376 /**
377 * Interpolation hint key and value objects
378 */
379 public static final Key KEY_INTERPOLATION =
380 new SunHints.Key(SunHints.INTKEY_INTERPOLATION,
381 "Image interpolation method key");
382 public static final Object VALUE_INTERPOLATION_NEAREST_NEIGHBOR =
383 new SunHints.Value(KEY_INTERPOLATION,
384 SunHints.INTVAL_INTERPOLATION_NEAREST_NEIGHBOR,
385 "Nearest Neighbor image interpolation mode");
386 public static final Object VALUE_INTERPOLATION_BILINEAR =
387 new SunHints.Value(KEY_INTERPOLATION,
388 SunHints.INTVAL_INTERPOLATION_BILINEAR,
389 "Bilinear image interpolation mode");
390 public static final Object VALUE_INTERPOLATION_BICUBIC =
391 new SunHints.Value(KEY_INTERPOLATION,
392 SunHints.INTVAL_INTERPOLATION_BICUBIC,
393 "Bicubic image interpolation mode");
394
395 /**
396 * Alpha interpolation hint key and value objects
397 */
398 public static final Key KEY_ALPHA_INTERPOLATION =
399 new SunHints.Key(SunHints.INTKEY_ALPHA_INTERPOLATION,
400 "Alpha blending interpolation method key");
401 public static final Object VALUE_ALPHA_INTERPOLATION_SPEED =
402 new SunHints.Value(KEY_ALPHA_INTERPOLATION,
403 SunHints.INTVAL_ALPHA_INTERPOLATION_SPEED,
404 "Fastest alpha blending methods");
405 public static final Object VALUE_ALPHA_INTERPOLATION_QUALITY =
406 new SunHints.Value(KEY_ALPHA_INTERPOLATION,
407 SunHints.INTVAL_ALPHA_INTERPOLATION_QUALITY,
408 "Highest quality alpha blending methods");
409 public static final Object VALUE_ALPHA_INTERPOLATION_DEFAULT =
410 new SunHints.Value(KEY_ALPHA_INTERPOLATION,
411 SunHints.INTVAL_ALPHA_INTERPOLATION_DEFAULT,
412 "Default alpha blending methods");
413
414 /**
415 * Color rendering hint key and value objects
416 */
417 public static final Key KEY_COLOR_RENDERING =
418 new SunHints.Key(SunHints.INTKEY_COLOR_RENDERING,
419 "Color rendering quality key");
420 public static final Object VALUE_COLOR_RENDER_SPEED =
421 new SunHints.Value(KEY_COLOR_RENDERING,
422 SunHints.INTVAL_COLOR_RENDER_SPEED,
423 "Fastest color rendering mode");
424 public static final Object VALUE_COLOR_RENDER_QUALITY =
425 new SunHints.Value(KEY_COLOR_RENDERING,
426 SunHints.INTVAL_COLOR_RENDER_QUALITY,
427 "Highest quality color rendering mode");
428 public static final Object VALUE_COLOR_RENDER_DEFAULT =
429 new SunHints.Value(KEY_COLOR_RENDERING,
430 SunHints.INTVAL_COLOR_RENDER_DEFAULT,
431 "Default color rendering mode");
432
433 /**
434 * Stroke normalization control hint key and value objects
435 */
436 public static final Key KEY_STROKE_CONTROL =
437 new SunHints.Key(SunHints.INTKEY_STROKE_CONTROL,
438 "Stroke normalization control key");
439 public static final Object VALUE_STROKE_DEFAULT =
440 new SunHints.Value(KEY_STROKE_CONTROL,
441 SunHints.INTVAL_STROKE_DEFAULT,
442 "Default stroke normalization");
443 public static final Object VALUE_STROKE_NORMALIZE =
444 new SunHints.Value(KEY_STROKE_CONTROL,
445 SunHints.INTVAL_STROKE_NORMALIZE,
446 "Normalize strokes for consistent rendering");
447 public static final Object VALUE_STROKE_PURE =
448 new SunHints.Value(KEY_STROKE_CONTROL,
449 SunHints.INTVAL_STROKE_PURE,
450 "Pure stroke conversion for accurate paths");
451
452
453 public static class LCDContrastKey extends Key {
454
455 public LCDContrastKey(int privatekey, String description) {
456 super(privatekey, description);
457 }
458
459 /**
460 * Returns true if the specified object is a valid value
461 * for this Key. The allowable range is 100 to 250.
462 */
463 public final boolean isCompatibleValue(Object val) {
464 if (val instanceof Integer) {
465 int ival = ((Integer)val).intValue();
466 return ival >= 100 && ival <= 250;
467 }
468 return false;
469 }
470
471 }
472
473 /**
474 * LCD text contrast hint key
475 */
476 public static final RenderingHints.Key
477 KEY_TEXT_ANTIALIAS_LCD_CONTRAST =
478 new LCDContrastKey(SunHints.INTKEY_AATEXT_LCD_CONTRAST,
479 "Text-specific LCD contrast key");
480}