blob: fc439d9f0adb8f505bafed89c1434c50a202bf35 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2007 Boeing.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Boeing - initial API and implementation
*******************************************************************************/
package org.eclipse.osee.framework.ui.plugin.util;
import java.util.ArrayList;
import java.util.Collection;
import org.eclipse.jface.resource.CompositeImageDescriptor;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
public class OverlayImage extends CompositeImageDescriptor {
private final Image baseImage;
private ImageDescriptor overlayImageDescriptor;
private int xValue = 0;
private int yValue = 0;
private Collection<ImageInfo> imageInfo;
public static enum Location {
TOP_LEFT, TOP_RIGHT, BOT_LEFT, BOT_RIGHT
};
public ImageDescriptor getImageDescriptor() {
return overlayImageDescriptor;
}
public static class ImageInfo {
public ImageDescriptor descriptor;
public Location location;
public ImageInfo(ImageDescriptor descriptor, Location location) {
this.descriptor = descriptor;
this.location = location;
}
}
public OverlayImage(Image baseImage, Collection<ImageInfo> imageInfo) {
this.baseImage = baseImage;
this.imageInfo = imageInfo;
}
public OverlayImage(Image baseImage, ImageDescriptor overlayImageDescriptor, Location location) {
this.baseImage = baseImage;
this.overlayImageDescriptor = overlayImageDescriptor;
this.imageInfo = new ArrayList<ImageInfo>(2);
imageInfo.add(new ImageInfo(overlayImageDescriptor, location));
}
public OverlayImage(Image baseImage, ImageDescriptor overlayImageDescriptor) {
this(baseImage, overlayImageDescriptor, Location.TOP_LEFT);
}
public OverlayImage(Image baseImage, ImageDescriptor overlayImageDescriptor, int xValue, int yValue) {
if (baseImage == null) throw new IllegalArgumentException("baseImage can not be null");
if (overlayImageDescriptor == null) throw new IllegalArgumentException("overlayImageDescriptor can not be null");
this.baseImage = baseImage;
this.overlayImageDescriptor = overlayImageDescriptor;
this.xValue = xValue;
this.yValue = yValue;
}
/**
* Set x,y pixel to draw the overlay image eg: 8,8 for bottom right of a 16x16 image 0,0 for top left
*
* @param xValue
* @param yValue
*/
public void setXY(int xValue, int yValue) {
this.xValue = xValue;
this.yValue = yValue;
}
@Override
protected void drawCompositeImage(int width, int height) {
// To draw a composite image, the base image should be
// drawn first (first layer) and then the overlay image
// (second layer)
// Draw the base image using the base image's image data
drawImage(baseImage.getImageData(), 0, 0);
if (imageInfo == null) {
// Overlaying the icon in the top left corner i.e. x and y
// coordinates are both zero
drawImage(overlayImageDescriptor.getImageData(), xValue, yValue);
} else {
for (ImageInfo info : imageInfo) {
if (info.location == Location.TOP_LEFT)
drawImage(info.descriptor.getImageData(), 0, 0);
else if (info.location == Location.BOT_LEFT)
drawImage(info.descriptor.getImageData(), 0, 8);
else if (info.location == Location.TOP_RIGHT)
drawImage(info.descriptor.getImageData(), 8, 0);
else if (info.location == Location.BOT_RIGHT) drawImage(info.descriptor.getImageData(), 8, 8);
}
}
}
@Override
protected Point getSize() {
// System.err.println("Width = " + baseImage.getBounds().width);
// System.err.println("Height = " + baseImage.getBounds().height);
int baseWidth = baseImage.getBounds().width;
int baseHeight = baseImage.getBounds().height;
Image overImg = overlayImageDescriptor.createImage();
int overWidth = overImg.getBounds().width;
int overHeight = overImg.getBounds().height;
overlayImageDescriptor.destroyResource(overImg);
return new Point(baseWidth > overWidth ? baseWidth : overWidth, baseHeight > overHeight ? baseHeight : overHeight);
}
}