diff options
Diffstat (limited to 'eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/ui/ErrorImageComposite.java')
-rw-r--r-- | eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/ui/ErrorImageComposite.java | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/ui/ErrorImageComposite.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/ui/ErrorImageComposite.java new file mode 100644 index 000000000..7085e5d50 --- /dev/null +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/ui/ErrorImageComposite.java @@ -0,0 +1,72 @@ +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; + } +} |