/*******************************************************************************
* Copyright (c) 2010, 2012 IBM Corporation, Gerhardt Informatics Kft. 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
* Gerhardt Informatics Kft. - GEFGWT port
*******************************************************************************/
package org.eclipse.draw2d;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.graphics.RGB;
/**
* A figure used to render a partly transparent copy of an original source
* figure.
*
* This class is pretty much based on a sample, posted within the GEF newsgroup
* (http://dev.eclipse.org/newslists/news.eclipse.tools.gef/msg15158.html),
* although we decided to not cache the ghost image itself (but only its image
* data), so the figure does not have to be disposed (and may thus directly
* extend {@link Figure} rather than {@link ImageFigure}).
*
* @author Alexander Nyssen
* @author Philip Ritzkopf
*
* @since 3.6
*/
public class GhostImageFigure extends Figure {
private int alpha = -1;
private ImageData ghostImageData;
/**
* The single constructor.
*
* @param source
* The original figure that will be used to render the ghost
* image.
* @param alpha
* The desired transparency value, to be forwarded to
* {@link Graphics#setAlpha(int)}.
* @param transparency
* The RBG value of the color that is to be regarded as
* transparent. May be <code>null</code>.
*/
public GhostImageFigure(final IFigure source, int alpha, RGB transparency) {
// this.alpha = alpha;
//
// Rectangle sourceFigureRelativePrecisionBounds = new
// PrecisionRectangle(
// source.getBounds().getCopy());
//
// Image offscreenImage = new Image(Display.getCurrent(),
// sourceFigureRelativePrecisionBounds.width,
// sourceFigureRelativePrecisionBounds.height);
//
// GC gc = new GC(offscreenImage);
// SWTGraphics swtGraphics = new SWTGraphics(gc);
// swtGraphics.translate(-sourceFigureRelativePrecisionBounds.x,
// -sourceFigureRelativePrecisionBounds.y);
// source.paint(swtGraphics);
//
// ghostImageData = offscreenImage.getImageData();
// if (transparency != null) {
// ghostImageData.transparentPixel = ghostImageData.palette
// .getPixel(transparency);
// }
//
// offscreenImage.dispose();
// swtGraphics.dispose();
// gc.dispose();
}
/**
* @see Figure#paintFigure(Graphics)
*/
protected void paintFigure(Graphics graphics) {
// Image feedbackImage = new Image(Display.getCurrent(),
// ghostImageData);
// graphics.setAlpha(alpha);
// graphics.setClip(getBounds().getCopy());
// graphics.drawImage(feedbackImage, 0, 0, ghostImageData.width,
// ghostImageData.height, getBounds().x, getBounds().y,
// getBounds().width, getBounds().height);
// feedbackImage.dispose();
}
}