From 70c2969be53e51b54a7d2b95ed7c51b46c26b755 Mon Sep 17 00:00:00 2001 From: Martin Jobst Date: Wed, 22 Nov 2023 21:31:46 +0100 Subject: [PATCH] Simplify Rectangle.intersects (#302) Simplify and optimize the intersects checking method of Rectangle. Also align the behavior of Rectangle.intersect for empty intersections. Signed-off-by: Martin Jobst --- .../src/org/eclipse/draw2d/test/RectangleTest.java | 8 ++++++++ .../src/org/eclipse/draw2d/geometry/Rectangle.java | 11 ++++------- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/org.eclipse.draw2d.tests/src/org/eclipse/draw2d/test/RectangleTest.java b/org.eclipse.draw2d.tests/src/org/eclipse/draw2d/test/RectangleTest.java index 5fa178b19..4dddc02f8 100644 --- a/org.eclipse.draw2d.tests/src/org/eclipse/draw2d/test/RectangleTest.java +++ b/org.eclipse.draw2d.tests/src/org/eclipse/draw2d/test/RectangleTest.java @@ -260,6 +260,14 @@ public void testIntersects() throws Exception { assertFalse(rectangle1.intersects(new Rectangle(-100, -100, 10, 10))); // assertFalse(rectangle1.intersects(new Rectangle(0, 0, 5, 10))); + // + assertFalse(rectangle1.intersects(new Rectangle(15, 20, 0, 10))); + assertFalse(rectangle1.intersects(new Rectangle(15, 20, 10, 0))); + // + Rectangle rectangle3 = new Rectangle(0, 30, 0, 40); + assertFalse(rectangle3.intersects(rectangle3)); + // + assertFalse(rectangle3.intersects(new Rectangle(0, 30, 100, 10))); } @SuppressWarnings("static-method") diff --git a/org.eclipse.draw2d/src/org/eclipse/draw2d/geometry/Rectangle.java b/org.eclipse.draw2d/src/org/eclipse/draw2d/geometry/Rectangle.java index 0cdbbbef7..c14336f5a 100644 --- a/org.eclipse.draw2d/src/org/eclipse/draw2d/geometry/Rectangle.java +++ b/org.eclipse.draw2d/src/org/eclipse/draw2d/geometry/Rectangle.java @@ -725,7 +725,7 @@ public Rectangle intersect(Rectangle rect) { int x2 = Math.min(x + width, rect.x() + rect.width()); int y1 = Math.max(y, rect.y()); int y2 = Math.min(y + height, rect.y() + rect.height()); - if (((x2 - x1) < 0) || ((y2 - y1) < 0)) { + if (((x2 - x1) <= 0) || ((y2 - y1) <= 0)) { return setBounds(0, 0, 0, 0); // no intersection } return setBounds(x1, y1, x2 - x1, y2 - y1); @@ -739,12 +739,9 @@ public Rectangle intersect(Rectangle rect) { * @since 2.0 */ public boolean intersects(Rectangle rect) { - int x1 = Math.max(x, rect.x()); - int x2 = Math.min(x + width, rect.x() + rect.width()); - int y1 = Math.max(y, rect.y()); - int y2 = Math.min(y + height, rect.y() + rect.height()); - - return (((x2 - x1) > 0) && ((y2 - y1) > 0)); + return width > 0 && height > 0 && rect.width() > 0 && rect.height() > 0 // + && x < rect.x() + rect.width() && rect.x() < x + width // + && y < rect.y() + rect.height() && rect.y() < y + height; } /**