/*************************************************** * * 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; import java.awt.geom.Point2D; import java.net.URL; /** * DOCUMENT ME! * * @author thorsten.hell@cismet.de * @version $Revision$, $Date$ */ public class FixedPImage extends PImage implements PSticky { //~ Instance fields -------------------------------------------------------- private double sweetSpotX = 0d; private double sweetSpotY = 0d; private double originalOffsetX = 0; private double originalOffsetY = 0; private double multiplier = 1.0d; //~ Constructors ----------------------------------------------------------- /** * Creates a new instance of FixedPImage. */ public FixedPImage() { super(); } /** * Creates a new FixedPImage object. * * @param newImage DOCUMENT ME! */ public FixedPImage(final Image newImage) { super(newImage); } /** * Creates a new FixedPImage object. * * @param fileName DOCUMENT ME! */ public FixedPImage(final String fileName) { super(fileName); } /** * Creates a new FixedPImage object. * * @param url DOCUMENT ME! */ public FixedPImage(final URL url) { super(url); } //~ Methods ---------------------------------------------------------------- /** * DOCUMENT ME! * * @param multiplier DOCUMENT ME! */ public void setMultiplier(final double multiplier) { this.multiplier = multiplier; } @Override public void setOffset(final double x, final double y) { originalOffsetX = x; originalOffsetY = y; setOffsetWithoutTouchingOriginalOffset(x, y); } @Override public void setOffset(final Point2D point) { setOffset(point.getX(), point.getY()); } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public double getSweetSpotX() { return sweetSpotX; } /** * DOCUMENT ME! * * @param sweetSpotX DOCUMENT ME! */ public void setSweetSpotX(final double sweetSpotX) { this.sweetSpotX = sweetSpotX; setOffsetWithoutTouchingOriginalOffset(originalOffsetX, originalOffsetY); } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public double getSweetSpotY() { return sweetSpotY; } /** * DOCUMENT ME! * * @param sweetSpotY DOCUMENT ME! */ public void setSweetSpotY(final double sweetSpotY) { this.sweetSpotY = sweetSpotY; setOffsetWithoutTouchingOriginalOffset(originalOffsetX, originalOffsetY); } @Override public void setScale(final double scale) { super.setScale(scale * multiplier); setOffsetWithoutTouchingOriginalOffset(originalOffsetX, originalOffsetY); } /** * DOCUMENT ME! * * @param x DOCUMENT ME! * @param y DOCUMENT ME! */ private void setOffsetWithoutTouchingOriginalOffset(final double x, final double y) { super.setOffset(x - (getGlobalBounds().getWidth() * sweetSpotX), y - (getGlobalBounds().getHeight() * sweetSpotY)); } }