1ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye/*
2ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye * Copyright (C) 2012 The Android Open Source Project
3ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye *
4ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye * Licensed under the Eclipse Public License, Version 1.0 (the "License");
5ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye * you may not use this file except in compliance with the License.
6ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye * You may obtain a copy of the License at
7ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye *
8ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye *      http://www.eclipse.org/org/documents/epl-v10.php
9ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye *
10ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye * Unless required by applicable law or agreed to in writing, software
11ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye * distributed under the License is distributed on an "AS IS" BASIS,
12ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye * See the License for the specific language governing permissions and
14ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye * limitations under the License.
15ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye */
16ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbyepackage com.android.ide.eclipse.adt.internal.assetstudio;
17ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye
18279445ad4561895db41309681de8dd1544d0ae22Tor Norbyeimport static com.android.ide.eclipse.adt.internal.wizards.templates.NewProjectWizard.DEFAULT_LAUNCHER_ICON;
19279445ad4561895db41309681de8dd1544d0ae22Tor Norbye
20494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbyeimport com.android.annotations.NonNull;
21279445ad4561895db41309681de8dd1544d0ae22Tor Norbyeimport com.android.assetstudiolib.GraphicGenerator;
22ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbyeimport com.android.assetstudiolib.GraphicGenerator.Shape;
23279445ad4561895db41309681de8dd1544d0ae22Tor Norbyeimport com.android.assetstudiolib.GraphicGeneratorContext;
24279445ad4561895db41309681de8dd1544d0ae22Tor Norbyeimport com.android.ide.eclipse.adt.AdtPlugin;
25279445ad4561895db41309681de8dd1544d0ae22Tor Norbyeimport com.android.ide.eclipse.adt.internal.wizards.templates.TemplateManager;
26ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye
27ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbyeimport org.eclipse.core.resources.IProject;
28ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbyeimport org.eclipse.swt.graphics.RGB;
29ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye
30494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbyeimport java.awt.Font;
31494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbyeimport java.awt.GraphicsEnvironment;
32279445ad4561895db41309681de8dd1544d0ae22Tor Norbyeimport java.awt.image.BufferedImage;
33ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbyeimport java.io.File;
34279445ad4561895db41309681de8dd1544d0ae22Tor Norbyeimport java.io.IOException;
35279445ad4561895db41309681de8dd1544d0ae22Tor Norbyeimport java.util.HashMap;
36279445ad4561895db41309681de8dd1544d0ae22Tor Norbyeimport java.util.Map;
37279445ad4561895db41309681de8dd1544d0ae22Tor Norbye
38279445ad4561895db41309681de8dd1544d0ae22Tor Norbyeimport javax.imageio.ImageIO;
39ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye
40ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye/**
41ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye * Value object for the AssetStudio wizard. These values are both set by the
42ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye * wizard as well as read by the wizard initially, so passing in a configured
43ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye * {@link CreateAssetSetWizardState} to the icon generator is possible.
44ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye */
45279445ad4561895db41309681de8dd1544d0ae22Tor Norbyepublic class CreateAssetSetWizardState implements GraphicGeneratorContext {
46ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye    /**
47ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye     * The type of asset being created. This field is static such that when you
48ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye     * bring up the wizard repeatedly (for example to create multiple
49ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye     * notification icons) you don't have to keep selecting the same type over
50ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye     * and over.
51ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye     */
52ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye    public static AssetType sLastType = AssetType.LAUNCHER;
53ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye
54ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye    /** The type of asset to be created */
55ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye    public AssetType type = sLastType;
56ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye
57ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye    /** The base name to use for the created icons */
58ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye    public String outputName;
59ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye
60ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye    /** The minimum SDK being targeted */
61ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye    public int minSdk = -1;
62ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye
63ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye    /** The project to create the icons into */
64ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye    public IProject project;
65ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye
66ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye    /** Whether empty space around the source image should be trimmed */
675890cb76e4ee5407f7a67f8de79d0f3a7ce1e1abTor Norbye    public boolean trim = true;
68ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye
69ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye    /** The type of source the icon is being created from */
70ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye    public SourceType sourceType = SourceType.TEXT;
71ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye
72ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye    /** If {@link #sourceType} is a {@link SourceType#CLIPART}, the name of the clipart image */
73ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye    public String clipartName;
74ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye
75ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye    /** If {@link #sourceType} is a {@link SourceType#IMAGE}, the path to the input image */
76ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye    public File imagePath;
77ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye
78ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye    /** If {@link #sourceType} is a {@link SourceType#TEXT}, the text to render */
79ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye    public String text = "aA";
80ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye
81ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye    /** The amount of padding to add around the source image */
82ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye    public int padding = 15;
83ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye
84ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye    /** The background shape */
85ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye    public Shape shape = Shape.SQUARE;
86ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye
87802de810020fba3f86282cd1d66597a2a41698e3Tor Norbye    /** Whether the image should be cropped */
88802de810020fba3f86282cd1d66597a2a41698e3Tor Norbye    public boolean crop;
89802de810020fba3f86282cd1d66597a2a41698e3Tor Norbye
90279445ad4561895db41309681de8dd1544d0ae22Tor Norbye    /** Whether to use Holo Dark for action bar icons */
91279445ad4561895db41309681de8dd1544d0ae22Tor Norbye    public boolean holoDark;
92279445ad4561895db41309681de8dd1544d0ae22Tor Norbye
93ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye    /** The background color to use for the shape (unless the shape is {@link Shape#NONE} */
94ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye    public RGB background = new RGB(0xff, 0x00, 0x00);
95ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye
96ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye    /** The background color to use for the text or clipart (unless shape is {@link Shape#NONE} */
97ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye    public RGB foreground = new RGB(0x00, 0x00, 0x00);
98ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye
99494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye    /** If {@link #sourceType} is a {@link SourceType#TEXT}, the font of the text to render */
100494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye    private Font mTextFont;
101494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye
102279445ad4561895db41309681de8dd1544d0ae22Tor Norbye    private Map<String, BufferedImage> mImageCache = null;
103279445ad4561895db41309681de8dd1544d0ae22Tor Norbye
104494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye    /**
105494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye     * Gets the text font to be used for text rendering if the
106494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye     * {@link #sourceType} is a {@link SourceType#TEXT}
107494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye     *
108494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye     * @return the text font
109494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye     */
110494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye    @NonNull
111494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye    public Font getTextFont() {
112494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye        if (mTextFont == null) {
113494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye            GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
114494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye            String[] fontNames = env.getAvailableFontFamilyNames();
115494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye            for (String familyName : fontNames) {
116494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye                if (familyName.equals("Helvetica")) {
117494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye                    mTextFont = new java.awt.Font(familyName, java.awt.Font.BOLD, 512);
118494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye                    break;
119494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye                }
120494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye            }
121494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye            if (mTextFont == null) {
122494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye                for (String familyName : fontNames) {
123494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye                    if (familyName.equals("Arial")) {
124494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye                        mTextFont = new java.awt.Font(familyName, java.awt.Font.BOLD, 512);
125494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye                        break;
126494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye                    }
127494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye                }
128494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye
129494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye                if (mTextFont == null) {
130494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye                    mTextFont = new java.awt.Font("SansSerif", java.awt.Font.BOLD, 512);
131494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye                }
132494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye            }
133494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye        }
134494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye
135494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye        return mTextFont;
136494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye    }
137494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye
138494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye    /**
139494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye     * Sets the text font to be used for text rendering if the
140494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye     * {@link #sourceType} is a {@link SourceType#TEXT}
141494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye     *
142494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye     * @param textFont the font to use
143494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye     */
144494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye    public void setTextFont(@NonNull Font textFont) {
145494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye        mTextFont = textFont;
146494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye    }
147494549a4e759a19f4a5e468d91527ccb0fb71f09Tor Norbye
148ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye    /** Types of sources that the asset studio can use to generate icons from */
149ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye    public enum SourceType {
150ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye        /** Generate the icon using the image pointed to by {@link #imagePath} */
151ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye        IMAGE,
152ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye
153ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye        /** Generate the icon using the clipart named by {@link #clipartName} */
154ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye        CLIPART,
155ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye
156ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye        /** Generate the icon using the text in {@link #text} */
157ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye        TEXT
158ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye    }
159279445ad4561895db41309681de8dd1544d0ae22Tor Norbye
160279445ad4561895db41309681de8dd1544d0ae22Tor Norbye    // ---- Implements GraphicGeneratorContext ----
161279445ad4561895db41309681de8dd1544d0ae22Tor Norbye
162279445ad4561895db41309681de8dd1544d0ae22Tor Norbye    @Override
163279445ad4561895db41309681de8dd1544d0ae22Tor Norbye    public BufferedImage loadImageResource(String relativeName) {
164279445ad4561895db41309681de8dd1544d0ae22Tor Norbye        try {
165279445ad4561895db41309681de8dd1544d0ae22Tor Norbye            return getCachedImage(relativeName, true);
166279445ad4561895db41309681de8dd1544d0ae22Tor Norbye        } catch (IOException e) {
167279445ad4561895db41309681de8dd1544d0ae22Tor Norbye            AdtPlugin.log(e, null);
168279445ad4561895db41309681de8dd1544d0ae22Tor Norbye            return null;
169279445ad4561895db41309681de8dd1544d0ae22Tor Norbye        }
170279445ad4561895db41309681de8dd1544d0ae22Tor Norbye    }
171279445ad4561895db41309681de8dd1544d0ae22Tor Norbye
172279445ad4561895db41309681de8dd1544d0ae22Tor Norbye    BufferedImage getCachedImage(String path, boolean isPluginRelative)
173279445ad4561895db41309681de8dd1544d0ae22Tor Norbye            throws IOException {
174279445ad4561895db41309681de8dd1544d0ae22Tor Norbye        BufferedImage image = mImageCache != null ? mImageCache.get(path) : null;
175279445ad4561895db41309681de8dd1544d0ae22Tor Norbye        if (image == null) {
176279445ad4561895db41309681de8dd1544d0ae22Tor Norbye            image = getImage(path, isPluginRelative);
177279445ad4561895db41309681de8dd1544d0ae22Tor Norbye            if (mImageCache == null) {
178279445ad4561895db41309681de8dd1544d0ae22Tor Norbye                mImageCache = new HashMap<String, BufferedImage>();
179279445ad4561895db41309681de8dd1544d0ae22Tor Norbye            }
180279445ad4561895db41309681de8dd1544d0ae22Tor Norbye            mImageCache.put(path, image);
181279445ad4561895db41309681de8dd1544d0ae22Tor Norbye        }
182279445ad4561895db41309681de8dd1544d0ae22Tor Norbye
183279445ad4561895db41309681de8dd1544d0ae22Tor Norbye        return image;
184279445ad4561895db41309681de8dd1544d0ae22Tor Norbye    }
185279445ad4561895db41309681de8dd1544d0ae22Tor Norbye
186279445ad4561895db41309681de8dd1544d0ae22Tor Norbye    @NonNull
187279445ad4561895db41309681de8dd1544d0ae22Tor Norbye    static BufferedImage getImage(@NonNull String path, boolean isPluginRelative)
188279445ad4561895db41309681de8dd1544d0ae22Tor Norbye            throws IOException {
189279445ad4561895db41309681de8dd1544d0ae22Tor Norbye        BufferedImage image = null;
190279445ad4561895db41309681de8dd1544d0ae22Tor Norbye        if (isPluginRelative) {
191279445ad4561895db41309681de8dd1544d0ae22Tor Norbye            image = GraphicGenerator.getStencilImage(path);
192279445ad4561895db41309681de8dd1544d0ae22Tor Norbye        } else {
193279445ad4561895db41309681de8dd1544d0ae22Tor Norbye            if (path.equals(DEFAULT_LAUNCHER_ICON)) {
194279445ad4561895db41309681de8dd1544d0ae22Tor Norbye                File file = TemplateManager.getTemplateLocation(
195279445ad4561895db41309681de8dd1544d0ae22Tor Norbye                  "projects/NewAndroidApplication/root/res/drawable-xhdpi/ic_launcher.png"); //$NON-NLS-1$
196279445ad4561895db41309681de8dd1544d0ae22Tor Norbye                if (file != null) {
197279445ad4561895db41309681de8dd1544d0ae22Tor Norbye                    path = file.getPath();
198279445ad4561895db41309681de8dd1544d0ae22Tor Norbye                } else {
199279445ad4561895db41309681de8dd1544d0ae22Tor Norbye                    image = GraphicGenerator.getStencilImage("user.png");
200279445ad4561895db41309681de8dd1544d0ae22Tor Norbye                }
201279445ad4561895db41309681de8dd1544d0ae22Tor Norbye            }
202279445ad4561895db41309681de8dd1544d0ae22Tor Norbye
203279445ad4561895db41309681de8dd1544d0ae22Tor Norbye            File file = new File(path);
204279445ad4561895db41309681de8dd1544d0ae22Tor Norbye
205279445ad4561895db41309681de8dd1544d0ae22Tor Norbye            // Requires Batik
206279445ad4561895db41309681de8dd1544d0ae22Tor Norbye            //if (file.getName().endsWith(DOT_SVG)) {
207279445ad4561895db41309681de8dd1544d0ae22Tor Norbye            //    image = loadSvgImage(file);
208279445ad4561895db41309681de8dd1544d0ae22Tor Norbye            //}
209279445ad4561895db41309681de8dd1544d0ae22Tor Norbye
210279445ad4561895db41309681de8dd1544d0ae22Tor Norbye            if (image == null) {
211279445ad4561895db41309681de8dd1544d0ae22Tor Norbye                image = ImageIO.read(file);
212279445ad4561895db41309681de8dd1544d0ae22Tor Norbye            }
213279445ad4561895db41309681de8dd1544d0ae22Tor Norbye        }
214279445ad4561895db41309681de8dd1544d0ae22Tor Norbye
215279445ad4561895db41309681de8dd1544d0ae22Tor Norbye        if (image == null) {
216279445ad4561895db41309681de8dd1544d0ae22Tor Norbye            image = new BufferedImage(1,1, BufferedImage.TYPE_INT_ARGB);
217279445ad4561895db41309681de8dd1544d0ae22Tor Norbye        }
218279445ad4561895db41309681de8dd1544d0ae22Tor Norbye
219279445ad4561895db41309681de8dd1544d0ae22Tor Norbye        return image;
220279445ad4561895db41309681de8dd1544d0ae22Tor Norbye    }
221279445ad4561895db41309681de8dd1544d0ae22Tor Norbye
222279445ad4561895db41309681de8dd1544d0ae22Tor Norbye    // This requires Batik for SVG rendering
223279445ad4561895db41309681de8dd1544d0ae22Tor Norbye    //
224279445ad4561895db41309681de8dd1544d0ae22Tor Norbye    //public static BufferedImage loadSvgImage(File file) {
225279445ad4561895db41309681de8dd1544d0ae22Tor Norbye    //    BufferedImageTranscoder transcoder = new BufferedImageTranscoder();
226279445ad4561895db41309681de8dd1544d0ae22Tor Norbye    //
227279445ad4561895db41309681de8dd1544d0ae22Tor Norbye    //    String svgURI = file.toURI().toString();
228279445ad4561895db41309681de8dd1544d0ae22Tor Norbye    //    TranscoderInput input = new TranscoderInput(svgURI);
229279445ad4561895db41309681de8dd1544d0ae22Tor Norbye    //
230279445ad4561895db41309681de8dd1544d0ae22Tor Norbye    //    try {
231279445ad4561895db41309681de8dd1544d0ae22Tor Norbye    //        transcoder.transcode(input, null);
232279445ad4561895db41309681de8dd1544d0ae22Tor Norbye    //    } catch (TranscoderException e) {
233279445ad4561895db41309681de8dd1544d0ae22Tor Norbye    //        e.printStackTrace();
234279445ad4561895db41309681de8dd1544d0ae22Tor Norbye    //        return null;
235279445ad4561895db41309681de8dd1544d0ae22Tor Norbye    //    }
236279445ad4561895db41309681de8dd1544d0ae22Tor Norbye    //
237279445ad4561895db41309681de8dd1544d0ae22Tor Norbye    //    return transcoder.decodedImage;
238279445ad4561895db41309681de8dd1544d0ae22Tor Norbye    //}
239279445ad4561895db41309681de8dd1544d0ae22Tor Norbye    //
240279445ad4561895db41309681de8dd1544d0ae22Tor Norbye    ///**
241279445ad4561895db41309681de8dd1544d0ae22Tor Norbye    // * A dummy implementation of an {@link ImageTranscoder} that simply stores the {@link
242279445ad4561895db41309681de8dd1544d0ae22Tor Norbye    // * BufferedImage} generated by the SVG library.
243279445ad4561895db41309681de8dd1544d0ae22Tor Norbye    // */
244279445ad4561895db41309681de8dd1544d0ae22Tor Norbye    //private static class BufferedImageTranscoder extends ImageTranscoder {
245279445ad4561895db41309681de8dd1544d0ae22Tor Norbye    //    public BufferedImage decodedImage;
246279445ad4561895db41309681de8dd1544d0ae22Tor Norbye    //
247279445ad4561895db41309681de8dd1544d0ae22Tor Norbye    //    @Override
248279445ad4561895db41309681de8dd1544d0ae22Tor Norbye    //    public BufferedImage createImage(int w, int h) {
249279445ad4561895db41309681de8dd1544d0ae22Tor Norbye    //        return new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
250279445ad4561895db41309681de8dd1544d0ae22Tor Norbye    //    }
251279445ad4561895db41309681de8dd1544d0ae22Tor Norbye    //
252279445ad4561895db41309681de8dd1544d0ae22Tor Norbye    //    @Override
253279445ad4561895db41309681de8dd1544d0ae22Tor Norbye    //    public void writeImage(BufferedImage image, TranscoderOutput output)
254279445ad4561895db41309681de8dd1544d0ae22Tor Norbye    //            throws TranscoderException {
255279445ad4561895db41309681de8dd1544d0ae22Tor Norbye    //        this.decodedImage = image;
256279445ad4561895db41309681de8dd1544d0ae22Tor Norbye    //    }
257279445ad4561895db41309681de8dd1544d0ae22Tor Norbye    //}
258ccd4c42d08b1f6b3fe88c68a6e6c1fc74b058de3Tor Norbye}
259