/*******************************************************************************
* Copyright 2005, CHISEL Group, University of Victoria, Victoria, BC, Canada.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* The Chisel Group, University of Victoria
*******************************************************************************/
package org.eclipse.zest.layouts.dataStructures;
/**
* This is a point that isn't dependent on awt, swt, or any other library,
* except layout.
*
* @author Casey Best
*/
public class DisplayIndependentPoint {
public double x, y;
public boolean equals( Object o ) {
DisplayIndependentPoint that = (DisplayIndependentPoint) o;
if ( this.x == that.x && this.y == that.y ) return true;
else return false;
}
public DisplayIndependentPoint (double x, double y) {
this.x = x;
this.y = y;
}
public DisplayIndependentPoint (DisplayIndependentPoint point) {
this.x = point.x;
this.y = point.y;
}
public String toString() {
return "(" + x + ", " + y + ")";
}
/**
* Create a new point based on the current point but in a new coordinate system
* @param currentBounds
* @param targetBounds
* @return
*/
public DisplayIndependentPoint convert(DisplayIndependentRectangle currentBounds ,
DisplayIndependentRectangle targetBounds) {
double currentWidth = currentBounds.width;
double currentHeight = currentBounds.height;
double newX = (currentBounds.width == 0) ? 0 :
(x / currentWidth) * targetBounds.width + targetBounds.x;
double newY = (currentBounds.height == 0) ? 0 :
(y / currentHeight) * targetBounds.height + targetBounds.y;
return new DisplayIndependentPoint( newX, newY );
}
/**
* Converts this point based on the current x, y values to a percentage
* of the specified coordinate system
* @param bounds
* @return
*/
public DisplayIndependentPoint convertToPercent(DisplayIndependentRectangle bounds) {
double newX = (bounds.width == 0) ? 0 : ((double)(x - bounds.x))/ bounds.width;
double newY = (bounds.height == 0) ? 0 : ((double)(y - bounds.y))/bounds.height;
return new DisplayIndependentPoint(newX, newY);
}
/**
* Converts this point based on the current x, y values from a percentage
* of the specified coordinate system
* @param bounds
* @return
*/
public DisplayIndependentPoint convertFromPercent(DisplayIndependentRectangle bounds) {
double newX = bounds.x + x * bounds.width;
double newY = bounds.y + y * bounds.height;
return new DisplayIndependentPoint(newX, newY);
}
}