--- /dev/null
+//
+// Getdown - application installer, patcher and launcher
+// Copyright (C) 2004-2018 Getdown authors
+// https://github.com/threerings/getdown/blob/master/LICENSE
+
+package com.threerings.getdown.util;
+
+/**
+ * An immutable rectangle.
+ */
+public class Rectangle
+{
+ public final int x;
+ public final int y;
+ public final int width;
+ public final int height;
+
+ public Rectangle (int x, int y, int width, int height)
+ {
+ this.x = x;
+ this.y = y;
+ this.width = width;
+ this.height = height;
+ }
+
+ public Rectangle union (Rectangle other) {
+ int x1 = Math.min(x, other.x);
+ int x2 = Math.max(x + width, other.x + other.width);
+ int y1 = Math.min(y, other.y);
+ int y2 = Math.max(y + height, other.y + other.height);
+ return new Rectangle(x1, y1, x2 - x1, y2 - y1);
+ }
+
+ /** {@inheritDoc} */
+ public String toString ()
+ {
+ return getClass().getName() + "[x=" + x + ", y=" + y +
+ ", width=" + width + ", height=" + height + "]";
+ }
+}