1:
48:
49: package ;
50:
51: import ;
52: import ;
53:
54: import ;
55: import ;
56:
57:
60: public class AxisSpace implements Cloneable, PublicCloneable, Serializable {
61:
62:
63: private static final long serialVersionUID = -2490732595134766305L;
64:
65:
66: private double top;
67:
68:
69: private double bottom;
70:
71:
72: private double left;
73:
74:
75: private double right;
76:
77:
80: public AxisSpace() {
81: this.top = 0.0;
82: this.bottom = 0.0;
83: this.left = 0.0;
84: this.right = 0.0;
85: }
86:
87:
92: public double getTop() {
93: return this.top;
94: }
95:
96:
101: public void setTop(double space) {
102: this.top = space;
103: }
104:
105:
110: public double getBottom() {
111: return this.bottom;
112: }
113:
114:
119: public void setBottom(double space) {
120: this.bottom = space;
121: }
122:
123:
128: public double getLeft() {
129: return this.left;
130: }
131:
132:
137: public void setLeft(double space) {
138: this.left = space;
139: }
140:
141:
146: public double getRight() {
147: return this.right;
148: }
149:
150:
155: public void setRight(double space) {
156: this.right = space;
157: }
158:
159:
165: public void add(double space, RectangleEdge edge) {
166: if (edge == null) {
167: throw new IllegalArgumentException("Null 'edge' argument.");
168: }
169: if (edge == RectangleEdge.TOP) {
170: this.top += space;
171: }
172: else if (edge == RectangleEdge.BOTTOM) {
173: this.bottom += space;
174: }
175: else if (edge == RectangleEdge.LEFT) {
176: this.left += space;
177: }
178: else if (edge == RectangleEdge.RIGHT) {
179: this.right += space;
180: }
181: else {
182: throw new IllegalStateException("Unrecognised 'edge' argument.");
183: }
184: }
185:
186:
191: public void ensureAtLeast(AxisSpace space) {
192: this.top = Math.max(this.top, space.top);
193: this.bottom = Math.max(this.bottom, space.bottom);
194: this.left = Math.max(this.left, space.left);
195: this.right = Math.max(this.right, space.right);
196: }
197:
198:
205: public void ensureAtLeast(double space, RectangleEdge edge) {
206: if (edge == RectangleEdge.TOP) {
207: if (this.top < space) {
208: this.top = space;
209: }
210: }
211: else if (edge == RectangleEdge.BOTTOM) {
212: if (this.bottom < space) {
213: this.bottom = space;
214: }
215: }
216: else if (edge == RectangleEdge.LEFT) {
217: if (this.left < space) {
218: this.left = space;
219: }
220: }
221: else if (edge == RectangleEdge.RIGHT) {
222: if (this.right < space) {
223: this.right = space;
224: }
225: }
226: else {
227: throw new IllegalStateException(
228: "AxisSpace.ensureAtLeast(): unrecognised AxisLocation."
229: );
230: }
231: }
232:
233:
241: public Rectangle2D shrink(Rectangle2D area, Rectangle2D result) {
242: if (result == null) {
243: result = new Rectangle2D.Double();
244: }
245: result.setRect(
246: area.getX() + this.left,
247: area.getY() + this.top,
248: area.getWidth() - this.left - this.right,
249: area.getHeight() - this.top - this.bottom
250: );
251: return result;
252: }
253:
254:
262: public Rectangle2D expand(Rectangle2D area, Rectangle2D result) {
263: if (result == null) {
264: result = new Rectangle2D.Double();
265: }
266: result.setRect(
267: area.getX() - this.left,
268: area.getY() - this.top,
269: area.getWidth() + this.left + this.right,
270: area.getHeight() + this.top + this.bottom
271: );
272: return result;
273: }
274:
275:
283: public Rectangle2D reserved(Rectangle2D area, RectangleEdge edge) {
284: Rectangle2D result = null;
285: if (edge == RectangleEdge.TOP) {
286: result = new Rectangle2D.Double(
287: area.getX(), area.getY(), area.getWidth(), this.top
288: );
289: }
290: else if (edge == RectangleEdge.BOTTOM) {
291: result = new Rectangle2D.Double(
292: area.getX(), area.getMaxY() - this.top,
293: area.getWidth(), this.bottom
294: );
295: }
296: else if (edge == RectangleEdge.LEFT) {
297: result = new Rectangle2D.Double(
298: area.getX(), area.getY(), this.left, area.getHeight()
299: );
300: }
301: else if (edge == RectangleEdge.RIGHT) {
302: result = new Rectangle2D.Double(
303: area.getMaxX() - this.right, area.getY(),
304: this.right, area.getHeight()
305: );
306: }
307: return result;
308: }
309:
310:
318: public Object clone() throws CloneNotSupportedException {
319: return super.clone();
320: }
321:
322:
329: public boolean equals(Object obj) {
330: if (obj == this) {
331: return true;
332: }
333: if (!(obj instanceof AxisSpace)) {
334: return false;
335: }
336: AxisSpace that = (AxisSpace) obj;
337: if (this.top != that.top) {
338: return false;
339: }
340: if (this.bottom != that.bottom) {
341: return false;
342: }
343: if (this.left != that.left) {
344: return false;
345: }
346: if (this.right != that.right) {
347: return false;
348: }
349: return true;
350: }
351:
352:
357: public int hashCode() {
358: int result = 23;
359: long l = Double.doubleToLongBits(this.top);
360: result = 37 * result + (int) (l ^ (l >>> 32));
361: l = Double.doubleToLongBits(this.bottom);
362: result = 37 * result + (int) (l ^ (l >>> 32));
363: l = Double.doubleToLongBits(this.left);
364: result = 37 * result + (int) (l ^ (l >>> 32));
365: l = Double.doubleToLongBits(this.right);
366: result = 37 * result + (int) (l ^ (l >>> 32));
367: return result;
368: }
369:
370:
375: public String toString() {
376: return super.toString() + "[left=" + this.left + ",right=" + this.right
377: + ",top=" + this.top + ",bottom=" + this.bottom + "]";
378: }
379:
380: }