package org.gudy.azureus2.ui.swt.views.utils; import org.eclipse.swt.graphics.Rectangle; public class CoordinateTransform { public CoordinateTransform(Rectangle exteriorBounds) { extWidth = exteriorBounds.width; extHeight = exteriorBounds.height; } final int extWidth; final int extHeight; int offsetX = 0; int offsetY = 0; double scaleX = 1.0; double scaleY = 1.0; public int x(int x) { return (int)(Math.round(offsetX+x*scaleX)); } public int y(int y) { return (int)(Math.round(offsetY+y*scaleY)); } private int w(int w) { return (int)Math.round(w*scaleX); } private int h(int h) { return (int)Math.ceil(h*scaleY); } public void scale(double x, double y) { scaleX *= x; scaleY *= y; } public void shiftExternal(int x, int y) { offsetX += x; offsetY += y; } public void shiftInternal(int x, int y) { offsetX += x*scaleX; offsetY += y*scaleY; } private void calcFromDimensions(int internalWidth, int internalHeight, int marginLeft, int marginRight, int marginTop, int marginBottom, boolean leftToRight, boolean topDown) { shiftExternal(leftToRight ? 0 : extWidth,topDown ? 0 : extHeight); scale(leftToRight ? 1.0 : -1.0, topDown ? 1.0 : -1.0); shiftInternal(leftToRight ? marginLeft : marginRight, topDown ? marginTop : marginBottom); scale(Math.round((extWidth-marginLeft-marginRight)/(1.0*internalWidth)),Math.round((extHeight-marginTop-marginBottom)/(1.0*internalHeight))); } }