aboutsummaryrefslogtreecommitdiff
path: root/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/ui/ErrorImageComposite.java
blob: 7085e5d50ac3f03ab26b700a090726b80d0eb110 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
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;
    }
}