/******************************************************************************* * Copyright (c) 2011 Red Hat, Inc. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is 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 * * Contributor: * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.hibernate.eclipse.console.workbench; import java.util.Iterator; import java.util.Map; import org.eclipse.jface.resource.CompositeImageDescriptor; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.ImageData; import org.eclipse.swt.graphics.Point; import org.hibernate.eclipse.console.utils.EclipseImages; /** * based on the class from DTP plugins * * @author vy (vyemialyanchyk@gmail.com) */ public class OverlayImageIcon extends CompositeImageDescriptor { 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; /** * Base image of the object */ private Image baseImage; /** * Size of the base image */ private Point sizeOfImage; /** * Map of ovr image to place */ private Map<String, Integer> imageMap; /** * Constructor for overlayImageIcon. */ public OverlayImageIcon(Image baseImage, Map<String, Integer> imageMap) { // Base image of the object this.baseImage = baseImage; this.imageMap = imageMap; this.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(this.baseImage.getImageData(), 0, 0); Iterator<Map.Entry<String, Integer>> it = imageMap.entrySet().iterator(); for (; it.hasNext(); ) { Map.Entry<String, Integer> entry = it.next(); ImageData imageData = EclipseImages.getImageDescriptor(entry.getKey()).getImageData(); switch (entry.getValue()) { // Draw on the top left corner case TOP_LEFT: drawImage(imageData, 0, 0); break; // Draw on top right corner case TOP_RIGHT: drawImage(imageData, this.sizeOfImage.x - imageData.width, 0); break; // Draw on bottom left case BOTTOM_LEFT: drawImage(imageData, 0, this.sizeOfImage.y - imageData.height); break; // Draw on bottom right corner case BOTTOM_RIGHT: drawImage(imageData, this.sizeOfImage.x - imageData.width, this.sizeOfImage.y - imageData.height); break; } } } /** * @see org.eclipse.jface.resource.CompositeImageDescriptor#getSize() get * the size of the object */ @Override protected Point getSize() { return this.sizeOfImage; } /** * Get the image formed by overlaying different images on the base image * * @return composite image */ public Image getImage() { return createImage(); } }