package org.archstudio.bna; import java.awt.geom.Point2D; import org.archstudio.bna.utils.BNAUtils; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; public interface ICoordinateMapper { public static final ICoordinateMapper IDENTITY = new ICoordinateMapper() { @Override public void insertCoordinateMapperListener(ICoordinateMapperListener l) { // ignored: this class will never generate an event } @Override public void addCoordinateMapperListener(ICoordinateMapperListener l) { // ignored: this class will never generate an event } @Override public void removeCoordinateMapperListener(ICoordinateMapperListener l) { } @Override public Rectangle getWorldBounds() { return new Rectangle(Integer.MIN_VALUE / 2, Integer.MIN_VALUE / 2, Integer.MAX_VALUE, Integer.MAX_VALUE); } @Override public Rectangle getLocalBounds() { return new Rectangle(Integer.MIN_VALUE / 2, Integer.MIN_VALUE / 2, Integer.MAX_VALUE, Integer.MAX_VALUE); } @Override public Point getLocalOrigin() { return new Point(0, 0); } @Override public double getLocalScale() { return 1d; } @Override public Point worldToLocal(Point worldPoint) { return BNAUtils.clone(worldPoint); } @Override public Point2D worldToLocal(Point2D worldPoint) { return new Point2D.Double(worldPoint.getX(), worldPoint.getY()); } @Override public Rectangle worldToLocal(Rectangle worldRectangle) { return BNAUtils.clone(worldRectangle); } @Override public Point localToWorld(Point localPoint) { return BNAUtils.clone(localPoint); } @Override public Point2D localToWorld(Point2D localPoint) { return new Point2D.Double(localPoint.getX(), localPoint.getY()); } @Override public Rectangle localToWorld(Rectangle localRectangle) { return BNAUtils.clone(localRectangle); } }; public abstract void insertCoordinateMapperListener(ICoordinateMapperListener l); public abstract void addCoordinateMapperListener(ICoordinateMapperListener l); public abstract void removeCoordinateMapperListener(ICoordinateMapperListener l); public abstract Rectangle getWorldBounds(); public abstract Rectangle getLocalBounds(); public abstract Point getLocalOrigin(); public abstract double getLocalScale(); public abstract Point worldToLocal(Point worldPoint); public abstract Point2D worldToLocal(Point2D worldPoint); public abstract Rectangle worldToLocal(Rectangle worldRectangle); public abstract Point localToWorld(Point localPoint); public abstract Point2D localToWorld(Point2D localPoint); public abstract Rectangle localToWorld(Rectangle localRectangle); }