/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.eas.client.controls.geopane; import java.awt.Insets; import java.awt.Point; import java.awt.Rectangle; import java.awt.geom.Rectangle2D; /** * * @author mg */ public class TileUtils { public static Rectangle expandRectFromCell(int x, int y, int aTileSize) { Rectangle result = new Rectangle(); result.x = x * aTileSize; result.y = y * aTileSize; result.width = result.height = aTileSize; return result; } public static Rectangle expandRectFromCell(Point ptKey, int aTileSize) { return expandRectFromCell(ptKey.x, ptKey.y, aTileSize); } protected static Insets calcConstraintingInsets(Rectangle aSubject, Rectangle aConstraint) { Insets insets = new Insets(0, 0, 0, 0); if (aConstraint.x > aSubject.x) { insets.left = aConstraint.x - aSubject.x; } if (aConstraint.y > aSubject.y) { insets.top = aConstraint.y - aSubject.y; } if ((aSubject.x + aSubject.width) > (aConstraint.x + aConstraint.width)) { insets.right = (aSubject.x + aSubject.width) - (aConstraint.x + aConstraint.width); } if ((aSubject.y + aSubject.height) > (aConstraint.y + aConstraint.height)) { insets.bottom = (aSubject.y + aSubject.height) - (aConstraint.y + aConstraint.height); } return insets; } public static Rectangle calcControlRect(int x, int y, Rectangle aClip, int aTileSize) { Rectangle result = expandRectFromCell(x, y, aTileSize); Insets insets = calcConstraintingInsets(result, aClip); result.x += insets.left; result.y += insets.top; result.width -= insets.left + insets.right; result.height -= insets.top + insets.bottom; return result; } public static Rectangle calcImageRect(int x, int y, Rectangle aClip, int aTileSize) { Rectangle result = expandRectFromCell(x, y, aTileSize); Insets insets = calcConstraintingInsets(result, aClip); result.x = insets.left; result.y = insets.top; result.width -= insets.left + insets.right; result.height -= insets.top + insets.bottom; return result; } public static Rectangle2D.Double expandRectFromCell(double x, double y, double aTileSize) { Rectangle2D.Double result = new Rectangle2D.Double(); result.x = x * aTileSize; result.y = y * aTileSize; result.width = result.height = aTileSize; return result; } protected static class DoubleInsets { double left; double top; double right; double bottom; } protected static DoubleInsets calcConstraintingInsets(Rectangle2D.Double aSubject, Rectangle2D.Double aConstraint) { DoubleInsets insets = new DoubleInsets(); if (aConstraint.x > aSubject.x) { insets.left = aConstraint.x - aSubject.x; } if (aConstraint.y > aSubject.y) { insets.top = aConstraint.y - aSubject.y; } if ((aSubject.x + aSubject.width) > (aConstraint.x + aConstraint.width)) { insets.right = (aSubject.x + aSubject.width) - (aConstraint.x + aConstraint.width); } if ((aSubject.y + aSubject.height) > (aConstraint.y + aConstraint.height)) { insets.bottom = (aSubject.y + aSubject.height) - (aConstraint.y + aConstraint.height); } return insets; } public static Rectangle2D.Double calcControlRect(int x, int y, Rectangle2D.Double aClip, double aTileSize) { Rectangle2D.Double result = expandRectFromCell(x, y, aTileSize); DoubleInsets insets = calcConstraintingInsets(result, aClip); result.x += insets.left; result.y += insets.top; result.width -= insets.left + insets.right; result.height -= insets.top + insets.bottom; return result; } }