8f199377fa
This removes the last uses of the generic method comment syntax from the SDK. There are no additional explicit casts or reified generics (other than those implied by reifying generic methods) in this CL. Bug: Change-Id: Icae23cac60869243cb3ba441f86d70422f68178f Reviewed-on: https://dart-review.googlesource.com/26081 Reviewed-by: Stephen Adams <sra@google.com> Reviewed-by: Jacob Richman <jacobr@google.com>
101 lines
3.0 KiB
Plaintext
101 lines
3.0 KiB
Plaintext
// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
|
|
// for details. All rights reserved. Use of this source code is governed by a
|
|
// BSD-style license that can be found in the LICENSE file.
|
|
|
|
part of $LIBRARYNAME;
|
|
|
|
@DocsEditable()
|
|
$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS implements Rectangle$IMPLEMENTS {
|
|
|
|
// NOTE! All code below should be common with RectangleBase.
|
|
String toString() {
|
|
return 'Rectangle ($left, $top) $width x $height';
|
|
}
|
|
|
|
bool operator ==(other) {
|
|
if (other is !Rectangle) return false;
|
|
return left == other.left && top == other.top && width == other.width &&
|
|
height == other.height;
|
|
}
|
|
|
|
int get hashCode => _JenkinsSmiHash.hash4(left.hashCode, top.hashCode,
|
|
width.hashCode, height.hashCode);
|
|
|
|
/**
|
|
* Computes the intersection of `this` and [other].
|
|
*
|
|
* The intersection of two axis-aligned rectangles, if any, is always another
|
|
* axis-aligned rectangle.
|
|
*
|
|
* Returns the intersection of this and `other`, or null if they don't
|
|
* intersect.
|
|
*/
|
|
Rectangle intersection(Rectangle other) {
|
|
var x0 = max(left, other.left);
|
|
var x1 = min(left + width, other.left + other.width);
|
|
|
|
if (x0 <= x1) {
|
|
var y0 = max(top, other.top);
|
|
var y1 = min(top + height, other.top + other.height);
|
|
|
|
if (y0 <= y1) {
|
|
return new Rectangle(x0, y0, x1 - x0, y1 - y0);
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
|
|
/**
|
|
* Returns true if `this` intersects [other].
|
|
*/
|
|
bool intersects(Rectangle<num> other) {
|
|
return (left <= other.left + other.width &&
|
|
other.left <= left + width &&
|
|
top <= other.top + other.height &&
|
|
other.top <= top + height);
|
|
}
|
|
|
|
/**
|
|
* Returns a new rectangle which completely contains `this` and [other].
|
|
*/
|
|
Rectangle boundingBox(Rectangle other) {
|
|
var right = max(this.left + this.width, other.left + other.width);
|
|
var bottom = max(this.top + this.height, other.top + other.height);
|
|
|
|
var left = min(this.left, other.left);
|
|
var top = min(this.top, other.top);
|
|
|
|
return new Rectangle(left, top, right - left, bottom - top);
|
|
}
|
|
|
|
/**
|
|
* Tests whether `this` entirely contains [another].
|
|
*/
|
|
bool containsRectangle(Rectangle<num> another) {
|
|
return left <= another.left &&
|
|
left + width >= another.left + another.width &&
|
|
top <= another.top &&
|
|
top + height >= another.top + another.height;
|
|
}
|
|
|
|
/**
|
|
* Tests whether [another] is inside or along the edges of `this`.
|
|
*/
|
|
bool containsPoint(Point<num> another) {
|
|
return another.x >= left &&
|
|
another.x <= left + width &&
|
|
another.y >= top &&
|
|
another.y <= top + height;
|
|
}
|
|
|
|
Point get topLeft => new Point(this.left, this.top);
|
|
Point get topRight => new Point(this.left + this.width, this.top);
|
|
Point get bottomRight => new Point(this.left + this.width,
|
|
this.top + this.height);
|
|
Point get bottomLeft => new Point(this.left,
|
|
this.top + this.height);
|
|
|
|
$!MEMBERS}
|
|
|