annotate dwtx/jface/resource/ImageDescriptor.d @ 4:c87617952847

some JFace modules
author Frank Benoit <benoit@tionex.de>
date Fri, 28 Mar 2008 17:08:33 +0100
parents
children c884a1ab6db3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1 /*******************************************************************************
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2 * Copyright (c) 2000, 2006 IBM Corporation and others.
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
3 * All rights reserved. This program and the accompanying materials
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
4 * are made available under the terms of the Eclipse Public License v1.0
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
5 * which accompanies this distribution, and is available at
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
6 * http://www.eclipse.org/legal/epl-v10.html
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
7 *
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
8 * Contributors:
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
9 * IBM Corporation - initial API and implementation
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
10 * Port to the D programming language:
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
11 * Frank Benoit <benoit@tionex.de>
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
12 *******************************************************************************/
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
13 module dwtx.jface.resource.ImageDescriptor;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
14
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
15 import dwtx.jface.resource.DeviceResourceDescriptor;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
16 import dwtx.jface.resource.FileImageDescriptor;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
17 import dwtx.jface.resource.URLImageDescriptor;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
18 import dwtx.jface.resource.ImageDataImageDescriptor;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
19 import dwtx.jface.resource.DerivedImageDescriptor;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
20 import dwtx.jface.resource.DeviceResourceException;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
21 import dwtx.jface.resource.MissingImageDescriptor;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
22
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
23 import tango.net.Uri;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
24
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
25 import dwt.DWTException;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
26 import dwt.graphics.Device;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
27 import dwt.graphics.Image;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
28 import dwt.graphics.ImageData;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
29 import dwt.graphics.PaletteData;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
30 import dwt.graphics.RGB;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
31 import dwt.widgets.Display;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
32
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
33 import dwt.dwthelper.utils;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
34
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
35 /**
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
36 * An image descriptor is an object that knows how to create
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
37 * an DWT image. It does not hold onto images or cache them,
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
38 * but rather just creates them on demand. An image descriptor
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
39 * is intended to be a lightweight representation of an image
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
40 * that can be manipulated even when no DWT display exists.
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
41 * <p>
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
42 * This package defines a concrete image descriptor implementation
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
43 * which reads an image from a file (<code>FileImageDescriptor</code>).
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
44 * It also provides abstract framework classes (this one and
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
45 * <code>CompositeImageDescriptor</code>) which may be subclassed to define
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
46 * news kinds of image descriptors.
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
47 * </p>
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
48 * <p>
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
49 * Using this abstract class involves defining a concrete subclass
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
50 * and providing an implementation for the <code>getImageData</code>
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
51 * method.
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
52 * </p>
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
53 * <p>
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
54 * There are two ways to get an Image from an ImageDescriptor. The method
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
55 * createImage will always return a new Image which must be disposed by
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
56 * the caller. Alternatively, createResource() returns a shared
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
57 * Image. When the caller is done with an image obtained from createResource,
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
58 * they must call destroyResource() rather than disposing the Image directly.
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
59 * The result of createResource() can be safely cast to an Image.
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
60 * </p>
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
61 *
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
62 * @see dwt.graphics.Image
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
63 */
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
64 public abstract class ImageDescriptor : DeviceResourceDescriptor {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
65
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
66 /**
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
67 * A small red square used to warn that an image cannot be created.
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
68 * <p>
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
69 */
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
70 protected static const ImageData DEFAULT_IMAGE_DATA;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
71
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
72 static this(){
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
73 DEFAULT_IMAGE_DATA = new ImageData(6, 6, 1, new PaletteData( [ new RGB(255, 0, 0) ] ));
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
74 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
75
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
76 /**
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
77 * Constructs an image descriptor.
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
78 */
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
79 protected this() {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
80 // do nothing
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
81 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
82
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
83 /**
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
84 * Creates and returns a new image descriptor from a file.
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
85 * Convenience method for
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
86 * <code>new FileImageDescriptor(location,filename)</code>.
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
87 *
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
88 * @param location the class whose resource directory contain the file
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
89 * @param filename the file name
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
90 * @return a new image descriptor
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
91 */
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
92 public static ImageDescriptor createFromFile(ClassInfo location, String filename) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
93 return new FileImageDescriptor(location, filename);
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
94 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
95
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
96 /**
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
97 * Creates and returns a new image descriptor given ImageData
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
98 * describing the image.
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
99 *
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
100 * @since 3.1
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
101 *
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
102 * @param data contents of the image
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
103 * @return newly created image descriptor
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
104 */
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
105 public static ImageDescriptor createFromImageData(ImageData data) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
106 return new ImageDataImageDescriptor(data);
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
107 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
108
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
109 /**
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
110 * Creates and returns a new image descriptor for the given image. Note
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
111 * that disposing the original Image will cause the descriptor to become invalid.
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
112 *
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
113 * @since 3.1
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
114 *
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
115 * @param img image to create
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
116 * @return a newly created image descriptor
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
117 */
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
118 public static ImageDescriptor createFromImage(Image img) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
119 return new ImageDataImageDescriptor(img);
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
120 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
121
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
122 /**
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
123 * Creates an ImageDescriptor based on the given original descriptor, but with additional
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
124 * DWT flags.
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
125 *
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
126 * <p>
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
127 * Note that this sort of ImageDescriptor is slower and consumes more resources than
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
128 * a regular image descriptor. It will also never generate results that look as nice as
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
129 * a hand-drawn image. Clients are encouraged to supply their own disabled/grayed/etc. images
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
130 * rather than using a default image and transforming it.
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
131 * </p>
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
132 *
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
133 * @param originalImage image to transform
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
134 * @param swtFlags any flag that can be passed to the flags argument of Image#Image(Device, Image, int)
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
135 * @return an ImageDescriptor that creates new images by transforming the given image descriptor
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
136 *
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
137 * @see Image#Image(Device, Image, int)
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
138 * @since 3.1
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
139 *
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
140 */
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
141 public static ImageDescriptor createWithFlags(ImageDescriptor originalImage, int swtFlags) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
142 return new DerivedImageDescriptor(originalImage, swtFlags);
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
143 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
144
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
145 /**
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
146 * Creates and returns a new image descriptor for the given image. This
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
147 * method takes the Device that created the Image as an argument, allowing
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
148 * the original Image to be reused if the descriptor is asked for another
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
149 * Image on the same device. Note that disposing the original Image will
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
150 * cause the descriptor to become invalid.
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
151 *
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
152 * @deprecated use {@link ImageDescriptor#createFromImage(Image)}
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
153 * @since 3.1
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
154 *
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
155 * @param img image to create
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
156 * @param theDevice the device that was used to create the Image
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
157 * @return a newly created image descriptor
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
158 */
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
159 public static ImageDescriptor createFromImage(Image img, Device theDevice) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
160 return new ImageDataImageDescriptor(img);
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
161 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
162
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
163 /**
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
164 * Creates and returns a new image descriptor from a URL.
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
165 *
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
166 * @param url The URL of the image file.
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
167 * @return a new image descriptor
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
168 */
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
169 public static ImageDescriptor createFromURL(Uri url) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
170 if (url is null) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
171 return getMissingImageDescriptor();
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
172 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
173 return new URLImageDescriptor(url);
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
174 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
175
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
176 /* (non-Javadoc)
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
177 * @see dwtx.jface.resource.DeviceResourceDescriptor#createResource(dwt.graphics.Device)
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
178 */
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
179 public Object createResource(Device device) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
180 Image result = createImage(false, device);
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
181 if (result is null) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
182 throw new DeviceResourceException(this);
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
183 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
184 return result;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
185 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
186
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
187 /* (non-Javadoc)
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
188 * @see dwtx.jface.resource.DeviceResourceDescriptor#destroyResource(Object)
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
189 */
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
190 public void destroyResource(Object previouslyCreatedObject) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
191 (cast(Image)previouslyCreatedObject).dispose();
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
192 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
193
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
194 /**
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
195 * Creates and returns a new DWT image for this image descriptor. Note that
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
196 * each call returns a new DWT image object. The returned image must be
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
197 * explicitly disposed using the image's dispose call. The image will not be
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
198 * automatically garbage collected. A default image is returned in the event
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
199 * of an error.
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
200 *
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
201 * <p>
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
202 * Note: this method differs from createResource(Device) in that the returned image
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
203 * must be disposed directly, whereas an image obtained from createResource(...)
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
204 * must be disposed by calling destroyResource(...). It is not possible to
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
205 * mix-and-match. If you obtained the Image from this method, you must not dispose
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
206 * it by calling destroyResource. Clients are encouraged to use
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
207 * create/destroyResource and downcast the result to Image rather than using
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
208 * createImage.
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
209 * </p>
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
210 *
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
211 * <p>
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
212 * Note: it is still possible for this method to return <code>null</code>
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
213 * in extreme cases, for example if DWT runs out of image handles.
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
214 * </p>
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
215 *
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
216 * @return a new image or <code>null</code> if the image could not be
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
217 * created
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
218 */
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
219 public Image createImage() {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
220 return createImage(true);
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
221 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
222
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
223 /**
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
224 * Creates and returns a new DWT image for this image descriptor. The
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
225 * returned image must be explicitly disposed using the image's dispose
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
226 * call. The image will not be automatically garbage collected. In the event
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
227 * of an error, a default image is returned if
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
228 * <code>returnMissingImageOnError</code> is true, otherwise
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
229 * <code>null</code> is returned.
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
230 * <p>
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
231 * Note: Even if <code>returnMissingImageOnError</code> is true, it is
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
232 * still possible for this method to return <code>null</code> in extreme
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
233 * cases, for example if DWT runs out of image handles.
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
234 * </p>
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
235 *
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
236 * @param returnMissingImageOnError
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
237 * flag that determines if a default image is returned on error
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
238 * @return a new image or <code>null</code> if the image could not be
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
239 * created
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
240 */
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
241 public Image createImage(bool returnMissingImageOnError) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
242 return createImage(returnMissingImageOnError, Display.getCurrent());
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
243 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
244
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
245 /**
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
246 * Creates and returns a new DWT image for this image descriptor. The
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
247 * returned image must be explicitly disposed using the image's dispose
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
248 * call. The image will not be automatically garbage collected. A default
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
249 * image is returned in the event of an error.
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
250 * <p>
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
251 * Note: it is still possible for this method to return <code>null</code>
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
252 * in extreme cases, for example if DWT runs out of image handles.
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
253 * </p>
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
254 *
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
255 * @param device
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
256 * the device on which to create the image
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
257 * @return a new image or <code>null</code> if the image could not be
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
258 * created
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
259 * @since 2.0
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
260 */
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
261 public Image createImage(Device device) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
262 return createImage(true, device);
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
263 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
264
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
265 /**
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
266 * Creates and returns a new DWT image for this image descriptor. The
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
267 * returned image must be explicitly disposed using the image's dispose
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
268 * call. The image will not be automatically garbage collected. In the even
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
269 * of an error, a default image is returned if
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
270 * <code>returnMissingImageOnError</code> is true, otherwise
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
271 * <code>null</code> is returned.
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
272 * <p>
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
273 * Note: Even if <code>returnMissingImageOnError</code> is true, it is
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
274 * still possible for this method to return <code>null</code> in extreme
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
275 * cases, for example if DWT runs out of image handles.
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
276 * </p>
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
277 *
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
278 * @param returnMissingImageOnError
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
279 * flag that determines if a default image is returned on error
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
280 * @param device
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
281 * the device on which to create the image
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
282 * @return a new image or <code>null</code> if the image could not be
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
283 * created
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
284 * @since 2.0
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
285 */
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
286 public Image createImage(bool returnMissingImageOnError, Device device) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
287
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
288 ImageData data = getImageData();
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
289 if (data is null) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
290 if (!returnMissingImageOnError) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
291 return null;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
292 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
293 data = DEFAULT_IMAGE_DATA;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
294 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
295
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
296 /*
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
297 * Try to create the supplied image. If there is an DWT Exception try and create
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
298 * the default image if that was requested. Return null if this fails.
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
299 */
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
300
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
301 try {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
302 if (data.transparentPixel >= 0) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
303 ImageData maskData = data.getTransparencyMask();
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
304 return new Image(device, data, maskData);
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
305 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
306 return new Image(device, data);
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
307 } catch (DWTException exception) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
308 if (returnMissingImageOnError) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
309 try {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
310 return new Image(device, DEFAULT_IMAGE_DATA);
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
311 } catch (DWTException nextException) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
312 return null;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
313 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
314 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
315 return null;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
316 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
317 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
318
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
319 /**
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
320 * Creates and returns a new DWT <code>ImageData</code> object
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
321 * for this image descriptor.
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
322 * Note that each call returns a new DWT image data object.
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
323 * <p>
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
324 * This framework method is declared public so that it is
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
325 * possible to request an image descriptor's image data without
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
326 * creating an DWT image object.
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
327 * </p>
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
328 * <p>
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
329 * Returns <code>null</code> if the image data could not be created.
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
330 * </p>
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
331 *
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
332 * @return a new image data or <code>null</code>
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
333 */
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
334 public abstract ImageData getImageData();
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
335
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
336 /**
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
337 * Returns the shared image descriptor for a missing image.
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
338 *
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
339 * @return the missing image descriptor
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
340 */
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
341 public static ImageDescriptor getMissingImageDescriptor() {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
342 return MissingImageDescriptor.getInstance();
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
343 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
344 }