001: /*
002: * @(#)QtImageDecoderFactory.java 1.5 06/10/10
003: *
004: * Copyright 1990-2006 Sun Microsystems, Inc. All Rights Reserved.
005: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
006: *
007: * This program is free software; you can redistribute it and/or
008: * modify it under the terms of the GNU General Public License version
009: * 2 only, as published by the Free Software Foundation.
010: *
011: * This program is distributed in the hope that it will be useful, but
012: * WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * General Public License version 2 for more details (a copy is
015: * included at /legal/license.txt).
016: *
017: * You should have received a copy of the GNU General Public License
018: * version 2 along with this work; if not, write to the Free Software
019: * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
020: * 02110-1301 USA
021: *
022: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
023: * Clara, CA 95054 or visit www.sun.com if you need additional
024: * information or have any questions.
025: *
026: */
027:
028: package sun.awt.qt;
029:
030: import java.io.*;
031: import sun.awt.image.*;
032:
033: /**
034: * <code>QtImageDecoderFactory</code> produces <code>QtImageDecoder</code>
035: * for the GIF, JPEG and PNG image formats on QWS platform.
036: * <code>QtToolkit</code> is responsible for instantiating this class
037: * and set as the default decoder factory.
038: * <p>
039: * Setting <b>-Dsun.awt.qt.img.decoder.factory.enable=false</b> on the
040: * application command line will disable the installation of this
041: * factory and will use java image decoders.
042: *
043: * @see sun.awt.image.ImageDecoderFactory
044: */
045: class QtImageDecoderFactory extends ImageDecoderFactory {
046: java.util.HashMap nativeDecoderList;
047:
048: QtImageDecoderFactory() {
049: this .nativeDecoderList = new java.util.HashMap();
050: }
051:
052: /**
053: * Create an instance of <codeQtImageDecoderFactory</code> with a
054: * list of QT image formats that should be enabled
055: */
056: QtImageDecoderFactory(String[] qtImgFormats) {
057: this ();
058: enableNativeDecoder(qtImgFormats);
059: }
060:
061: /**
062: * Creates an instance of a new <code>ImageDecoder</code> for the
063: * image format specified.
064: */
065: public ImageDecoder newImageDecoder(InputStreamImageSource source,
066: InputStream input, String imgFormat) throws IOException {
067: ImageDecoder decoder = null;
068: if (this .nativeDecoderList.get(imgFormat) == QtImageDecoder.class) {
069: decoder = new QtImageDecoder(source, input, imgFormat);
070: } else {
071: /* for all other formats, let us delegate to the
072: * super class */
073: decoder = super .newImageDecoder(source, input, imgFormat);
074: }
075:
076: return decoder;
077: }
078:
079: /**
080: * Enable the Qt's native decoder for the image format specified
081: *
082: * @param imgFormat image format as specified by the constants defined
083: * in <code>sun.awt.image.ImageDecoderFactory</code>
084: */
085: synchronized void enableNativeDecoder(String imgFormat) {
086: this .nativeDecoderList.put(imgFormat, QtImageDecoder.class);
087: }
088:
089: /**
090: * Disable the Qt's native decoder for the image format specified
091: *
092: * @param imgFormat image format as specified by the constants defined
093: * in <code>sun.awt.image.ImageDecoderFactory</code>
094: */
095: synchronized void disableNativeDecoder(String imgFormat) {
096: this .nativeDecoderList.put(imgFormat, null);
097: }
098:
099: /**
100: * Enable the native decoders for the image formats supported by
101: * Qt.
102: *
103: * @param qtImgFormats QT image formats. On Qt 2.3.2 the following are
104: * the constants of interest
105: * <ul>
106: * <li><b>GIF</b></li>
107: * <li><b>JPEG</b></li>
108: * <li><b>PNG</b></li>
109: * <li><b>XBM</b></li>
110: * </ul>
111: */
112: private void enableNativeDecoder(String[] qtImgFormats) {
113: /* For all the image formats supported by Personal profile,
114: * enable the native decoder if the Qt platform supports it
115: */
116: for (int i = 0; i < qtImgFormats.length; i++) {
117: if (qtImgFormats[i].equals("GIF")) {
118: enableNativeDecoder(ImageDecoderFactory.IMG_FORMAT_GIF);
119: } else if (qtImgFormats[i].equals("JPEG")) {
120: enableNativeDecoder(ImageDecoderFactory.IMG_FORMAT_JPG);
121: } else if (qtImgFormats[i].equals("PNG")) {
122: enableNativeDecoder(ImageDecoderFactory.IMG_FORMAT_PNG);
123: }
124:
125: /*
126: * Note :- Eventhough Qt supports XBM, it does not render very
127: * well. We get a black rectangle. This could be because of
128: * the background color of the window. The same behavior is seen
129: * if we perform the same operations using a native QT app. So
130: * we are using the Java decoder for XBM which works fine.
131: */
132: }
133: }
134:
135: }
|