/*************************************************** * * cismet GmbH, Saarbruecken, Germany * * ... and it just works. * ****************************************************/ package de.cismet.cismap.commons.gui.piccolo; import edu.umd.cs.piccolo.nodes.PImage; import java.awt.Image; /** * DOCUMENT ME! * * @author thorsten.hell@cismet.de * @version $Revision$, $Date$ */ public class XPImage extends PImage { //~ Instance fields -------------------------------------------------------- XPImage crossfadingTheOldPart = null; private final transient org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(this.getClass()); //~ Constructors ----------------------------------------------------------- /** * Creates a new XPImage object. */ public XPImage() { } //~ Methods ---------------------------------------------------------------- /** * DOCUMENT ME! * * @param newImage DOCUMENT ME! * @param animationDuration DOCUMENT ME! */ public void setImage(final Image newImage, int animationDuration) { if (!getVisible()) { animationDuration = 0; } if ((getImage() != null) && (this.getParent() != null)) { if (crossfadingTheOldPart == null) { crossfadingTheOldPart = new XPImage(); this.getParent().addChild(crossfadingTheOldPart); crossfadingTheOldPart.moveInFrontOf(this); crossfadingTheOldPart.setTransparency(0f); } if (crossfadingTheOldPart.getTransparency() == 0.0) { final float transparencyOfLayer = getTransparency(); crossfadingTheOldPart.setImage(getImage()); crossfadingTheOldPart.setBounds(this.getBounds()); crossfadingTheOldPart.setOffset(getOffset()); crossfadingTheOldPart.setScale(getScale()); crossfadingTheOldPart.setTransparency(getTransparency()); setTransparency(0); setImage(newImage); animateToTransparency(transparencyOfLayer, animationDuration); crossfadingTheOldPart.animateToTransparency(0, animationDuration); } else { setImage(newImage); // the existing animation will care about it } } else { // no parent or no image >> no animation setImage(newImage); } } }