blob: 7085e5d50ac3f03ab26b700a090726b80d0eb110 [file] [log] [blame]
package com.android.ide.eclipse.adt.internal.editors.ui;
import static org.eclipse.ui.ISharedImages.IMG_DEC_FIELD_ERROR;
import static org.eclipse.ui.ISharedImages.IMG_DEC_FIELD_WARNING;
import static org.eclipse.ui.ISharedImages.IMG_OBJS_ERROR_TSK;
import static org.eclipse.ui.ISharedImages.IMG_OBJS_WARN_TSK;
import org.eclipse.jface.resource.CompositeImageDescriptor;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.DecorationOverlayIcon;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.graphics.Point;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.PlatformUI;
/**
* ImageDescriptor that adds a error marker.
* Based on {@link DecorationOverlayIcon} only available in Eclipse 3.3
*/
public class ErrorImageComposite extends CompositeImageDescriptor {
private Image mBaseImage;
private ImageDescriptor mErrorImageDescriptor;
private Point mSize;
/**
* Creates a new {@link ErrorImageComposite}
*
* @param baseImage the base image to overlay an icon on top of
*/
public ErrorImageComposite(Image baseImage) {
this(baseImage, false);
}
/**
* Creates a new {@link ErrorImageComposite}
*
* @param baseImage the base image to overlay an icon on top of
* @param warning if true, add a warning icon, otherwise an error icon
*/
public ErrorImageComposite(Image baseImage, boolean warning) {
mBaseImage = baseImage;
ISharedImages sharedImages = PlatformUI.getWorkbench().getSharedImages();
mErrorImageDescriptor = sharedImages.getImageDescriptor(
warning ? IMG_DEC_FIELD_WARNING : IMG_DEC_FIELD_ERROR);
if (mErrorImageDescriptor == null) {
mErrorImageDescriptor = sharedImages.getImageDescriptor(
warning ? IMG_OBJS_WARN_TSK : IMG_OBJS_ERROR_TSK);
}
mSize = new Point(baseImage.getBounds().width, baseImage.getBounds().height);
}
@Override
protected void drawCompositeImage(int width, int height) {
ImageData baseData = mBaseImage.getImageData();
drawImage(baseData, 0, 0);
ImageData overlayData = mErrorImageDescriptor.getImageData();
if (overlayData.width == baseData.width && overlayData.height == baseData.height) {
overlayData = overlayData.scaledTo(14, 14);
drawImage(overlayData, -3, mSize.y - overlayData.height + 3);
} else {
drawImage(overlayData, 0, mSize.y - overlayData.height);
}
}
@Override
protected Point getSize() {
return mSize;
}
}