// package com.ibm.DecoratorDemo.ui.Decorators; package org.archstudio.swtutils; import org.eclipse.jface.resource.CompositeImageDescriptor; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.ImageData; import org.eclipse.swt.graphics.Point; /** * @author Eric Dashofy, based on code from balajik@ibm * * This class is used for overlaying image icons */ public class OverlayImageIcon extends CompositeImageDescriptor { /** * Base image of the object */ private Image baseImage_; /** * Size of the base image */ private Point sizeOfImage_; /** * Vector of image keys */ private int[] imageKey_; /** * Image instance */ private Image[] overlayImage_; public static final int TOP_LEFT = 0; public static final int TOP_RIGHT = 1; public static final int BOTTOM_LEFT = 2; public static final int BOTTOM_RIGHT = 3; /** * Constructor for overlayImageIcon. */ public OverlayImageIcon(Image baseImage, Image[] overlayImages, int[] imageKey) { // Base image of the object baseImage_ = baseImage; // Demo Image Object overlayImage_ = overlayImages; imageKey_ = imageKey; sizeOfImage_ = new Point(baseImage.getBounds().width, baseImage.getBounds().height); } /** * @see org.eclipse.jface.resource.CompositeImageDescriptor#drawCompositeImage(int, int) DrawCompositeImage is * called to draw the composite image. * */ @Override protected void drawCompositeImage(int arg0, int arg1) { // Draw the base image drawImage(baseImage_.getImageData(), 0, 0); for (int i = 0; i < overlayImage_.length; i++) { ImageData imageData = overlayImage_[i].getImageData(); switch (imageKey_[i]) { // Draw on the top left corner case TOP_LEFT: drawImage(imageData, 0, 0); break; // Draw on top right corner case TOP_RIGHT: drawImage(imageData, sizeOfImage_.x - imageData.width, 0); break; // Draw on bottom left case BOTTOM_LEFT: drawImage(imageData, 0, sizeOfImage_.y - imageData.height); break; // Draw on bottom right corner case BOTTOM_RIGHT: drawImage(imageData, sizeOfImage_.x - imageData.width, sizeOfImage_.y - imageData.height); break; } } } /** * @see org.eclipse.jface.resource.CompositeImageDescriptor#getSize() get the size of the object */ @Override protected Point getSize() { return sizeOfImage_; } /** * Get the image formed by overlaying different images on the base image * * @return composite image */ public Image getImage() { return createImage(); } }