### Eclipse Workspace Patch 1.0
#P org.eclipse.draw2d
Index: src/org/eclipse/draw2d/geometry/PrecisionPoint.java
===================================================================
RCS file: /cvsroot/tools/org.eclipse.gef/plugins/org.eclipse.draw2d/src/org/eclipse/draw2d/geometry/PrecisionPoint.java,v
retrieving revision 1.10
diff -u -r1.10 PrecisionPoint.java
--- src/org/eclipse/draw2d/geometry/PrecisionPoint.java 30 Mar 2005 21:27:45 -0000 1.10
+++ src/org/eclipse/draw2d/geometry/PrecisionPoint.java 2 Jan 2008 18:02:32 -0000
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2007 IBM Corporation and others.
* 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
@@ -33,15 +33,9 @@
* @param copy Point from which the initial values are taken
*/
public PrecisionPoint(Point copy) {
- if (copy instanceof PrecisionPoint) {
- PrecisionPoint precPt = (PrecisionPoint)copy;
- preciseX = precPt.preciseX;
- preciseY = precPt.preciseY;
- updateInts();
- } else {
- preciseX = x = copy.x;
- preciseY = y = copy.y;
- }
+ preciseX = copy.preciseX();
+ preciseY = copy.preciseY();
+ updateInts();
}
/**
@@ -61,9 +55,9 @@
* @param y Y value
*/
public PrecisionPoint(double x, double y) {
- super(x, y);
preciseX = x;
preciseY = y;
+ updateInts();
}
/**
@@ -80,8 +74,7 @@
public void performScale(double factor) {
preciseX = preciseX * factor;
preciseY = preciseY * factor;
- x = (int)Math.floor(preciseX + 0.000000001);
- y = (int)Math.floor(preciseY + 0.000000001);
+ updateInts();
}
/**
@@ -90,23 +83,16 @@
public void performTranslate(int dx, int dy) {
preciseX += dx;
preciseY += dy;
- x = (int)Math.floor(preciseX + 0.000000001);
- y = (int)Math.floor(preciseY + 0.000000001);
+ updateInts();
}
/**
* @see org.eclipse.draw2d.geometry.Point#setLocation(Point)
*/
public Point setLocation(Point pt) {
- if (pt instanceof PrecisionPoint) {
- preciseX = ((PrecisionPoint)pt).preciseX;
- preciseY = ((PrecisionPoint)pt).preciseY;
- } else {
- preciseX = pt.x;
- preciseY = pt.y;
- }
- x = (int)Math.floor(preciseX + 0.000000001);
- y = (int)Math.floor(preciseY + 0.000000001);
+ preciseX = pt.preciseX();
+ preciseY = pt.preciseY();
+ updateInts();
return this;
}
@@ -118,4 +104,18 @@
y = (int)Math.floor(preciseY + 0.000000001);
}
+/**
+ * @see org.eclipse.draw2d.geometry.Point#preciseX()
+ */
+public double preciseX() {
+ return preciseX;
+}
+
+/**
+ * @see org.eclipse.draw2d.geometry.Point#preciseY()
+ */
+public double preciseY() {
+ return preciseY;
+}
+
}
Index: src/org/eclipse/draw2d/geometry/Rectangle.java
===================================================================
RCS file: /cvsroot/tools/org.eclipse.gef/plugins/org.eclipse.draw2d/src/org/eclipse/draw2d/geometry/Rectangle.java,v
retrieving revision 1.18
diff -u -r1.18 Rectangle.java
--- src/org/eclipse/draw2d/geometry/Rectangle.java 15 May 2006 17:44:38 -0000 1.18
+++ src/org/eclipse/draw2d/geometry/Rectangle.java 2 Jan 2008 18:02:32 -0000
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2007 IBM Corporation and others.
* 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
@@ -882,7 +882,7 @@
* @param p Point to be unioned with this Rectangle
* @since 2.0
*/
-public final void union(Point p) {
+public void union(Point p) {
union(p.x, p.y);
}
@@ -894,7 +894,7 @@
* @param rect Rectangle to be unioned with this Rectangle
* @since 2.0
*/
-public final Rectangle union(Rectangle rect) {
+public Rectangle union(Rectangle rect) {
if (rect == null)
return this;
return union(rect.x, rect.y, rect.width, rect.height);
@@ -921,4 +921,44 @@
return this;
}
+/**
+ * Returns double
x coordinate
+ *
+ * @return double
x coordinate
+ * @since 3.4
+ */
+public double preciseX() {
+ return x;
+}
+
+/**
+ * Returns double
y coordinate
+ *
+ * @return double
y coordinate
+ * @since 3.4
+ */
+public double preciseY() {
+ return y;
+}
+
+/**
+ * Returns double
width
+ *
+ * @return double
width
+ * @since 3.4
+ */
+public double preciseWidth() {
+ return width;
+}
+
+/**
+ * Returns double
height
+ *
+ * @return double
height
+ * @since 3.4
+ */
+public double preciseHeight() {
+ return height;
+}
+
}
Index: src/org/eclipse/draw2d/geometry/PrecisionDimension.java
===================================================================
RCS file: /cvsroot/tools/org.eclipse.gef/plugins/org.eclipse.draw2d/src/org/eclipse/draw2d/geometry/PrecisionDimension.java,v
retrieving revision 1.7
diff -u -r1.7 PrecisionDimension.java
--- src/org/eclipse/draw2d/geometry/PrecisionDimension.java 11 May 2005 19:25:02 -0000 1.7
+++ src/org/eclipse/draw2d/geometry/PrecisionDimension.java 2 Jan 2008 18:02:32 -0000
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2007 IBM Corporation and others.
* 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
@@ -20,6 +20,7 @@
* The width in double precision.
*/
public double preciseWidth;
+
/**
* The height in double precision.
*/
@@ -47,9 +48,9 @@
* @param d the reference dimension
*/
public PrecisionDimension(Dimension d) {
- super(d);
- preciseHeight = d.height;
- preciseWidth = d.width;
+ preciseHeight = d.preciseHeight();
+ preciseWidth = d.preciseWidth();
+ updateInts();
}
/**
@@ -69,4 +70,18 @@
height = (int)Math.floor(preciseHeight + 0.000000001);
}
+/**
+ * @see org.eclipse.draw2d.geometry.Dimension#preciseWidth()
+ */
+public double preciseWidth() {
+ return preciseWidth;
+}
+
+/**
+ * @see org.eclipse.draw2d.geometry.Dimension#preciseHeight()
+ */
+public double preciseHeight() {
+ return preciseHeight;
+}
+
}
Index: src/org/eclipse/draw2d/geometry/Dimension.java
===================================================================
RCS file: /cvsroot/tools/org.eclipse.gef/plugins/org.eclipse.draw2d/src/org/eclipse/draw2d/geometry/Dimension.java,v
retrieving revision 1.14
diff -u -r1.14 Dimension.java
--- src/org/eclipse/draw2d/geometry/Dimension.java 30 Mar 2005 21:27:45 -0000 1.14
+++ src/org/eclipse/draw2d/geometry/Dimension.java 2 Jan 2008 18:02:32 -0000
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2007 IBM Corporation and others.
* 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
@@ -435,4 +435,24 @@
return this;
}
+/**
+ * Returns double
width
+ *
+ * @return double
width
+ * @since 3.4
+ */
+public double preciseWidth() {
+ return width;
+}
+
+/**
+ * Returns double
height
+ *
+ * @return double
height
+ * @since 3.4
+ */
+public double preciseHeight() {
+ return height;
+}
+
}
Index: src/org/eclipse/draw2d/geometry/Point.java
===================================================================
RCS file: /cvsroot/tools/org.eclipse.gef/plugins/org.eclipse.draw2d/src/org/eclipse/draw2d/geometry/Point.java,v
retrieving revision 1.9
diff -u -r1.9 Point.java
--- src/org/eclipse/draw2d/geometry/Point.java 29 Mar 2005 23:58:02 -0000 1.9
+++ src/org/eclipse/draw2d/geometry/Point.java 2 Jan 2008 18:02:32 -0000
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2007 IBM Corporation and others.
* 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
@@ -395,4 +395,24 @@
return this;
}
+/**
+ * Returns double
x coordinate
+ *
+ * @return double
x coordinate
+ * @since 3.4
+ */
+public double preciseX() {
+ return x;
+}
+
+/**
+ * Returns double
y coordinate
+ *
+ * @return double
y coordinate
+ * @since 3.4
+ */
+public double preciseY() {
+ return y;
+}
+
}
Index: src/org/eclipse/draw2d/geometry/PrecisionRectangle.java
===================================================================
RCS file: /cvsroot/tools/org.eclipse.gef/plugins/org.eclipse.draw2d/src/org/eclipse/draw2d/geometry/PrecisionRectangle.java,v
retrieving revision 1.17
diff -u -r1.17 PrecisionRectangle.java
--- src/org/eclipse/draw2d/geometry/PrecisionRectangle.java 3 Mar 2006 05:06:29 -0000 1.17
+++ src/org/eclipse/draw2d/geometry/PrecisionRectangle.java 2 Jan 2008 18:02:32 -0000
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2007 IBM Corporation and others.
* 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
@@ -10,6 +10,7 @@
*******************************************************************************/
package org.eclipse.draw2d.geometry;
+
/**
* A Rectangle implementation using floating point values which are truncated into the inherited
* integer fields. The use of floating point prevents rounding errors from accumulating.
@@ -40,18 +41,10 @@
* @param rect the base rectangle
*/
public PrecisionRectangle(Rectangle rect) {
- if (rect instanceof PrecisionRectangle) {
- PrecisionRectangle rectangle = (PrecisionRectangle)rect;
- preciseX = rectangle.preciseX;
- preciseY = rectangle.preciseY;
- preciseWidth = rectangle.preciseWidth;
- preciseHeight = rectangle.preciseHeight;
- } else {
- preciseX = rect.x;
- preciseY = rect.y;
- preciseWidth = rect.width;
- preciseHeight = rect.height;
- }
+ preciseX = rect.preciseX();
+ preciseY = rect.preciseY();
+ preciseWidth = rect.preciseWidth();
+ preciseHeight = rect.preciseHeight();
updateInts();
}
@@ -148,14 +141,8 @@
* @see org.eclipse.draw2d.geometry.Rectangle#resize(org.eclipse.draw2d.geometry.Dimension)
*/
public Rectangle resize(Dimension sizeDelta) {
- if (sizeDelta instanceof PrecisionDimension) {
- PrecisionDimension pd = (PrecisionDimension)sizeDelta;
- preciseWidth += pd.preciseWidth;
- preciseHeight += pd.preciseHeight;
- } else {
- preciseWidth += sizeDelta.width;
- preciseHeight += sizeDelta.height;
- }
+ preciseWidth += sizeDelta.preciseWidth();
+ preciseHeight += sizeDelta.preciseHeight();
updateInts();
return this;
}
@@ -200,14 +187,8 @@
* @see org.eclipse.draw2d.geometry.Rectangle#translate(org.eclipse.draw2d.geometry.Point)
*/
public Rectangle translate(Point p) {
- if (p instanceof PrecisionPoint) {
- PrecisionPoint pp = (PrecisionPoint)p;
- preciseX += pp.preciseX;
- preciseY += pp.preciseY;
- } else {
- preciseX += p.x;
- preciseY += p.y;
- }
+ preciseX += p.preciseX();
+ preciseY += p.preciseY();
updateInts();
return this;
}
@@ -218,6 +199,8 @@
* @since 3.0
* @param other the rectangle being unioned
* @return this
for convenience
+ * @deprecated
+ * Use {@link #union(Rectangle)} instead
*/
public PrecisionRectangle union(PrecisionRectangle other) {
double newright = Math.max(preciseRight(), other.preciseRight());
@@ -232,6 +215,21 @@
}
/**
+ * @see org.eclipse.draw2d.geometry.Rectangle#union(org.eclipse.draw2d.geometry.Rectangle)
+ */
+public Rectangle union(Rectangle other) {
+ double newright = Math.max(preciseRight(), other.preciseX() + other.preciseWidth());
+ double newbottom = Math.max(preciseBottom(), other.preciseY() + other.preciseHeight());
+ preciseX = Math.min(preciseX, other.preciseX());
+ preciseY = Math.min(preciseY, other.preciseY());
+ preciseWidth = newright - preciseX;
+ preciseHeight = newbottom - preciseY;
+ updateInts();
+
+ return this;
+}
+
+/**
* Updates the integer values based on the current precise values. The integer values ar
* the floor of the double values. This is called automatically when calling api which is
* overridden in this class.
@@ -244,4 +242,139 @@
height = (int)Math.floor(preciseHeight + preciseY + 0.000000001) - y;
}
+/**
+ * @see org.eclipse.draw2d.geometry.Rectangle#union(org.eclipse.draw2d.geometry.Point)
+ */
+public void union(Point p) {
+ if (p.preciseX() < preciseX) {
+ preciseWidth += (preciseX - p.preciseX());
+ preciseX = p.preciseX();
+ } else {
+ double right = preciseX + preciseWidth;
+ if (p.preciseX() > right) {
+ preciseWidth = p.preciseX() - preciseX;
+ }
+ }
+ if (p.preciseY() < preciseY) {
+ preciseHeight += (preciseY - p.preciseY());
+ preciseY = p.preciseY();
+ } else {
+ double bottom = preciseY + preciseHeight;
+ if (p.preciseY() > bottom) {
+ preciseHeight = p.preciseY() - preciseY;
+ }
+ }
+ updateInts();
+}
+
+/**
+ * @see org.eclipse.draw2d.geometry.Rectangle#transpose()
+ */
+public Rectangle transpose() {
+ double temp = preciseX;
+ preciseX = preciseY;
+ preciseY = temp;
+ temp = preciseWidth;
+ preciseWidth = preciseHeight;
+ preciseHeight = temp;
+ super.transpose();
+ return this;
+}
+
+/**
+ * @see org.eclipse.draw2d.geometry.Rectangle#setLocation(org.eclipse.draw2d.geometry.Point)
+ */
+public Rectangle setLocation(Point loc) {
+ preciseX = loc.preciseX();
+ preciseY = loc.preciseY();
+ updateInts();
+ return this;
+}
+
+/**
+ * Returns the precise geometric centre of the rectangle
+ *
+ * @return PrecisionPoint
geometric center of the rectangle
+ * @since 3.4
+ */
+public Point getCenter() {
+ return new PrecisionPoint(preciseX + preciseWidth / 2.0, preciseY + preciseHeight / 2.0);
+}
+
+/**
+ * Shrinks the sides of this Rectangle by the horizontal and vertical values
+ * provided as input, and returns this Rectangle for convenience. The center of
+ * this Rectangle is kept constant.
+ *
+ * @param h Horizontal reduction amount
+ * @param v Vertical reduction amount
+ * @return this
for convenience
+ * @since 3.4
+ */
+public Rectangle shrink(double h, double v) {
+ preciseX += h;
+ preciseWidth -= (h + h);
+ preciseY += v;
+ preciseHeight -= (v + v);
+ updateInts();
+ return this;
+}
+
+/**
+ * Expands the horizontal and vertical sides of this Rectangle with the values
+ * provided as input, and returns this for convenience. The location of its
+ * center is kept constant.
+ *
+ * @param h Horizontal increment
+ * @param v Vertical increment
+ * @return this
for convenience
+ * @since 3.4
+ */
+public Rectangle expand(double h, double v) {
+ return shrink(-h, -v);
+}
+
+/**
+ * @see org.eclipse.draw2d.geometry.Rectangle#shrink(int, int)
+ */
+public Rectangle shrink(int h, int v) {
+ return shrink((double)h, (double)v);
+}
+
+/**
+ * @see org.eclipse.draw2d.geometry.Rectangle#contains(org.eclipse.draw2d.geometry.Point)
+ */
+public boolean contains(Point p) {
+ return preciseX <= p.preciseX() && p.preciseX() <= preciseX + preciseWidth
+ && preciseY <= p.preciseY() && p.preciseY() <= preciseY + preciseHeight;
+}
+
+/**
+ * @see org.eclipse.draw2d.geometry.Rectangle#preciseX()
+ */
+public double preciseX() {
+ return preciseX;
+}
+
+/**
+ * @see org.eclipse.draw2d.geometry.Rectangle#preciseY()
+ */
+public double preciseY() {
+ return preciseY;
+}
+
+/**
+ * @see org.eclipse.draw2d.geometry.Rectangle#preciseWidth()
+ */
+public double preciseWidth() {
+ return preciseWidth;
+}
+
+/**
+ * @see org.eclipse.draw2d.geometry.Rectangle#preciseHeight()
+ */
+public double preciseHeight() {
+ return preciseHeight;
+}
+
}