blob: 1bbe8d75bf99202ecf52fd0b2b3ccd0dfae8658f [file] [log] [blame]
/******************************************************************************
* Copyright (c) 2004 IBM Corporation and others.
* 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:
* IBM Corporation - initial API and implementation
****************************************************************************/
package org.eclipse.gmf.runtime.common.ui.util;
import org.eclipse.jface.resource.CompositeImageDescriptor;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.graphics.Point;
/**
* An image descriptor that is cached and shifted from the left or from the
* top or both. The shifted area contains the original image and the area
* on the left or top contains a background color. Both the original image
* and background color are specified in the constructor.
*
* @author wdiu, Wayne Diu
*/
public class ShiftedImageDescriptor
extends CompositeImageDescriptor {
/**
* The cached size of the shifted image
*/
private Point size = null;
/**
* How much to shift from the left
*/
private short shiftX = 0;
/**
* How much to shift from the top
*/
private short shiftY = 0;
/**
* Original image data for the image that will be shifted
*/
private ImageData imageData = null;
/**
* Make a new image descriptor of an image that is shifted.
*
* @param shiftX
* how much to shift from the left
* @param shiftY
* how much to shift from the top
* @param imageDescriptor
* original image to shift by shiftX and shiftY
*/
public ShiftedImageDescriptor(short shiftX, short shiftY,
ImageDescriptor imageDescriptor) {
assert (shiftX >= 0);
assert (shiftY >= 0);
assert (imageDescriptor.getImageData().width >= 0);
assert (imageDescriptor.getImageData().height >= 0);
assert null != imageDescriptor;
this.shiftX = shiftX;
this.shiftY = shiftY;
this.imageData = imageDescriptor.getImageData();
}
/**
* Draw the image in the shifted position
*
* @param width
* int ignored
* @param height
* int ignored
*
* @see org.eclipse.jface.resource.CompositeImageDescriptor#drawCompositeImage(int,
* int)
*/
protected void drawCompositeImage(int width, int height) {
drawImage(imageData, shiftX, shiftY);
}
/**
* Return the size of the shifted image and cache it
*
* @return Point with the size of the shifted image
*
* @see org.eclipse.jface.resource.CompositeImageDescriptor#getSize()
*/
protected Point getSize() {
if (size == null) {
size = new Point(imageData.width + shiftX, imageData.height
+ shiftY);
}
return size;
}
}