blob: d34df4902282d776402db2484341e3b0b94c7b92 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2003 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jface.resource;
import java.net.URL;
import org.eclipse.swt.SWTException;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.widgets.Display;
/**
* An image descriptor is an object that knows how to create
* an SWT image. It does not hold onto images or cache them,
* but rather just creates them on demand. An image descriptor
* is intended to be a lightweight representation of an image
* that can be manipulated even when no SWT display exists.
* <p>
* This package defines a concrete image descriptor implementation
* which reads an image from a file (<code>FileImageDescriptor</code>).
* It also provides abstract framework classes (this one and
* <code>CompositeImageDescriptor</code>) which may be subclassed to define
* news kinds of image descriptors.
* </p>
* <p>
* Using this abstract class involves defining a concrete subclass
* and providing an implementation for the <code>getImageData</code>
* method.
* </p>
*
* @see org.eclipse.swt.graphics.Image
*/
public abstract class ImageDescriptor {
/**
* A small red square used to warn that an image cannot be created.
* <p>
*/
protected static final ImageData DEFAULT_IMAGE_DATA= new ImageData(6, 6, 1, new PaletteData(new RGB[] { new RGB(255, 0, 0) }));
/**
* Constructs an image descriptor.
*/
protected ImageDescriptor() {
}
/**
* Creates and returns a new image descriptor from a file.
* Convenience method for
* <code>new FileImageDescriptor(location,filename)</code>.
*
* @param location the class whose resource directory contain the file
* @param filename the file name
* @return a new image descriptor
*/
public static ImageDescriptor createFromFile(Class location, String filename) {
return new FileImageDescriptor(location, filename);
}
/**
* Creates and returns a new image descriptor from a URL.
*
* @param url The URL of the image file.
* @return a new image descriptor
*/
public static ImageDescriptor createFromURL(URL url) {
if (url == null) {
return getMissingImageDescriptor();
}
return new URLImageDescriptor(url);
}
/**
* Creates and returns a new SWT image for this image descriptor.
* Note that each call returns a new SWT image object.
*
* @return a new image
*/
public Image createImage() {
return createImage(true);
}
/**
* Creates and returns a new SWT image for this image descriptor.
* Note that if returnMissingImageOnError is true a default image
* is returned
*
* @param returnMissingImageOnError The flag that determines if a default image is returned on error
* @return a new image or null if the image could not be created
*/
public Image createImage(boolean returnMissingImageOnError) {
return createImage(returnMissingImageOnError, Display.getCurrent());
}
/**
* Creates and returns a new SWT image for this image descriptor.
*
* @param device the device on which to create the image
* @return a new image or null if the image could not be created
* @since 2.0
*/
public Image createImage(Device device) {
return createImage(true, device);
}
/**
* Creates and returns a new SWT image for this image descriptor.
* Note that if returnMissingImageOnError is true a default image
* is returned
*
* @param returnMissingImageOnError The flag that determines if a default image is returned on error
* @param device the device on which to create the image
* @return a new image or null if the image could not be created
* @since 2.0
*/
public Image createImage(boolean returnMissingImageOnError, Device device) {
ImageData data = getImageData();
if (data == null) {
if (!returnMissingImageOnError) {
return null;
} else {
data = DEFAULT_IMAGE_DATA;
}
}
/*
* Try to create the supplied image. If there is an SWT Exception try and create
* the default image if that was requested. Return null if this fails.
*/
try {
if (data.transparentPixel >= 0) {
ImageData maskData = data.getTransparencyMask();
return new Image(device, data, maskData);
}
return new Image(device, data);
} catch (SWTException exception) {
if (returnMissingImageOnError) {
try {
return new Image(device, DEFAULT_IMAGE_DATA);
} catch (SWTException nextException) {
return null;
}
} else
return null;
}
}
/**
* Creates and returns a new SWT <code>ImageData</code> object
* for this image descriptor.
* Note that each call returns a new SWT image data object.
* <p>
* This framework method is declared public so that it is
* possible to request an image descriptor's image data without
* creating an SWT image object.
* </p>
*
* @return a new image data
*/
public abstract ImageData getImageData();
/**
* Returns the shared image descriptor for a missing image.
*
* @return the missing image descriptor
*/
public static ImageDescriptor getMissingImageDescriptor() {
return MissingImageDescriptor.getInstance();
}
}