OLD | NEW |
1 // | 1 // |
2 // Copyright 2014 Google Inc. All rights reserved. | 2 // Copyright 2014 Google Inc. All rights reserved. |
3 // | 3 // |
4 // Use of this source code is governed by a BSD-style | 4 // Use of this source code is governed by a BSD-style |
5 // license that can be found in the LICENSE file or at | 5 // license that can be found in the LICENSE file or at |
6 // https://developers.google.com/open-source/licenses/bsd | 6 // https://developers.google.com/open-source/licenses/bsd |
7 // | 7 // |
8 | 8 |
9 part of charted.core.utils; | 9 part of charted.core.utils; |
10 | 10 |
11 /// Interface representing size and position of an element | 11 /// Interface representing size and position of an element |
12 class Rect { | 12 class Rect { |
13 final num x; | 13 final num x; |
14 final num y; | 14 final num y; |
15 final num width; | 15 final num width; |
16 final num height; | 16 final num height; |
17 | 17 |
18 const Rect([this.x = 0, this.y = 0, this.width = 0, this.height = 0]); | 18 const Rect([this.x = 0, this.y = 0, this.width = 0, this.height = 0]); |
19 const Rect.size(this.width, this.height) : x = 0, y = 0; | 19 const Rect.size(this.width, this.height) |
20 const Rect.position(this.x, this.y) : width = 0, height = 0; | 20 : x = 0, |
21 | 21 y = 0; |
22 bool operator==(other) => | 22 const Rect.position(this.x, this.y) |
23 other is Rect && isSameSizeAs(other) && isSamePositionAs(other); | 23 : width = 0, |
| 24 height = 0; |
24 | 25 |
25 bool isSameSizeAs(Rect other) => | 26 bool isSameSizeAs(Rect other) => |
26 other != null && width == other.width && height == other.height; | 27 other != null && width == other.width && height == other.height; |
27 | 28 |
28 bool isSamePositionAs(Rect other) => | 29 bool isSamePositionAs(Rect other) => |
29 other != null && x == other.x && y == other.y; | 30 other != null && x == other.x && y == other.y; |
30 | 31 |
31 bool contains(num otherX, num otherY) => | 32 bool contains(num otherX, num otherY) => |
32 otherX >= x && otherX <= x + width && | 33 otherX >= x && otherX <= x + width && otherY >= y && otherY <= y + height; |
33 otherY >= y && otherY <= y + height; | |
34 | 34 |
35 String toString() => '$x, $y, $width, $height'; | 35 String toString() => '$x, $y, $width, $height'; |
| 36 |
| 37 @override |
| 38 bool operator ==(other) => |
| 39 other is Rect && isSameSizeAs(other) && isSamePositionAs(other); |
| 40 |
| 41 @override |
| 42 int get hashCode => hash4(x, y, width, height); |
36 } | 43 } |
37 | 44 |
38 /// Mutable version of [Rect] class. | 45 /// Mutable version of [Rect] class. |
39 class MutableRect extends Rect { | 46 class MutableRect extends Rect { |
40 num x; | 47 num x; |
41 num y; | 48 num y; |
42 num width; | 49 num width; |
43 num height; | 50 num height; |
44 | 51 |
45 MutableRect(this.x, this.y, this.width, this.height); | 52 MutableRect(this.x, this.y, this.width, this.height); |
46 MutableRect.size(this.width, this.height); | 53 MutableRect.size(this.width, this.height); |
47 MutableRect.position(this.x, this.y); | 54 MutableRect.position(this.x, this.y); |
48 } | 55 } |
49 | 56 |
50 class AbsoluteRect { | 57 class AbsoluteRect { |
51 final num start; | 58 final num start; |
52 final num end; | 59 final num end; |
53 final num top; | 60 final num top; |
54 final num bottom; | 61 final num bottom; |
55 | 62 |
56 const AbsoluteRect(this.top, this.end, this.bottom, this.start); | 63 const AbsoluteRect(this.top, this.end, this.bottom, this.start); |
57 | 64 |
58 bool operator==(other) => | 65 @override |
59 other is AbsoluteRect && | 66 bool operator ==(other) => other is AbsoluteRect && |
60 start == other.start && end == other.end && | 67 start == other.start && |
61 top == other.top && bottom == other.bottom; | 68 end == other.end && |
62 } | 69 top == other.top && |
| 70 bottom == other.bottom; |
| 71 |
| 72 @override |
| 73 int get hashCode => hash4(start, end, top, bottom); |
| 74 } |
OLD | NEW |