sync ui geometry.dart into web_ui geometry.dart; add null safety annotations (#18356)
sync ui geometry.dart into web_ui geometry.dart; add null safety
diff --git a/lib/ui/geometry.dart b/lib/ui/geometry.dart
index 3d6183d..a3ac1d9 100644
--- a/lib/ui/geometry.dart
+++ b/lib/ui/geometry.dart
@@ -13,14 +13,12 @@
///
/// The first argument sets the horizontal component, and the second the
/// vertical component.
- const OffsetBase(double dx, double dy)
- : _dx = dx ?? 0.0,
- _dy = dy ?? 0.0,
- assert(dx != null),
- assert(dy != null);
+ const OffsetBase(this._dx, this._dy)
+ : assert(_dx != null),
+ assert(_dy != null);
- final double _dx;
- final double _dy;
+ final double/*!*/ _dx;
+ final double/*!*/ _dy;
/// Returns true if either component is [double.infinity], and false if both
/// are finite (or negative infinity, or NaN).
@@ -31,7 +29,7 @@
/// See also:
///
/// * [isFinite], which is true if both components are finite (and not NaN).
- bool get isInfinite => _dx >= double.infinity || _dy >= double.infinity;
+ bool/*!*/ get isInfinite => _dx >= double.infinity || _dy >= double.infinity;
/// Whether both components are finite (neither infinite nor NaN).
///
@@ -39,7 +37,7 @@
///
/// * [isInfinite], which returns true if either component is equal to
/// positive infinity.
- bool get isFinite => _dx.isFinite && _dy.isFinite;
+ bool/*!*/ get isFinite => _dx.isFinite && _dy.isFinite;
/// Less-than operator. Compares an [Offset] or [Size] to another [Offset] or
/// [Size], and returns true if both the horizontal and vertical values of the
@@ -48,7 +46,7 @@
///
/// This is a partial ordering. It is possible for two values to be neither
/// less, nor greater than, nor equal to, another.
- bool operator <(OffsetBase other) => _dx < other._dx && _dy < other._dy;
+ bool/*!*/ operator <(OffsetBase/*!*/ other) => _dx < other._dx && _dy < other._dy;
/// Less-than-or-equal-to operator. Compares an [Offset] or [Size] to another
/// [Offset] or [Size], and returns true if both the horizontal and vertical
@@ -58,7 +56,7 @@
///
/// This is a partial ordering. It is possible for two values to be neither
/// less, nor greater than, nor equal to, another.
- bool operator <=(OffsetBase other) => _dx <= other._dx && _dy <= other._dy;
+ bool/*!*/ operator <=(OffsetBase/*!*/ other) => _dx <= other._dx && _dy <= other._dy;
/// Greater-than operator. Compares an [Offset] or [Size] to another [Offset]
/// or [Size], and returns true if both the horizontal and vertical values of
@@ -68,7 +66,7 @@
///
/// This is a partial ordering. It is possible for two values to be neither
/// less, nor greater than, nor equal to, another.
- bool operator >(OffsetBase other) => _dx > other._dx && _dy > other._dy;
+ bool/*!*/ operator >(OffsetBase/*!*/ other) => _dx > other._dx && _dy > other._dy;
/// Greater-than-or-equal-to operator. Compares an [Offset] or [Size] to
/// another [Offset] or [Size], and returns true if both the horizontal and
@@ -78,24 +76,24 @@
///
/// This is a partial ordering. It is possible for two values to be neither
/// less, nor greater than, nor equal to, another.
- bool operator >=(OffsetBase other) => _dx >= other._dx && _dy >= other._dy;
+ bool/*!*/ operator >=(OffsetBase/*!*/ other) => _dx >= other._dx && _dy >= other._dy;
/// Equality operator. Compares an [Offset] or [Size] to another [Offset] or
/// [Size], and returns true if the horizontal and vertical values of the
/// left-hand-side operand are equal to the horizontal and vertical values of
/// the right-hand-side operand respectively. Returns false otherwise.
@override
- bool operator ==(dynamic other) {
+ bool/*!*/ operator ==(dynamic other) {
return other is OffsetBase
&& other._dx == _dx
&& other._dy == _dy;
}
@override
- int get hashCode => hashValues(_dx, _dy);
+ int/*!*/ get hashCode => hashValues(_dx, _dy);
@override
- String toString() => 'OffsetBase(${_dx?.toStringAsFixed(1)}, ${_dy?.toStringAsFixed(1)})';
+ String/*!*/ toString() => 'OffsetBase(${_dx.toStringAsFixed(1)}, ${_dy.toStringAsFixed(1)})';
}
/// An immutable 2D floating-point offset.
@@ -122,37 +120,37 @@
class Offset extends OffsetBase {
/// Creates an offset. The first argument sets [dx], the horizontal component,
/// and the second sets [dy], the vertical component.
- const Offset(double dx, double dy) : super(dx, dy);
+ const Offset(double/*!*/ dx, double/*!*/ dy) : super(dx, dy);
/// Creates an offset from its [direction] and [distance].
///
/// The direction is in radians clockwise from the positive x-axis.
///
/// The distance can be omitted, to create a unit vector (distance = 1.0).
- factory Offset.fromDirection(double direction, [ double distance = 1.0 ]) {
+ factory Offset.fromDirection(double/*!*/ direction, [ double/*!*/ distance = 1.0 ]) {
return Offset(distance * math.cos(direction), distance * math.sin(direction));
}
/// The x component of the offset.
///
/// The y component is given by [dy].
- double get dx => _dx;
+ double/*!*/ get dx => _dx;
/// The y component of the offset.
///
/// The x component is given by [dx].
- double get dy => _dy;
+ double/*!*/ get dy => _dy;
/// The magnitude of the offset.
///
/// If you need this value to compare it to another [Offset]'s distance,
/// consider using [distanceSquared] instead, since it is cheaper to compute.
- double get distance => math.sqrt(dx * dx + dy * dy);
+ double/*!*/ get distance => math.sqrt(dx * dx + dy * dy);
/// The square of the magnitude of the offset.
///
/// This is cheaper than computing the [distance] itself.
- double get distanceSquared => dx * dx + dy * dy;
+ double/*!*/ get distanceSquared => dx * dx + dy * dy;
/// The angle of this offset as radians clockwise from the positive x-axis, in
/// the range -[pi] to [pi], assuming positive values of the x-axis go to the
@@ -181,7 +179,7 @@
///
/// * [distance], to compute the magnitude of the vector.
/// * [Canvas.rotate], which uses the same convention for its angle.
- double get direction => math.atan2(dy, dx);
+ double/*!*/ get direction => math.atan2(dy, dx);
/// An offset with zero magnitude.
///
@@ -215,7 +213,7 @@
/// Offset a = const Offset(10.0, 10.0);
/// Offset b = -a; // same as: a.scale(-1.0, -1.0)
/// ```
- Offset scale(double scaleX, double scaleY) => Offset(dx * scaleX, dy * scaleY);
+ Offset/*!*/ scale(double/*!*/ scaleX, double/*!*/ scaleY) => Offset(dx * scaleX, dy * scaleY);
/// Returns a new offset with translateX added to the x component and
/// translateY added to the y component.
@@ -229,7 +227,7 @@
/// Offset c = a + b; // same as: a.translate(b.dx, b.dy)
/// Offset d = a - b; // same as: a.translate(-b.dx, -b.dy)
/// ```
- Offset translate(double translateX, double translateY) => Offset(dx + translateX, dy + translateY);
+ Offset/*!*/ translate(double/*!*/ translateX, double/*!*/ translateY) => Offset(dx + translateX, dy + translateY);
/// Unary negation operator.
///
@@ -237,7 +235,7 @@
///
/// If the [Offset] represents an arrow on a plane, this operator returns the
/// same arrow but pointing in the reverse direction.
- Offset operator -() => Offset(-dx, -dy);
+ Offset/*!*/ operator -() => Offset(-dx, -dy);
/// Binary subtraction operator.
///
@@ -246,7 +244,7 @@
/// left-hand-side operand's [dy] minus the right-hand-side operand's [dy].
///
/// See also [translate].
- Offset operator -(Offset other) => Offset(dx - other.dx, dy - other.dy);
+ Offset/*!*/ operator -(Offset/*!*/ other) => Offset(dx - other.dx, dy - other.dy);
/// Binary addition operator.
///
@@ -255,7 +253,7 @@
/// two operands.
///
/// See also [translate].
- Offset operator +(Offset other) => Offset(dx + other.dx, dy + other.dy);
+ Offset/*!*/ operator +(Offset/*!*/ other) => Offset(dx + other.dx, dy + other.dy);
/// Multiplication operator.
///
@@ -264,7 +262,7 @@
/// right-hand-side operand (a double).
///
/// See also [scale].
- Offset operator *(double operand) => Offset(dx * operand, dy * operand);
+ Offset/*!*/ operator *(double/*!*/ operand) => Offset(dx * operand, dy * operand);
/// Division operator.
///
@@ -273,21 +271,21 @@
/// operand (a double).
///
/// See also [scale].
- Offset operator /(double operand) => Offset(dx / operand, dy / operand);
+ Offset/*!*/ operator /(double/*!*/ operand) => Offset(dx / operand, dy / operand);
/// Integer (truncating) division operator.
///
/// Returns an offset whose coordinates are the coordinates of the
/// left-hand-side operand (an Offset) divided by the scalar right-hand-side
/// operand (a double), rounded towards zero.
- Offset operator ~/(double operand) => Offset((dx ~/ operand).toDouble(), (dy ~/ operand).toDouble());
+ Offset/*!*/ operator ~/(double/*!*/ operand) => Offset((dx ~/ operand).toDouble(), (dy ~/ operand).toDouble());
/// Modulo (remainder) operator.
///
/// Returns an offset whose coordinates are the remainder of dividing the
/// coordinates of the left-hand-side operand (an Offset) by the scalar
/// right-hand-side operand (a double).
- Offset operator %(double operand) => Offset(dx % operand, dy % operand);
+ Offset/*!*/ operator %(double/*!*/ operand) => Offset(dx % operand, dy % operand);
/// Rectangle constructor operator.
///
@@ -299,7 +297,7 @@
/// Rect myRect = Offset.zero & const Size(100.0, 100.0);
/// // same as: Rect.fromLTWH(0.0, 0.0, 100.0, 100.0)
/// ```
- Rect operator &(Size other) => Rect.fromLTWH(dx, dy, other.width, other.height);
+ Rect/*!*/ operator &(Size/*!*/ other) => Rect.fromLTWH(dx, dy, other.width, other.height);
/// Linearly interpolate between two offsets.
///
@@ -316,7 +314,7 @@
///
/// Values for `t` are usually obtained from an [Animation<double>], such as
/// an [AnimationController].
- static Offset lerp(Offset a, Offset b, double t) {
+ static Offset/*!*/ lerp(Offset/*?*/ a, Offset/*?*/ b, double/*!*/ t) {
assert(t != null);
if (a == null && b == null)
return null;
@@ -329,17 +327,17 @@
/// Compares two Offsets for equality.
@override
- bool operator ==(dynamic other) {
+ bool/*!*/ operator ==(dynamic other) {
return other is Offset
&& other.dx == dx
&& other.dy == dy;
}
@override
- int get hashCode => hashValues(dx, dy);
+ int/*!*/ get hashCode => hashValues(dx, dy);
@override
- String toString() => 'Offset(${dx?.toStringAsFixed(1)}, ${dy?.toStringAsFixed(1)})';
+ String/*!*/ toString() => 'Offset(${dx.toStringAsFixed(1)}, ${dy.toStringAsFixed(1)})';
}
/// Holds a 2D floating-point size.
@@ -347,11 +345,11 @@
/// You can think of this as an [Offset] from the origin.
class Size extends OffsetBase {
/// Creates a [Size] with the given [width] and [height].
- const Size(double width, double height) : super(width, height);
+ const Size(double/*!*/ width, double/*!*/ height) : super(width, height);
/// Creates an instance of [Size] that has the same values as another.
// Used by the rendering library's _DebugSize hack.
- Size.copy(Size source) : super(source.width, source.height);
+ Size.copy(Size/*!*/ source) : super(source.width, source.height);
/// Creates a square [Size] whose [width] and [height] are the given dimension.
///
@@ -359,13 +357,13 @@
///
/// * [Size.fromRadius], which is more convenient when the available size
/// is the radius of a circle.
- const Size.square(double dimension) : super(dimension, dimension);
+ const Size.square(double/*!*/ dimension) : super(dimension, dimension);
/// Creates a [Size] with the given [width] and an infinite [height].
- const Size.fromWidth(double width) : super(width, double.infinity);
+ const Size.fromWidth(double/*!*/ width) : super(width, double.infinity);
/// Creates a [Size] with the given [height] and an infinite [width].
- const Size.fromHeight(double height) : super(double.infinity, height);
+ const Size.fromHeight(double/*!*/ height) : super(double.infinity, height);
/// Creates a square [Size] whose [width] and [height] are twice the given
/// dimension.
@@ -375,13 +373,13 @@
/// See also:
///
/// * [Size.square], which creates a square with the given dimension.
- const Size.fromRadius(double radius) : super(radius * 2.0, radius * 2.0);
+ const Size.fromRadius(double/*!*/ radius) : super(radius * 2.0, radius * 2.0);
/// The horizontal extent of this size.
- double get width => _dx;
+ double/*!*/ get width => _dx;
/// The vertical extent of this size.
- double get height => _dy;
+ double/*!*/ get height => _dy;
/// The aspect ratio of this size.
///
@@ -397,7 +395,7 @@
/// ratio.
/// * [FittedBox], a widget that (in most modes) attempts to maintain a
/// child widget's aspect ratio while changing its size.
- double get aspectRatio {
+ double/*!*/ get aspectRatio {
if (height != 0.0)
return width / height;
if (width > 0.0)
@@ -421,7 +419,7 @@
/// Whether this size encloses a non-zero area.
///
/// Negative areas are considered empty.
- bool get isEmpty => width <= 0.0 || height <= 0.0;
+ bool/*!*/ get isEmpty => width <= 0.0 || height <= 0.0;
/// Binary subtraction operator for [Size].
///
@@ -439,7 +437,7 @@
/// right-hand-side operand, and a [height] consisting of the [height] of the
/// left-hand-side operand minus the [Offset.dy] dimension of the
/// right-hand-side operand.
- OffsetBase operator -(OffsetBase other) {
+ OffsetBase/*!*/ operator -(OffsetBase/*!*/ other) {
if (other is Size)
return Offset(width - other.width, height - other.height);
if (other is Offset)
@@ -454,41 +452,41 @@
/// right-hand-side operand, an [Offset], and whose [height] is the sum of the
/// [height] of the left-hand-side operand and the [Offset.dy] dimension of
/// the right-hand-side operand.
- Size operator +(Offset other) => Size(width + other.dx, height + other.dy);
+ Size/*!*/ operator +(Offset/*!*/ other) => Size(width + other.dx, height + other.dy);
/// Multiplication operator.
///
/// Returns a [Size] whose dimensions are the dimensions of the left-hand-side
/// operand (a [Size]) multiplied by the scalar right-hand-side operand (a
/// [double]).
- Size operator *(double operand) => Size(width * operand, height * operand);
+ Size/*!*/ operator *(double/*!*/ operand) => Size(width * operand, height * operand);
/// Division operator.
///
/// Returns a [Size] whose dimensions are the dimensions of the left-hand-side
/// operand (a [Size]) divided by the scalar right-hand-side operand (a
/// [double]).
- Size operator /(double operand) => Size(width / operand, height / operand);
+ Size/*!*/ operator /(double/*!*/ operand) => Size(width / operand, height / operand);
/// Integer (truncating) division operator.
///
/// Returns a [Size] whose dimensions are the dimensions of the left-hand-side
/// operand (a [Size]) divided by the scalar right-hand-side operand (a
/// [double]), rounded towards zero.
- Size operator ~/(double operand) => Size((width ~/ operand).toDouble(), (height ~/ operand).toDouble());
+ Size/*!*/ operator ~/(double/*!*/ operand) => Size((width ~/ operand).toDouble(), (height ~/ operand).toDouble());
/// Modulo (remainder) operator.
///
/// Returns a [Size] whose dimensions are the remainder of dividing the
/// left-hand-side operand (a [Size]) by the scalar right-hand-side operand (a
/// [double]).
- Size operator %(double operand) => Size(width % operand, height % operand);
+ Size/*!*/ operator %(double/*!*/ operand) => Size(width % operand, height % operand);
/// The lesser of the magnitudes of the [width] and the [height].
- double get shortestSide => math.min(width.abs(), height.abs());
+ double/*!*/ get shortestSide => math.min(width.abs(), height.abs());
/// The greater of the magnitudes of the [width] and the [height].
- double get longestSide => math.max(width.abs(), height.abs());
+ double/*!*/ get longestSide => math.max(width.abs(), height.abs());
// Convenience methods that do the equivalent of calling the similarly named
// methods on a Rect constructed from the given origin and this size.
@@ -498,60 +496,60 @@
/// and this [Size].
///
/// See also [Rect.topLeft].
- Offset topLeft(Offset origin) => origin;
+ Offset/*!*/ topLeft(Offset/*!*/ origin) => origin;
/// The offset to the center of the top edge of the rectangle described by the
/// given offset (which is interpreted as the top-left corner) and this size.
///
/// See also [Rect.topCenter].
- Offset topCenter(Offset origin) => Offset(origin.dx + width / 2.0, origin.dy);
+ Offset/*!*/ topCenter(Offset origin) => Offset(origin.dx + width / 2.0, origin.dy);
/// The offset to the intersection of the top and right edges of the rectangle
/// described by the given offset (which is interpreted as the top-left corner)
/// and this size.
///
/// See also [Rect.topRight].
- Offset topRight(Offset origin) => Offset(origin.dx + width, origin.dy);
+ Offset/*!*/ topRight(Offset/*!*/ origin) => Offset(origin.dx + width, origin.dy);
/// The offset to the center of the left edge of the rectangle described by the
/// given offset (which is interpreted as the top-left corner) and this size.
///
/// See also [Rect.centerLeft].
- Offset centerLeft(Offset origin) => Offset(origin.dx, origin.dy + height / 2.0);
+ Offset/*!*/ centerLeft(Offset/*!*/ origin) => Offset(origin.dx, origin.dy + height / 2.0);
/// The offset to the point halfway between the left and right and the top and
/// bottom edges of the rectangle described by the given offset (which is
/// interpreted as the top-left corner) and this size.
///
/// See also [Rect.center].
- Offset center(Offset origin) => Offset(origin.dx + width / 2.0, origin.dy + height / 2.0);
+ Offset/*!*/ center(Offset/*!*/ origin) => Offset(origin.dx + width / 2.0, origin.dy + height / 2.0);
/// The offset to the center of the right edge of the rectangle described by the
/// given offset (which is interpreted as the top-left corner) and this size.
///
/// See also [Rect.centerLeft].
- Offset centerRight(Offset origin) => Offset(origin.dx + width, origin.dy + height / 2.0);
+ Offset/*!*/ centerRight(Offset/*!*/ origin) => Offset(origin.dx + width, origin.dy + height / 2.0);
/// The offset to the intersection of the bottom and left edges of the
/// rectangle described by the given offset (which is interpreted as the
/// top-left corner) and this size.
///
/// See also [Rect.bottomLeft].
- Offset bottomLeft(Offset origin) => Offset(origin.dx, origin.dy + height);
+ Offset/*!*/ bottomLeft(Offset/*!*/ origin) => Offset(origin.dx, origin.dy + height);
/// The offset to the center of the bottom edge of the rectangle described by
/// the given offset (which is interpreted as the top-left corner) and this
/// size.
///
/// See also [Rect.bottomLeft].
- Offset bottomCenter(Offset origin) => Offset(origin.dx + width / 2.0, origin.dy + height);
+ Offset/*!*/ bottomCenter(Offset/*!*/ origin) => Offset(origin.dx + width / 2.0, origin.dy + height);
/// The offset to the intersection of the bottom and right edges of the
/// rectangle described by the given offset (which is interpreted as the
/// top-left corner) and this size.
///
/// See also [Rect.bottomRight].
- Offset bottomRight(Offset origin) => Offset(origin.dx + width, origin.dy + height);
+ Offset/*!*/ bottomRight(Offset/*!*/ origin) => Offset(origin.dx + width, origin.dy + height);
/// Whether the point specified by the given offset (which is assumed to be
/// relative to the top left of the size) lies between the left and right and
@@ -559,12 +557,12 @@
///
/// Rectangles include their top and left edges but exclude their bottom and
/// right edges.
- bool contains(Offset offset) {
+ bool/*!*/ contains(Offset/*!*/ offset) {
return offset.dx >= 0.0 && offset.dx < width && offset.dy >= 0.0 && offset.dy < height;
}
/// A [Size] with the [width] and [height] swapped.
- Size get flipped => Size(height, width);
+ Size/*!*/ get flipped => Size(height, width);
/// Linearly interpolate between two sizes
///
@@ -581,7 +579,7 @@
///
/// Values for `t` are usually obtained from an [Animation<double>], such as
/// an [AnimationController].
- static Size lerp(Size a, Size b, double t) {
+ static Size/*!*/ lerp(Size/*?*/ a, Size/*?*/ b, double/*!*/ t) {
assert(t != null);
if (a == null && b == null)
return null;
@@ -595,17 +593,17 @@
/// Compares two Sizes for equality.
// We don't compare the runtimeType because of _DebugSize in the framework.
@override
- bool operator ==(dynamic other) {
+ bool/*!*/ operator ==(dynamic other) {
return other is Size
&& other._dx == _dx
&& other._dy == _dy;
}
@override
- int get hashCode => hashValues(_dx, _dy);
+ int/*!*/ get hashCode => hashValues(_dx, _dy);
@override
- String toString() => 'Size(${width?.toStringAsFixed(1)}, ${height?.toStringAsFixed(1)})';
+ String/*!*/ toString() => 'Size(${width.toStringAsFixed(1)}, ${height.toStringAsFixed(1)})';
}
/// An immutable, 2D, axis-aligned, floating-point rectangle whose coordinates
@@ -620,27 +618,23 @@
class Rect {
/// Construct a rectangle from its left, top, right, and bottom edges.
@pragma('vm:entry-point')
- const Rect.fromLTRB(double left, double top, double right, double bottom)
- : left = left ?? 0.0,
- right = right ?? 0.0,
- top = top ?? 0.0,
- bottom = bottom ?? 0.0,
- assert(left != null),
- assert(top != null),
- assert(right != null),
- assert(bottom != null);
+ const Rect.fromLTRB(this.left, this.top, this.right, this.bottom)
+ : assert(left != null),
+ assert(top != null),
+ assert(right != null),
+ assert(bottom != null);
/// Construct a rectangle from its left and top edges, its width, and its
/// height.
///
/// To construct a [Rect] from an [Offset] and a [Size], you can use the
/// rectangle constructor operator `&`. See [Offset.&].
- const Rect.fromLTWH(double left, double top, double width, double height) : this.fromLTRB(left, top, left + width, top + height);
+ const Rect.fromLTWH(double/*!*/ left, double/*!*/ top, double/*!*/ width, double/*!*/ height) : this.fromLTRB(left, top, left + width, top + height);
/// Construct a rectangle that bounds the given circle.
///
/// The `center` argument is assumed to be an offset from the origin.
- Rect.fromCircle({ Offset center, double radius }) : this.fromCenter(
+ Rect.fromCircle({ Offset/*!*/ center, double/*!*/ radius }) : this.fromCenter(
center: center,
width: radius * 2,
height: radius * 2,
@@ -649,7 +643,7 @@
/// Constructs a rectangle from its center point, width, and height.
///
/// The `center` argument is assumed to be an offset from the origin.
- Rect.fromCenter({ Offset center, double width, double height }) : this.fromLTRB(
+ Rect.fromCenter({ Offset center/*!*/, double/*!*/ width, double/*!*/ height }) : this.fromLTRB(
center.dx - width / 2,
center.dy - height / 2,
center.dx + width / 2,
@@ -658,39 +652,39 @@
/// Construct the smallest rectangle that encloses the given offsets, treating
/// them as vectors from the origin.
- Rect.fromPoints(Offset a, Offset b) : this.fromLTRB(
+ Rect.fromPoints(Offset/*!*/ a, Offset/*!*/ b) : this.fromLTRB(
math.min(a.dx, b.dx),
math.min(a.dy, b.dy),
math.max(a.dx, b.dx),
math.max(a.dy, b.dy),
);
- Float32List get _value32 => Float32List.fromList(<double>[left, top, right, bottom]);
+ Float32List/*!*/ get _value32 => Float32List.fromList(<double>[left, top, right, bottom]);
/// The offset of the left edge of this rectangle from the x axis.
- final double left;
+ final double/*!*/ left;
/// The offset of the top edge of this rectangle from the y axis.
- final double top;
+ final double/*!*/ top;
/// The offset of the right edge of this rectangle from the x axis.
- final double right;
+ final double/*!*/ right;
/// The offset of the bottom edge of this rectangle from the y axis.
- final double bottom;
+ final double/*!*/ bottom;
/// The distance between the left and right edges of this rectangle.
- double get width => right - left;
+ double/*!*/ get width => right - left;
/// The distance between the top and bottom edges of this rectangle.
- double get height => bottom - top;
+ double/*!*/ get height => bottom - top;
/// The distance between the upper-left corner and the lower-right corner of
/// this rectangle.
- Size get size => Size(width, height);
+ Size/*!*/ get size => Size(width, height);
/// Whether any of the dimensions are `NaN`.
- bool get hasNaN => left.isNaN || top.isNaN || right.isNaN || bottom.isNaN;
+ bool/*!*/ get hasNaN => left.isNaN || top.isNaN || right.isNaN || bottom.isNaN;
/// A rectangle with left, top, right, and bottom edges all at zero.
static const Rect zero = Rect.fromLTRB(0.0, 0.0, 0.0, 0.0);
@@ -705,7 +699,7 @@
/// Whether any of the coordinates of this rectangle are equal to positive infinity.
// included for consistency with Offset and Size
- bool get isInfinite {
+ bool/*!*/ get isInfinite {
return left >= double.infinity
|| top >= double.infinity
|| right >= double.infinity
@@ -713,17 +707,17 @@
}
/// Whether all coordinates of this rectangle are finite.
- bool get isFinite => left.isFinite && top.isFinite && right.isFinite && bottom.isFinite;
+ bool/*!*/ get isFinite => left.isFinite && top.isFinite && right.isFinite && bottom.isFinite;
/// Whether this rectangle encloses a non-zero area. Negative areas are
/// considered empty.
- bool get isEmpty => left >= right || top >= bottom;
+ bool/*!*/ get isEmpty => left >= right || top >= bottom;
/// Returns a new rectangle translated by the given offset.
///
/// To translate a rectangle by separate x and y components rather than by an
/// [Offset], consider [translate].
- Rect shift(Offset offset) {
+ Rect/*!*/ shift(Offset/*!*/ offset) {
return Rect.fromLTRB(left + offset.dx, top + offset.dy, right + offset.dx, bottom + offset.dy);
}
@@ -732,23 +726,23 @@
///
/// To translate a rectangle by an [Offset] rather than by separate x and y
/// components, consider [shift].
- Rect translate(double translateX, double translateY) {
+ Rect/*!*/ translate(double/*!*/ translateX, double/*!*/ translateY) {
return Rect.fromLTRB(left + translateX, top + translateY, right + translateX, bottom + translateY);
}
/// Returns a new rectangle with edges moved outwards by the given delta.
- Rect inflate(double delta) {
+ Rect/*!*/ inflate(double/*!*/ delta) {
return Rect.fromLTRB(left - delta, top - delta, right + delta, bottom + delta);
}
/// Returns a new rectangle with edges moved inwards by the given delta.
- Rect deflate(double delta) => inflate(-delta);
+ Rect/*!*/ deflate(double/*!*/ delta) => inflate(-delta);
/// Returns a new rectangle that is the intersection of the given
/// rectangle and this rectangle. The two rectangles must overlap
/// for this to be meaningful. If the two rectangles do not overlap,
/// then the resulting Rect will have a negative width or height.
- Rect intersect(Rect other) {
+ Rect/*!*/ intersect(Rect/*!*/ other) {
return Rect.fromLTRB(
math.max(left, other.left),
math.max(top, other.top),
@@ -759,7 +753,7 @@
/// Returns a new rectangle which is the bounding box containing this
/// rectangle and the given rectangle.
- Rect expandToInclude(Rect other) {
+ Rect/*!*/ expandToInclude(Rect/*!*/ other) {
return Rect.fromLTRB(
math.min(left, other.left),
math.min(top, other.top),
@@ -769,7 +763,7 @@
}
/// Whether `other` has a nonzero area of overlap with this rectangle.
- bool overlaps(Rect other) {
+ bool/*!*/ overlaps(Rect/*!*/ other) {
if (right <= other.left || other.right <= left)
return false;
if (bottom <= other.top || other.bottom <= top)
@@ -779,57 +773,57 @@
/// The lesser of the magnitudes of the [width] and the [height] of this
/// rectangle.
- double get shortestSide => math.min(width.abs(), height.abs());
+ double/*!*/ get shortestSide => math.min(width.abs(), height.abs());
/// The greater of the magnitudes of the [width] and the [height] of this
/// rectangle.
- double get longestSide => math.max(width.abs(), height.abs());
+ double/*!*/ get longestSide => math.max(width.abs(), height.abs());
/// The offset to the intersection of the top and left edges of this rectangle.
///
/// See also [Size.topLeft].
- Offset get topLeft => Offset(left, top);
+ Offset/*!*/ get topLeft => Offset(left, top);
/// The offset to the center of the top edge of this rectangle.
///
/// See also [Size.topCenter].
- Offset get topCenter => Offset(left + width / 2.0, top);
+ Offset/*!*/ get topCenter => Offset(left + width / 2.0, top);
/// The offset to the intersection of the top and right edges of this rectangle.
///
/// See also [Size.topRight].
- Offset get topRight => Offset(right, top);
+ Offset/*!*/ get topRight => Offset(right, top);
/// The offset to the center of the left edge of this rectangle.
///
/// See also [Size.centerLeft].
- Offset get centerLeft => Offset(left, top + height / 2.0);
+ Offset/*!*/ get centerLeft => Offset(left, top + height / 2.0);
/// The offset to the point halfway between the left and right and the top and
/// bottom edges of this rectangle.
///
/// See also [Size.center].
- Offset get center => Offset(left + width / 2.0, top + height / 2.0);
+ Offset/*!*/ get center => Offset(left + width / 2.0, top + height / 2.0);
/// The offset to the center of the right edge of this rectangle.
///
/// See also [Size.centerLeft].
- Offset get centerRight => Offset(right, top + height / 2.0);
+ Offset/*!*/ get centerRight => Offset(right, top + height / 2.0);
/// The offset to the intersection of the bottom and left edges of this rectangle.
///
/// See also [Size.bottomLeft].
- Offset get bottomLeft => Offset(left, bottom);
+ Offset/*!*/ get bottomLeft => Offset(left, bottom);
/// The offset to the center of the bottom edge of this rectangle.
///
/// See also [Size.bottomLeft].
- Offset get bottomCenter => Offset(left + width / 2.0, bottom);
+ Offset/*!*/ get bottomCenter => Offset(left + width / 2.0, bottom);
/// The offset to the intersection of the bottom and right edges of this rectangle.
///
/// See also [Size.bottomRight].
- Offset get bottomRight => Offset(right, bottom);
+ Offset/*!*/ get bottomRight => Offset(right, bottom);
/// Whether the point specified by the given offset (which is assumed to be
/// relative to the origin) lies between the left and right and the top and
@@ -837,7 +831,7 @@
///
/// Rectangles include their top and left edges but exclude their bottom and
/// right edges.
- bool contains(Offset offset) {
+ bool/*!*/ contains(Offset/*!*/ offset) {
return offset.dx >= left && offset.dx < right && offset.dy >= top && offset.dy < bottom;
}
@@ -856,7 +850,7 @@
///
/// Values for `t` are usually obtained from an [Animation<double>], such as
/// an [AnimationController].
- static Rect lerp(Rect a, Rect b, double t) {
+ static Rect/*!*/ lerp(Rect/*?*/ a, Rect/*?*/ b, double/*!*/ t) {
assert(t != null);
if (a == null && b == null)
return null;
@@ -875,7 +869,7 @@
}
@override
- bool operator ==(dynamic other) {
+ bool/*!*/ operator ==(dynamic other) {
if (identical(this, other))
return true;
if (runtimeType != other.runtimeType)
@@ -888,25 +882,25 @@
}
@override
- int get hashCode => hashValues(left, top, right, bottom);
+ int/*!*/ get hashCode => hashValues(left, top, right, bottom);
@override
- String toString() => 'Rect.fromLTRB(${left.toStringAsFixed(1)}, ${top.toStringAsFixed(1)}, ${right.toStringAsFixed(1)}, ${bottom.toStringAsFixed(1)})';
+ String/*!*/ toString() => 'Rect.fromLTRB(${left.toStringAsFixed(1)}, ${top.toStringAsFixed(1)}, ${right.toStringAsFixed(1)}, ${bottom.toStringAsFixed(1)})';
}
/// A radius for either circular or elliptical shapes.
class Radius {
/// Constructs a circular radius. [x] and [y] will have the same radius value.
- const Radius.circular(double radius) : this.elliptical(radius, radius);
+ const Radius.circular(double/*!*/ radius) : this.elliptical(radius, radius);
/// Constructs an elliptical radius with the given radii.
const Radius.elliptical(this.x, this.y);
/// The radius value on the horizontal axis.
- final double x;
+ final double/*!*/ x;
/// The radius value on the vertical axis.
- final double y;
+ final double/*!*/ y;
/// A radius with [x] and [y] values set to zero.
///
@@ -921,49 +915,49 @@
/// occur as part of expressions. For example, negating a radius of one pixel
/// and then adding the result to another radius is equivalent to subtracting
/// a radius of one pixel from the other.
- Radius operator -() => Radius.elliptical(-x, -y);
+ Radius/*!*/ operator -() => Radius.elliptical(-x, -y);
/// Binary subtraction operator.
///
/// Returns a radius whose [x] value is the left-hand-side operand's [x]
/// minus the right-hand-side operand's [x] and whose [y] value is the
/// left-hand-side operand's [y] minus the right-hand-side operand's [y].
- Radius operator -(Radius other) => Radius.elliptical(x - other.x, y - other.y);
+ Radius/*!*/ operator -(Radius/*!*/ other) => Radius.elliptical(x - other.x, y - other.y);
/// Binary addition operator.
///
/// Returns a radius whose [x] value is the sum of the [x] values of the
/// two operands, and whose [y] value is the sum of the [y] values of the
/// two operands.
- Radius operator +(Radius other) => Radius.elliptical(x + other.x, y + other.y);
+ Radius/*!*/ operator +(Radius/*!*/ other) => Radius.elliptical(x + other.x, y + other.y);
/// Multiplication operator.
///
/// Returns a radius whose coordinates are the coordinates of the
/// left-hand-side operand (a radius) multiplied by the scalar
/// right-hand-side operand (a double).
- Radius operator *(double operand) => Radius.elliptical(x * operand, y * operand);
+ Radius/*!*/ operator *(double/*!*/ operand) => Radius.elliptical(x * operand, y * operand);
/// Division operator.
///
/// Returns a radius whose coordinates are the coordinates of the
/// left-hand-side operand (a radius) divided by the scalar right-hand-side
/// operand (a double).
- Radius operator /(double operand) => Radius.elliptical(x / operand, y / operand);
+ Radius/*!*/ operator /(double/*!*/ operand) => Radius.elliptical(x / operand, y / operand);
/// Integer (truncating) division operator.
///
/// Returns a radius whose coordinates are the coordinates of the
/// left-hand-side operand (a radius) divided by the scalar right-hand-side
/// operand (a double), rounded towards zero.
- Radius operator ~/(double operand) => Radius.elliptical((x ~/ operand).toDouble(), (y ~/ operand).toDouble());
+ Radius/*!*/ operator ~/(double/*!*/ operand) => Radius.elliptical((x ~/ operand).toDouble(), (y ~/ operand).toDouble());
/// Modulo (remainder) operator.
///
/// Returns a radius whose coordinates are the remainder of dividing the
/// coordinates of the left-hand-side operand (a radius) by the scalar
/// right-hand-side operand (a double).
- Radius operator %(double operand) => Radius.elliptical(x % operand, y % operand);
+ Radius/*!*/ operator %(double/*!*/ operand) => Radius.elliptical(x % operand, y % operand);
/// Linearly interpolate between two radii.
///
@@ -980,7 +974,7 @@
///
/// Values for `t` are usually obtained from an [Animation<double>], such as
/// an [AnimationController].
- static Radius lerp(Radius a, Radius b, double t) {
+ static Radius/*!*/ lerp(Radius/*?*/ a, Radius/*?*/ b, double/*!*/ t) {
assert(t != null);
if (a == null && b == null)
return null;
@@ -997,7 +991,7 @@
}
@override
- bool operator ==(dynamic other) {
+ bool/*!*/ operator ==(dynamic other) {
if (identical(this, other))
return true;
if (runtimeType != other.runtimeType)
@@ -1009,10 +1003,10 @@
}
@override
- int get hashCode => hashValues(x, y);
+ int/*!*/ get hashCode => hashValues(x, y);
@override
- String toString() {
+ String/*!*/ toString() {
return x == y ? 'Radius.circular(${x.toStringAsFixed(1)})' :
'Radius.elliptical(${x.toStringAsFixed(1)}, '
'${y.toStringAsFixed(1)})';
@@ -1023,8 +1017,8 @@
class RRect {
/// Construct a rounded rectangle from its left, top, right, and bottom edges,
/// and the same radii along its horizontal axis and its vertical axis.
- const RRect.fromLTRBXY(double left, double top, double right, double bottom,
- double radiusX, double radiusY) : this._raw(
+ const RRect.fromLTRBXY(double/*!*/ left, double/*!*/ top, double/*!*/ right, double/*!*/ bottom,
+ double/*!*/ radiusX, double/*!*/ radiusY) : this._raw(
top: top,
left: left,
right: right,
@@ -1041,8 +1035,8 @@
/// Construct a rounded rectangle from its left, top, right, and bottom edges,
/// and the same radius in each corner.
- RRect.fromLTRBR(double left, double top, double right, double bottom,
- Radius radius)
+ RRect.fromLTRBR(double/*!*/ left, double/*!*/ top, double/*!*/ right, double/*!*/ bottom,
+ Radius/*!*/ radius)
: this._raw(
top: top,
left: left,
@@ -1060,7 +1054,7 @@
/// Construct a rounded rectangle from its bounding box and the same radii
/// along its horizontal axis and its vertical axis.
- RRect.fromRectXY(Rect rect, double radiusX, double radiusY)
+ RRect.fromRectXY(Rect/*!*/ rect, double/*!*/ radiusX, double/*!*/ radiusY)
: this._raw(
top: rect.top,
left: rect.left,
@@ -1078,7 +1072,7 @@
/// Construct a rounded rectangle from its bounding box and a radius that is
/// the same in each corner.
- RRect.fromRectAndRadius(Rect rect, Radius radius)
+ RRect.fromRectAndRadius(Rect/*!*/ rect, Radius/*!*/ radius)
: this._raw(
top: rect.top,
left: rect.left,
@@ -1099,14 +1093,14 @@
///
/// The corner radii default to [Radius.zero], i.e. right-angled corners.
RRect.fromLTRBAndCorners(
- double left,
- double top,
- double right,
- double bottom, {
- Radius topLeft = Radius.zero,
- Radius topRight = Radius.zero,
- Radius bottomRight = Radius.zero,
- Radius bottomLeft = Radius.zero,
+ double/*!*/ left,
+ double/*!*/ top,
+ double/*!*/ right,
+ double/*!*/ bottom, {
+ Radius/*!*/ topLeft = Radius.zero,
+ Radius/*!*/ topRight = Radius.zero,
+ Radius/*!*/ bottomRight = Radius.zero,
+ Radius/*!*/ bottomLeft = Radius.zero,
}) : this._raw(
top: top,
left: left,
@@ -1127,12 +1121,12 @@
///
/// The corner radii default to [Radius.zero], i.e. right-angled corners
RRect.fromRectAndCorners(
- Rect rect,
+ Rect/*!*/ rect,
{
- Radius topLeft = Radius.zero,
- Radius topRight = Radius.zero,
- Radius bottomRight = Radius.zero,
- Radius bottomLeft = Radius.zero
+ Radius/*!*/ topLeft = Radius.zero,
+ Radius/*!*/ topRight = Radius.zero,
+ Radius/*!*/ bottomRight = Radius.zero,
+ Radius/*!*/ bottomLeft = Radius.zero
}
) : this._raw(
top: rect.top,
@@ -1191,58 +1185,58 @@
]);
/// The offset of the left edge of this rectangle from the x axis.
- final double left;
+ final double/*!*/ left;
/// The offset of the top edge of this rectangle from the y axis.
- final double top;
+ final double/*!*/ top;
/// The offset of the right edge of this rectangle from the x axis.
- final double right;
+ final double/*!*/ right;
/// The offset of the bottom edge of this rectangle from the y axis.
- final double bottom;
+ final double/*!*/ bottom;
/// The top-left horizontal radius.
- final double tlRadiusX;
+ final double/*!*/ tlRadiusX;
/// The top-left vertical radius.
- final double tlRadiusY;
+ final double/*!*/ tlRadiusY;
/// The top-left [Radius].
- Radius get tlRadius => Radius.elliptical(tlRadiusX, tlRadiusY);
+ Radius/*!*/ get tlRadius => Radius.elliptical(tlRadiusX, tlRadiusY);
/// The top-right horizontal radius.
- final double trRadiusX;
+ final double/*!*/ trRadiusX;
/// The top-right vertical radius.
- final double trRadiusY;
+ final double/*!*/ trRadiusY;
/// The top-right [Radius].
- Radius get trRadius => Radius.elliptical(trRadiusX, trRadiusY);
+ Radius/*!*/ get trRadius => Radius.elliptical(trRadiusX, trRadiusY);
/// The bottom-right horizontal radius.
- final double brRadiusX;
+ final double/*!*/ brRadiusX;
/// The bottom-right vertical radius.
- final double brRadiusY;
+ final double/*!*/ brRadiusY;
/// The bottom-right [Radius].
- Radius get brRadius => Radius.elliptical(brRadiusX, brRadiusY);
+ Radius/*!*/ get brRadius => Radius.elliptical(brRadiusX, brRadiusY);
/// The bottom-left horizontal radius.
- final double blRadiusX;
+ final double/*!*/ blRadiusX;
/// The bottom-left vertical radius.
- final double blRadiusY;
+ final double/*!*/ blRadiusY;
/// The bottom-left [Radius].
- Radius get blRadius => Radius.elliptical(blRadiusX, blRadiusY);
+ Radius/*!*/ get blRadius => Radius.elliptical(blRadiusX, blRadiusY);
/// A rounded rectangle with all the values set to zero.
static const RRect zero = RRect._raw();
/// Returns a new [RRect] translated by the given offset.
- RRect shift(Offset offset) {
+ RRect/*!*/ shift(Offset/*!*/ offset) {
return RRect._raw(
left: left + offset.dx,
top: top + offset.dy,
@@ -1261,7 +1255,7 @@
/// Returns a new [RRect] with edges and radii moved outwards by the given
/// delta.
- RRect inflate(double delta) {
+ RRect/*!*/ inflate(double/*!*/ delta) {
return RRect._raw(
left: left - delta,
top: top - delta,
@@ -1279,22 +1273,22 @@
}
/// Returns a new [RRect] with edges and radii moved inwards by the given delta.
- RRect deflate(double delta) => inflate(-delta);
+ RRect/*!*/ deflate(double/*!*/ delta) => inflate(-delta);
/// The distance between the left and right edges of this rectangle.
- double get width => right - left;
+ double/*!*/ get width => right - left;
/// The distance between the top and bottom edges of this rectangle.
- double get height => bottom - top;
+ double/*!*/ get height => bottom - top;
/// The bounding box of this rounded rectangle (the rectangle with no rounded corners).
- Rect get outerRect => Rect.fromLTRB(left, top, right, bottom);
+ Rect/*!*/ get outerRect => Rect.fromLTRB(left, top, right, bottom);
/// The non-rounded rectangle that is constrained by the smaller of the two
/// diagonals, with each diagonal traveling through the middle of the curve
/// corners. The middle of a corner is the intersection of the curve with its
/// respective quadrant bisector.
- Rect get safeInnerRect {
+ Rect/*!*/ get safeInnerRect {
const double kInsetFactor = 0.29289321881; // 1-cos(pi/4)
final double leftRadius = math.max(blRadiusX, tlRadiusX);
@@ -1316,7 +1310,7 @@
/// intersection of the [wideMiddleRect] and the [tallMiddleRect]. If any of
/// the intersections are void, the resulting [Rect] will have negative width
/// or height.
- Rect get middleRect {
+ Rect/*!*/ get middleRect {
final double leftRadius = math.max(blRadiusX, tlRadiusX);
final double topRadius = math.max(tlRadiusY, trRadiusY);
final double rightRadius = math.max(trRadiusX, brRadiusX);
@@ -1333,7 +1327,7 @@
/// has the full width of the rounded rectangle. If the rounded rectangle does
/// not have an axis-aligned intersection of its left and right side, the
/// resulting [Rect] will have negative width or height.
- Rect get wideMiddleRect {
+ Rect/*!*/ get wideMiddleRect {
final double topRadius = math.max(tlRadiusY, trRadiusY);
final double bottomRadius = math.max(brRadiusY, blRadiusY);
return Rect.fromLTRB(
@@ -1348,7 +1342,7 @@
/// has the full height of the rounded rectangle. If the rounded rectangle
/// does not have an axis-aligned intersection of its top and bottom side, the
/// resulting [Rect] will have negative width or height.
- Rect get tallMiddleRect {
+ Rect/*!*/ get tallMiddleRect {
final double leftRadius = math.max(blRadiusX, tlRadiusX);
final double rightRadius = math.max(trRadiusX, brRadiusX);
return Rect.fromLTRB(
@@ -1361,14 +1355,14 @@
/// Whether this rounded rectangle encloses a non-zero area.
/// Negative areas are considered empty.
- bool get isEmpty => left >= right || top >= bottom;
+ bool/*!*/ get isEmpty => left >= right || top >= bottom;
/// Whether all coordinates of this rounded rectangle are finite.
- bool get isFinite => left.isFinite && top.isFinite && right.isFinite && bottom.isFinite;
+ bool/*!*/ get isFinite => left.isFinite && top.isFinite && right.isFinite && bottom.isFinite;
/// Whether this rounded rectangle is a simple rectangle with zero
/// corner radii.
- bool get isRect {
+ bool/*!*/ get isRect {
return (tlRadiusX == 0.0 || tlRadiusY == 0.0) &&
(trRadiusX == 0.0 || trRadiusY == 0.0) &&
(blRadiusX == 0.0 || blRadiusY == 0.0) &&
@@ -1376,7 +1370,7 @@
}
/// Whether this rounded rectangle has a side with no straight section.
- bool get isStadium {
+ bool/*!*/ get isStadium {
return tlRadius == trRadius
&& trRadius == brRadius
&& brRadius == blRadius
@@ -1384,7 +1378,7 @@
}
/// Whether this rounded rectangle has no side with a straight section.
- bool get isEllipse {
+ bool/*!*/ get isEllipse {
return tlRadius == trRadius
&& trRadius == brRadius
&& brRadius == blRadius
@@ -1393,24 +1387,24 @@
}
/// Whether this rounded rectangle would draw as a circle.
- bool get isCircle => width == height && isEllipse;
+ bool/*!*/ get isCircle => width == height && isEllipse;
/// The lesser of the magnitudes of the [width] and the [height] of this
/// rounded rectangle.
- double get shortestSide => math.min(width.abs(), height.abs());
+ double/*!*/ get shortestSide => math.min(width.abs(), height.abs());
/// The greater of the magnitudes of the [width] and the [height] of this
/// rounded rectangle.
- double get longestSide => math.max(width.abs(), height.abs());
+ double/*!*/ get longestSide => math.max(width.abs(), height.abs());
/// Whether any of the dimensions are `NaN`.
- bool get hasNaN => left.isNaN || top.isNaN || right.isNaN || bottom.isNaN ||
+ bool/*!*/ get hasNaN => left.isNaN || top.isNaN || right.isNaN || bottom.isNaN ||
trRadiusX.isNaN || trRadiusY.isNaN || tlRadiusX.isNaN || tlRadiusY.isNaN ||
brRadiusX.isNaN || brRadiusY.isNaN || blRadiusX.isNaN || blRadiusY.isNaN;
/// The offset to the point halfway between the left and right and the top and
/// bottom edges of this rectangle.
- Offset get center => Offset(left + width / 2.0, top + height / 2.0);
+ Offset/*!*/ get center => Offset(left + width / 2.0, top + height / 2.0);
// Returns the minimum between min and scale to which radius1 and radius2
// should be scaled with in order not to exceed the limit.
@@ -1430,7 +1424,7 @@
///
/// See the [Skia scaling implementation](https://github.com/google/skia/blob/master/src/core/SkRRect.cpp)
/// for more details.
- RRect scaleRadii() {
+ RRect/*!*/ scaleRadii() {
double scale = 1.0;
scale = _getMin(scale, blRadiusY, tlRadiusY, height);
scale = _getMin(scale, tlRadiusX, trRadiusX, width);
@@ -1477,7 +1471,7 @@
/// radii the first time it is called on a particular [RRect] instance. When
/// using this method, prefer to reuse existing [RRect]s rather than
/// recreating the object each time.
- bool contains(Offset point) {
+ bool/*!*/ contains(Offset/*!*/ point) {
if (point.dx < left || point.dx >= right || point.dy < top || point.dy >= bottom)
return false; // outside bounding box
@@ -1540,7 +1534,7 @@
///
/// Values for `t` are usually obtained from an [Animation<double>], such as
/// an [AnimationController].
- static RRect lerp(RRect a, RRect b, double t) {
+ static RRect/*!*/ lerp(RRect/*?*/ a, RRect/*?*/ b, double/*!*/ t) {
assert(t != null);
if (a == null && b == null)
return null;
@@ -1594,7 +1588,7 @@
}
@override
- bool operator ==(dynamic other) {
+ bool/*!*/ operator ==(dynamic other) {
if (identical(this, other))
return true;
if (runtimeType != other.runtimeType)
@@ -1615,12 +1609,12 @@
}
@override
- int get hashCode => hashValues(left, top, right, bottom,
+ int/*!*/ get hashCode => hashValues(left, top, right, bottom,
tlRadiusX, tlRadiusY, trRadiusX, trRadiusY,
blRadiusX, blRadiusY, brRadiusX, brRadiusY);
@override
- String toString() {
+ String/*!*/ toString() {
final String rect = '${left.toStringAsFixed(1)}, '
'${top.toStringAsFixed(1)}, '
'${right.toStringAsFixed(1)}, '
@@ -1672,7 +1666,7 @@
/// computations of the sine and cosine of the rotation so that they can be
/// reused over multiple calls to this constructor, it may be more efficient
/// to directly use this constructor instead.
- RSTransform(double scos, double ssin, double tx, double ty) {
+ RSTransform(double/*!*/ scos, double/*!*/ ssin, double/*!*/ tx, double/*!*/ ty) {
_value
..[0] = scos
..[1] = ssin
@@ -1700,12 +1694,12 @@
/// over multiple [RSTransform] objects, it may be more efficient to directly
/// use the more direct [new RSTransform] constructor instead.
factory RSTransform.fromComponents({
- double rotation,
- double scale,
- double anchorX,
- double anchorY,
- double translateX,
- double translateY
+ double/*!*/ rotation,
+ double/*!*/ scale,
+ double/*!*/ anchorX,
+ double/*!*/ anchorY,
+ double/*!*/ translateX,
+ double/*!*/ translateY
}) {
final double scos = math.cos(rotation) * scale;
final double ssin = math.sin(rotation) * scale;
@@ -1717,18 +1711,18 @@
final Float32List _value = Float32List(4);
/// The cosine of the rotation multiplied by the scale factor.
- double get scos => _value[0];
+ double/*!*/ get scos => _value[0];
/// The sine of the rotation multiplied by that same scale factor.
- double get ssin => _value[1];
+ double/*!*/ get ssin => _value[1];
/// The x coordinate of the translation, minus [scos] multiplied by the
/// x-coordinate of the rotation point, plus [ssin] multiplied by the
/// y-coordinate of the rotation point.
- double get tx => _value[2];
+ double/*!*/ get tx => _value[2];
/// The y coordinate of the translation, minus [ssin] multiplied by the
/// x-coordinate of the rotation point, minus [scos] multiplied by the
/// y-coordinate of the rotation point.
- double get ty => _value[3];
+ double/*!*/ get ty => _value[3];
}
diff --git a/lib/web_ui/lib/src/ui/geometry.dart b/lib/web_ui/lib/src/ui/geometry.dart
index 93e18e4..a59afcb 100644
--- a/lib/web_ui/lib/src/ui/geometry.dart
+++ b/lib/web_ui/lib/src/ui/geometry.dart
@@ -13,11 +13,12 @@
///
/// The first argument sets the horizontal component, and the second the
/// vertical component.
- const OffsetBase(double dx, double dy)
- : _dx = dx, _dy = dy;
+ const OffsetBase(this._dx, this._dy)
+ : assert(_dx != null),
+ assert(_dy != null);
- final double _dx;
- final double _dy;
+ final double/*!*/ _dx;
+ final double/*!*/ _dy;
/// Returns true if either component is [double.infinity], and false if both
/// are finite (or negative infinity, or NaN).
@@ -28,7 +29,7 @@
/// See also:
///
/// * [isFinite], which is true if both components are finite (and not NaN).
- bool get isInfinite => _dx >= double.infinity || _dy >= double.infinity;
+ bool/*!*/ get isInfinite => _dx >= double.infinity || _dy >= double.infinity;
/// Whether both components are finite (neither infinite nor NaN).
///
@@ -36,7 +37,7 @@
///
/// * [isInfinite], which returns true if either component is equal to
/// positive infinity.
- bool get isFinite => _dx.isFinite && _dy.isFinite;
+ bool/*!*/ get isFinite => _dx.isFinite && _dy.isFinite;
/// Less-than operator. Compares an [Offset] or [Size] to another [Offset] or
/// [Size], and returns true if both the horizontal and vertical values of the
@@ -45,7 +46,7 @@
///
/// This is a partial ordering. It is possible for two values to be neither
/// less, nor greater than, nor equal to, another.
- bool operator <(OffsetBase other) => _dx < other._dx && _dy < other._dy;
+ bool/*!*/ operator <(OffsetBase/*!*/ other) => _dx < other._dx && _dy < other._dy;
/// Less-than-or-equal-to operator. Compares an [Offset] or [Size] to another
/// [Offset] or [Size], and returns true if both the horizontal and vertical
@@ -55,7 +56,7 @@
///
/// This is a partial ordering. It is possible for two values to be neither
/// less, nor greater than, nor equal to, another.
- bool operator <=(OffsetBase other) => _dx <= other._dx && _dy <= other._dy;
+ bool/*!*/ operator <=(OffsetBase/*!*/ other) => _dx <= other._dx && _dy <= other._dy;
/// Greater-than operator. Compares an [Offset] or [Size] to another [Offset]
/// or [Size], and returns true if both the horizontal and vertical values of
@@ -65,7 +66,7 @@
///
/// This is a partial ordering. It is possible for two values to be neither
/// less, nor greater than, nor equal to, another.
- bool operator >(OffsetBase other) => _dx > other._dx && _dy > other._dy;
+ bool/*!*/ operator >(OffsetBase/*!*/ other) => _dx > other._dx && _dy > other._dy;
/// Greater-than-or-equal-to operator. Compares an [Offset] or [Size] to
/// another [Offset] or [Size], and returns true if both the horizontal and
@@ -75,27 +76,24 @@
///
/// This is a partial ordering. It is possible for two values to be neither
/// less, nor greater than, nor equal to, another.
- bool operator >=(OffsetBase other) => _dx > other._dx && _dy >= other._dy;
+ bool/*!*/ operator >=(OffsetBase/*!*/ other) => _dx >= other._dx && _dy >= other._dy;
/// Equality operator. Compares an [Offset] or [Size] to another [Offset] or
/// [Size], and returns true if the horizontal and vertical values of the
/// left-hand-side operand are equal to the horizontal and vertical values of
/// the right-hand-side operand respectively. Returns false otherwise.
@override
- bool operator ==(dynamic other) {
- if (other is! OffsetBase) {
- return false;
- }
- final OffsetBase typedOther = other;
- return _dx == typedOther._dx && _dy == typedOther._dy;
+ bool/*!*/ operator ==(dynamic other) {
+ return other is OffsetBase
+ && other._dx == _dx
+ && other._dy == _dy;
}
@override
- int get hashCode => hashValues(_dx, _dy);
+ int/*!*/ get hashCode => hashValues(_dx, _dy);
@override
- String toString() =>
- '$runtimeType(${_dx?.toStringAsFixed(1)}, ${_dy?.toStringAsFixed(1)})';
+ String/*!*/ toString() => 'OffsetBase(${_dx.toStringAsFixed(1)}, ${_dy.toStringAsFixed(1)})';
}
/// An immutable 2D floating-point offset.
@@ -122,38 +120,37 @@
class Offset extends OffsetBase {
/// Creates an offset. The first argument sets [dx], the horizontal component,
/// and the second sets [dy], the vertical component.
- const Offset(double dx, double dy) : super(dx, dy);
+ const Offset(double/*!*/ dx, double/*!*/ dy) : super(dx, dy);
/// Creates an offset from its [direction] and [distance].
///
/// The direction is in radians clockwise from the positive x-axis.
///
/// The distance can be omitted, to create a unit vector (distance = 1.0).
- factory Offset.fromDirection(double direction, [double distance = 1.0]) {
- return Offset(
- distance * math.cos(direction), distance * math.sin(direction));
+ factory Offset.fromDirection(double/*!*/ direction, [ double/*!*/ distance = 1.0 ]) {
+ return Offset(distance * math.cos(direction), distance * math.sin(direction));
}
/// The x component of the offset.
///
/// The y component is given by [dy].
- double get dx => _dx;
+ double/*!*/ get dx => _dx;
/// The y component of the offset.
///
/// The x component is given by [dx].
- double get dy => _dy;
+ double/*!*/ get dy => _dy;
/// The magnitude of the offset.
///
/// If you need this value to compare it to another [Offset]'s distance,
/// consider using [distanceSquared] instead, since it is cheaper to compute.
- double get distance => math.sqrt(dx * dx + dy * dy);
+ double/*!*/ get distance => math.sqrt(dx * dx + dy * dy);
/// The square of the magnitude of the offset.
///
/// This is cheaper than computing the [distance] itself.
- double get distanceSquared => dx * dx + dy * dy;
+ double/*!*/ get distanceSquared => dx * dx + dy * dy;
/// The angle of this offset as radians clockwise from the positive x-axis, in
/// the range -[pi] to [pi], assuming positive values of the x-axis go to the
@@ -182,7 +179,7 @@
///
/// * [distance], to compute the magnitude of the vector.
/// * [Canvas.rotate], which uses the same convention for its angle.
- double get direction => math.atan2(dy, dx);
+ double/*!*/ get direction => math.atan2(dy, dx);
/// An offset with zero magnitude.
///
@@ -216,8 +213,7 @@
/// Offset a = const Offset(10.0, 10.0);
/// Offset b = -a; // same as: a.scale(-1.0, -1.0)
/// ```
- Offset scale(double scaleX, double scaleY) =>
- Offset(dx * scaleX, dy * scaleY);
+ Offset/*!*/ scale(double/*!*/ scaleX, double/*!*/ scaleY) => Offset(dx * scaleX, dy * scaleY);
/// Returns a new offset with translateX added to the x component and
/// translateY added to the y component.
@@ -231,8 +227,7 @@
/// Offset c = a + b; // same as: a.translate(b.dx, b.dy)
/// Offset d = a - b; // same as: a.translate(-b.dx, -b.dy)
/// ```
- Offset translate(double translateX, double translateY) =>
- Offset(dx + translateX, dy + translateY);
+ Offset/*!*/ translate(double/*!*/ translateX, double/*!*/ translateY) => Offset(dx + translateX, dy + translateY);
/// Unary negation operator.
///
@@ -240,7 +235,7 @@
///
/// If the [Offset] represents an arrow on a plane, this operator returns the
/// same arrow but pointing in the reverse direction.
- Offset operator -() => Offset(-dx, -dy);
+ Offset/*!*/ operator -() => Offset(-dx, -dy);
/// Binary subtraction operator.
///
@@ -249,7 +244,7 @@
/// left-hand-side operand's [dy] minus the right-hand-side operand's [dy].
///
/// See also [translate].
- Offset operator -(Offset other) => Offset(dx - other.dx, dy - other.dy);
+ Offset/*!*/ operator -(Offset/*!*/ other) => Offset(dx - other.dx, dy - other.dy);
/// Binary addition operator.
///
@@ -258,7 +253,7 @@
/// two operands.
///
/// See also [translate].
- Offset operator +(Offset other) => Offset(dx + other.dx, dy + other.dy);
+ Offset/*!*/ operator +(Offset/*!*/ other) => Offset(dx + other.dx, dy + other.dy);
/// Multiplication operator.
///
@@ -267,7 +262,7 @@
/// right-hand-side operand (a double).
///
/// See also [scale].
- Offset operator *(double operand) => Offset(dx * operand, dy * operand);
+ Offset/*!*/ operator *(double/*!*/ operand) => Offset(dx * operand, dy * operand);
/// Division operator.
///
@@ -276,22 +271,21 @@
/// operand (a double).
///
/// See also [scale].
- Offset operator /(double operand) => Offset(dx / operand, dy / operand);
+ Offset/*!*/ operator /(double/*!*/ operand) => Offset(dx / operand, dy / operand);
/// Integer (truncating) division operator.
///
/// Returns an offset whose coordinates are the coordinates of the
/// left-hand-side operand (an Offset) divided by the scalar right-hand-side
/// operand (a double), rounded towards zero.
- Offset operator ~/(double operand) =>
- Offset((dx ~/ operand).toDouble(), (dy ~/ operand).toDouble());
+ Offset/*!*/ operator ~/(double/*!*/ operand) => Offset((dx ~/ operand).toDouble(), (dy ~/ operand).toDouble());
/// Modulo (remainder) operator.
///
/// Returns an offset whose coordinates are the remainder of dividing the
/// coordinates of the left-hand-side operand (an Offset) by the scalar
/// right-hand-side operand (a double).
- Offset operator %(double operand) => Offset(dx % operand, dy % operand);
+ Offset/*!*/ operator %(double/*!*/ operand) => Offset(dx % operand, dy % operand);
/// Rectangle constructor operator.
///
@@ -301,10 +295,9 @@
///
/// ```dart
/// Rect myRect = Offset.zero & const Size(100.0, 100.0);
- /// // same as: new Rect.fromLTWH(0.0, 0.0, 100.0, 100.0)
+ /// // same as: Rect.fromLTWH(0.0, 0.0, 100.0, 100.0)
/// ```
- Rect operator &(Size other) =>
- Rect.fromLTWH(dx, dy, other.width, other.height);
+ Rect/*!*/ operator &(Size/*!*/ other) => Rect.fromLTWH(dx, dy, other.width, other.height);
/// Linearly interpolate between two offsets.
///
@@ -321,36 +314,30 @@
///
/// Values for `t` are usually obtained from an [Animation<double>], such as
/// an [AnimationController].
- static Offset lerp(Offset a, Offset b, double t) {
+ static Offset/*!*/ lerp(Offset/*?*/ a, Offset/*?*/ b, double/*!*/ t) {
assert(t != null);
- if (a == null && b == null) {
+ if (a == null && b == null)
return null;
- }
- if (a == null) {
+ if (a == null)
return b * t;
- }
- if (b == null) {
+ if (b == null)
return a * (1.0 - t);
- }
return Offset(lerpDouble(a.dx, b.dx, t), lerpDouble(a.dy, b.dy, t));
}
/// Compares two Offsets for equality.
@override
- bool operator ==(dynamic other) {
- if (other is! Offset) {
- return false;
- }
- final Offset typedOther = other;
- return dx == typedOther.dx && dy == typedOther.dy;
+ bool/*!*/ operator ==(dynamic other) {
+ return other is Offset
+ && other.dx == dx
+ && other.dy == dy;
}
@override
- int get hashCode => hashValues(dx, dy);
+ int/*!*/ get hashCode => hashValues(dx, dy);
@override
- String toString() =>
- 'Offset(${dx?.toStringAsFixed(1)}, ${dy?.toStringAsFixed(1)})';
+ String/*!*/ toString() => 'Offset(${dx.toStringAsFixed(1)}, ${dy.toStringAsFixed(1)})';
}
/// Holds a 2D floating-point size.
@@ -358,25 +345,25 @@
/// You can think of this as an [Offset] from the origin.
class Size extends OffsetBase {
/// Creates a [Size] with the given [width] and [height].
- const Size(double width, double height) : super(width, height);
+ const Size(double/*!*/ width, double/*!*/ height) : super(width, height);
/// Creates an instance of [Size] that has the same values as another.
// Used by the rendering library's _DebugSize hack.
- Size.copy(Size source) : super(source.width, source.height);
+ Size.copy(Size/*!*/ source) : super(source.width, source.height);
/// Creates a square [Size] whose [width] and [height] are the given dimension.
///
/// See also:
///
- /// * [new Size.fromRadius], which is more convenient when the available size
+ /// * [Size.fromRadius], which is more convenient when the available size
/// is the radius of a circle.
- const Size.square(double dimension) : super(dimension, dimension);
+ const Size.square(double/*!*/ dimension) : super(dimension, dimension);
/// Creates a [Size] with the given [width] and an infinite [height].
- const Size.fromWidth(double width) : super(width, double.infinity);
+ const Size.fromWidth(double/*!*/ width) : super(width, double.infinity);
/// Creates a [Size] with the given [height] and an infinite [width].
- const Size.fromHeight(double height) : super(double.infinity, height);
+ const Size.fromHeight(double/*!*/ height) : super(double.infinity, height);
/// Creates a square [Size] whose [width] and [height] are twice the given
/// dimension.
@@ -385,14 +372,14 @@
///
/// See also:
///
- /// * [new Size.square], which creates a square with the given dimension.
- const Size.fromRadius(double radius) : super(radius * 2.0, radius * 2.0);
+ /// * [Size.square], which creates a square with the given dimension.
+ const Size.fromRadius(double/*!*/ radius) : super(radius * 2.0, radius * 2.0);
/// The horizontal extent of this size.
- double get width => _dx;
+ double/*!*/ get width => _dx;
/// The vertical extent of this size.
- double get height => _dy;
+ double/*!*/ get height => _dy;
/// The aspect ratio of this size.
///
@@ -408,16 +395,13 @@
/// ratio.
/// * [FittedBox], a widget that (in most modes) attempts to maintain a
/// child widget's aspect ratio while changing its size.
- double get aspectRatio {
- if (height != 0.0) {
+ double/*!*/ get aspectRatio {
+ if (height != 0.0)
return width / height;
- }
- if (width > 0.0) {
+ if (width > 0.0)
return double.infinity;
- }
- if (width < 0.0) {
+ if (width < 0.0)
return double.negativeInfinity;
- }
return 0.0;
}
@@ -435,7 +419,7 @@
/// Whether this size encloses a non-zero area.
///
/// Negative areas are considered empty.
- bool get isEmpty => width <= 0.0 || height <= 0.0;
+ bool/*!*/ get isEmpty => width <= 0.0 || height <= 0.0;
/// Binary subtraction operator for [Size].
///
@@ -453,13 +437,11 @@
/// right-hand-side operand, and a [height] consisting of the [height] of the
/// left-hand-side operand minus the [Offset.dy] dimension of the
/// right-hand-side operand.
- OffsetBase operator -(OffsetBase other) {
- if (other is Size) {
+ OffsetBase/*!*/ operator -(OffsetBase/*!*/ other) {
+ if (other is Size)
return Offset(width - other.width, height - other.height);
- }
- if (other is Offset) {
+ if (other is Offset)
return Size(width - other.dx, height - other.dy);
- }
throw ArgumentError(other);
}
@@ -470,42 +452,41 @@
/// right-hand-side operand, an [Offset], and whose [height] is the sum of the
/// [height] of the left-hand-side operand and the [Offset.dy] dimension of
/// the right-hand-side operand.
- Size operator +(Offset other) => Size(width + other.dx, height + other.dy);
+ Size/*!*/ operator +(Offset/*!*/ other) => Size(width + other.dx, height + other.dy);
/// Multiplication operator.
///
/// Returns a [Size] whose dimensions are the dimensions of the left-hand-side
/// operand (a [Size]) multiplied by the scalar right-hand-side operand (a
/// [double]).
- Size operator *(double operand) => Size(width * operand, height * operand);
+ Size/*!*/ operator *(double/*!*/ operand) => Size(width * operand, height * operand);
/// Division operator.
///
/// Returns a [Size] whose dimensions are the dimensions of the left-hand-side
/// operand (a [Size]) divided by the scalar right-hand-side operand (a
/// [double]).
- Size operator /(double operand) => Size(width / operand, height / operand);
+ Size/*!*/ operator /(double/*!*/ operand) => Size(width / operand, height / operand);
/// Integer (truncating) division operator.
///
/// Returns a [Size] whose dimensions are the dimensions of the left-hand-side
/// operand (a [Size]) divided by the scalar right-hand-side operand (a
/// [double]), rounded towards zero.
- Size operator ~/(double operand) =>
- Size((width ~/ operand).toDouble(), (height ~/ operand).toDouble());
+ Size/*!*/ operator ~/(double/*!*/ operand) => Size((width ~/ operand).toDouble(), (height ~/ operand).toDouble());
/// Modulo (remainder) operator.
///
/// Returns a [Size] whose dimensions are the remainder of dividing the
/// left-hand-side operand (a [Size]) by the scalar right-hand-side operand (a
/// [double]).
- Size operator %(double operand) => Size(width % operand, height % operand);
+ Size/*!*/ operator %(double/*!*/ operand) => Size(width % operand, height % operand);
/// The lesser of the magnitudes of the [width] and the [height].
- double get shortestSide => math.min(width.abs(), height.abs());
+ double/*!*/ get shortestSide => math.min(width.abs(), height.abs());
/// The greater of the magnitudes of the [width] and the [height].
- double get longestSide => math.max(width.abs(), height.abs());
+ double/*!*/ get longestSide => math.max(width.abs(), height.abs());
// Convenience methods that do the equivalent of calling the similarly named
// methods on a Rect constructed from the given origin and this size.
@@ -515,65 +496,60 @@
/// and this [Size].
///
/// See also [Rect.topLeft].
- Offset topLeft(Offset origin) => origin;
+ Offset/*!*/ topLeft(Offset/*!*/ origin) => origin;
/// The offset to the center of the top edge of the rectangle described by the
/// given offset (which is interpreted as the top-left corner) and this size.
///
/// See also [Rect.topCenter].
- Offset topCenter(Offset origin) => Offset(origin.dx + width / 2.0, origin.dy);
+ Offset/*!*/ topCenter(Offset origin) => Offset(origin.dx + width / 2.0, origin.dy);
/// The offset to the intersection of the top and right edges of the rectangle
/// described by the given offset (which is interpreted as the top-left corner)
/// and this size.
///
/// See also [Rect.topRight].
- Offset topRight(Offset origin) => Offset(origin.dx + width, origin.dy);
+ Offset/*!*/ topRight(Offset/*!*/ origin) => Offset(origin.dx + width, origin.dy);
/// The offset to the center of the left edge of the rectangle described by the
/// given offset (which is interpreted as the top-left corner) and this size.
///
/// See also [Rect.centerLeft].
- Offset centerLeft(Offset origin) =>
- Offset(origin.dx, origin.dy + height / 2.0);
+ Offset/*!*/ centerLeft(Offset/*!*/ origin) => Offset(origin.dx, origin.dy + height / 2.0);
/// The offset to the point halfway between the left and right and the top and
/// bottom edges of the rectangle described by the given offset (which is
/// interpreted as the top-left corner) and this size.
///
/// See also [Rect.center].
- Offset center(Offset origin) =>
- Offset(origin.dx + width / 2.0, origin.dy + height / 2.0);
+ Offset/*!*/ center(Offset/*!*/ origin) => Offset(origin.dx + width / 2.0, origin.dy + height / 2.0);
/// The offset to the center of the right edge of the rectangle described by the
/// given offset (which is interpreted as the top-left corner) and this size.
///
/// See also [Rect.centerLeft].
- Offset centerRight(Offset origin) =>
- Offset(origin.dx + width, origin.dy + height / 2.0);
+ Offset/*!*/ centerRight(Offset/*!*/ origin) => Offset(origin.dx + width, origin.dy + height / 2.0);
/// The offset to the intersection of the bottom and left edges of the
/// rectangle described by the given offset (which is interpreted as the
/// top-left corner) and this size.
///
/// See also [Rect.bottomLeft].
- Offset bottomLeft(Offset origin) => Offset(origin.dx, origin.dy + height);
+ Offset/*!*/ bottomLeft(Offset/*!*/ origin) => Offset(origin.dx, origin.dy + height);
/// The offset to the center of the bottom edge of the rectangle described by
/// the given offset (which is interpreted as the top-left corner) and this
/// size.
///
/// See also [Rect.bottomLeft].
- Offset bottomCenter(Offset origin) =>
- Offset(origin.dx + width / 2.0, origin.dy + height);
+ Offset/*!*/ bottomCenter(Offset/*!*/ origin) => Offset(origin.dx + width / 2.0, origin.dy + height);
/// The offset to the intersection of the bottom and right edges of the
/// rectangle described by the given offset (which is interpreted as the
/// top-left corner) and this size.
///
/// See also [Rect.bottomRight].
- Offset bottomRight(Offset origin) =>
- Offset(origin.dx + width, origin.dy + height);
+ Offset/*!*/ bottomRight(Offset/*!*/ origin) => Offset(origin.dx + width, origin.dy + height);
/// Whether the point specified by the given offset (which is assumed to be
/// relative to the top left of the size) lies between the left and right and
@@ -581,15 +557,12 @@
///
/// Rectangles include their top and left edges but exclude their bottom and
/// right edges.
- bool contains(Offset offset) {
- return offset.dx >= 0.0 &&
- offset.dx < width &&
- offset.dy >= 0.0 &&
- offset.dy < height;
+ bool/*!*/ contains(Offset/*!*/ offset) {
+ return offset.dx >= 0.0 && offset.dx < width && offset.dy >= 0.0 && offset.dy < height;
}
/// A [Size] with the [width] and [height] swapped.
- Size get flipped => Size(height, width);
+ Size/*!*/ get flipped => Size(height, width);
/// Linearly interpolate between two sizes
///
@@ -606,38 +579,31 @@
///
/// Values for `t` are usually obtained from an [Animation<double>], such as
/// an [AnimationController].
- static Size lerp(Size a, Size b, double t) {
+ static Size/*!*/ lerp(Size/*?*/ a, Size/*?*/ b, double/*!*/ t) {
assert(t != null);
- if (a == null && b == null) {
+ if (a == null && b == null)
return null;
- }
- if (a == null) {
+ if (a == null)
return b * t;
- }
- if (b == null) {
+ if (b == null)
return a * (1.0 - t);
- }
- return Size(
- lerpDouble(a.width, b.width, t), lerpDouble(a.height, b.height, t));
+ return Size(lerpDouble(a.width, b.width, t), lerpDouble(a.height, b.height, t));
}
/// Compares two Sizes for equality.
// We don't compare the runtimeType because of _DebugSize in the framework.
@override
- bool operator ==(dynamic other) {
- if (other is! Size) {
- return false;
- }
- final Size typedOther = other;
- return _dx == typedOther._dx && _dy == typedOther._dy;
+ bool/*!*/ operator ==(dynamic other) {
+ return other is Size
+ && other._dx == _dx
+ && other._dy == _dy;
}
@override
- int get hashCode => hashValues(_dx, _dy);
+ int/*!*/ get hashCode => hashValues(_dx, _dy);
@override
- String toString() =>
- 'Size(${width?.toStringAsFixed(1)}, ${height?.toStringAsFixed(1)})';
+ String/*!*/ toString() => 'Size(${width.toStringAsFixed(1)}, ${height.toStringAsFixed(1)})';
}
/// An immutable, 2D, axis-aligned, floating-point rectangle whose coordinates
@@ -662,64 +628,60 @@
///
/// To construct a [Rect] from an [Offset] and a [Size], you can use the
/// rectangle constructor operator `&`. See [Offset.&].
- const Rect.fromLTWH(double left, double top, double width, double height)
- : this.fromLTRB(left, top, left + width, top + height);
+ const Rect.fromLTWH(double/*!*/ left, double/*!*/ top, double/*!*/ width, double/*!*/ height) : this.fromLTRB(left, top, left + width, top + height);
/// Construct a rectangle that bounds the given circle.
///
/// The `center` argument is assumed to be an offset from the origin.
- Rect.fromCircle({Offset center, double radius})
- : this.fromCenter(
- center: center,
- width: radius * 2,
- height: radius * 2,
- );
+ Rect.fromCircle({ Offset/*!*/ center, double/*!*/ radius }) : this.fromCenter(
+ center: center,
+ width: radius * 2,
+ height: radius * 2,
+ );
/// Constructs a rectangle from its center point, width, and height.
///
/// The `center` argument is assumed to be an offset from the origin.
- Rect.fromCenter({Offset center, double width, double height})
- : this.fromLTRB(
- center.dx - width / 2,
- center.dy - height / 2,
- center.dx + width / 2,
- center.dy + height / 2,
- );
+ Rect.fromCenter({ Offset center/*!*/, double/*!*/ width, double/*!*/ height }) : this.fromLTRB(
+ center.dx - width / 2,
+ center.dy - height / 2,
+ center.dx + width / 2,
+ center.dy + height / 2,
+ );
/// Construct the smallest rectangle that encloses the given offsets, treating
/// them as vectors from the origin.
- Rect.fromPoints(Offset a, Offset b)
- : this.fromLTRB(
- math.min(a.dx, b.dx),
- math.min(a.dy, b.dy),
- math.max(a.dx, b.dx),
- math.max(a.dy, b.dy),
- );
+ Rect.fromPoints(Offset/*!*/ a, Offset/*!*/ b) : this.fromLTRB(
+ math.min(a.dx, b.dx),
+ math.min(a.dy, b.dy),
+ math.max(a.dx, b.dx),
+ math.max(a.dy, b.dy),
+ );
/// The offset of the left edge of this rectangle from the x axis.
- final double left;
+ final double/*!*/ left;
/// The offset of the top edge of this rectangle from the y axis.
- final double top;
+ final double/*!*/ top;
/// The offset of the right edge of this rectangle from the x axis.
- final double right;
+ final double/*!*/ right;
/// The offset of the bottom edge of this rectangle from the y axis.
- final double bottom;
+ final double/*!*/ bottom;
/// The distance between the left and right edges of this rectangle.
- double get width => right - left;
+ double/*!*/ get width => right - left;
/// The distance between the top and bottom edges of this rectangle.
- double get height => bottom - top;
+ double/*!*/ get height => bottom - top;
/// The distance between the upper-left corner and the lower-right corner of
/// this rectangle.
- Size get size => Size(width, height);
+ Size/*!*/ get size => Size(width, height);
/// Whether any of the dimensions are `NaN`.
- bool get hasNaN => left.isNaN || top.isNaN || right.isNaN || bottom.isNaN;
+ bool/*!*/ get hasNaN => left.isNaN || top.isNaN || right.isNaN || bottom.isNaN;
/// A rectangle with left, top, right, and bottom edges all at zero.
static const Rect zero = Rect.fromLTRB(0.0, 0.0, 0.0, 0.0);
@@ -730,33 +692,30 @@
///
/// This covers the space from -1e9,-1e9 to 1e9,1e9.
/// This is the space over which graphics operations are valid.
- static const Rect largest =
- Rect.fromLTRB(-_giantScalar, -_giantScalar, _giantScalar, _giantScalar);
+ static const Rect largest = Rect.fromLTRB(-_giantScalar, -_giantScalar, _giantScalar, _giantScalar);
/// Whether any of the coordinates of this rectangle are equal to positive infinity.
// included for consistency with Offset and Size
- bool get isInfinite {
- return left >= double.infinity ||
- top >= double.infinity ||
- right >= double.infinity ||
- bottom >= double.infinity;
+ bool/*!*/ get isInfinite {
+ return left >= double.infinity
+ || top >= double.infinity
+ || right >= double.infinity
+ || bottom >= double.infinity;
}
/// Whether all coordinates of this rectangle are finite.
- bool get isFinite =>
- left.isFinite && top.isFinite && right.isFinite && bottom.isFinite;
+ bool/*!*/ get isFinite => left.isFinite && top.isFinite && right.isFinite && bottom.isFinite;
/// Whether this rectangle encloses a non-zero area. Negative areas are
/// considered empty.
- bool get isEmpty => left >= right || top >= bottom;
+ bool/*!*/ get isEmpty => left >= right || top >= bottom;
/// Returns a new rectangle translated by the given offset.
///
/// To translate a rectangle by separate x and y components rather than by an
/// [Offset], consider [translate].
- Rect shift(Offset offset) {
- return Rect.fromLTRB(left + offset.dx, top + offset.dy, right + offset.dx,
- bottom + offset.dy);
+ Rect/*!*/ shift(Offset/*!*/ offset) {
+ return Rect.fromLTRB(left + offset.dx, top + offset.dy, right + offset.dx, bottom + offset.dy);
}
/// Returns a new rectangle with translateX added to the x components and
@@ -764,104 +723,104 @@
///
/// To translate a rectangle by an [Offset] rather than by separate x and y
/// components, consider [shift].
- Rect translate(double translateX, double translateY) {
- return Rect.fromLTRB(left + translateX, top + translateY,
- right + translateX, bottom + translateY);
+ Rect/*!*/ translate(double/*!*/ translateX, double/*!*/ translateY) {
+ return Rect.fromLTRB(left + translateX, top + translateY, right + translateX, bottom + translateY);
}
/// Returns a new rectangle with edges moved outwards by the given delta.
- Rect inflate(double delta) {
- return Rect.fromLTRB(
- left - delta, top - delta, right + delta, bottom + delta);
+ Rect/*!*/ inflate(double/*!*/ delta) {
+ return Rect.fromLTRB(left - delta, top - delta, right + delta, bottom + delta);
}
/// Returns a new rectangle with edges moved inwards by the given delta.
- Rect deflate(double delta) => inflate(-delta);
+ Rect/*!*/ deflate(double/*!*/ delta) => inflate(-delta);
/// Returns a new rectangle that is the intersection of the given
/// rectangle and this rectangle. The two rectangles must overlap
/// for this to be meaningful. If the two rectangles do not overlap,
/// then the resulting Rect will have a negative width or height.
- Rect intersect(Rect other) {
- return Rect.fromLTRB(math.max(left, other.left), math.max(top, other.top),
- math.min(right, other.right), math.min(bottom, other.bottom));
+ Rect/*!*/ intersect(Rect/*!*/ other) {
+ return Rect.fromLTRB(
+ math.max(left, other.left),
+ math.max(top, other.top),
+ math.min(right, other.right),
+ math.min(bottom, other.bottom)
+ );
}
/// Returns a new rectangle which is the bounding box containing this
/// rectangle and the given rectangle.
- Rect expandToInclude(Rect other) {
+ Rect/*!*/ expandToInclude(Rect/*!*/ other) {
return Rect.fromLTRB(
- math.min(left, other.left),
- math.min(top, other.top),
- math.max(right, other.right),
- math.max(bottom, other.bottom),
+ math.min(left, other.left),
+ math.min(top, other.top),
+ math.max(right, other.right),
+ math.max(bottom, other.bottom),
);
}
/// Whether `other` has a nonzero area of overlap with this rectangle.
- bool overlaps(Rect other) {
- if (right <= other.left || other.right <= left) {
+ bool/*!*/ overlaps(Rect/*!*/ other) {
+ if (right <= other.left || other.right <= left)
return false;
- }
- if (bottom <= other.top || other.bottom <= top) {
+ if (bottom <= other.top || other.bottom <= top)
return false;
- }
return true;
}
/// The lesser of the magnitudes of the [width] and the [height] of this
/// rectangle.
- double get shortestSide => math.min(width.abs(), height.abs());
+ double/*!*/ get shortestSide => math.min(width.abs(), height.abs());
/// The greater of the magnitudes of the [width] and the [height] of this
/// rectangle.
- double get longestSide => math.max(width.abs(), height.abs());
+ double/*!*/ get longestSide => math.max(width.abs(), height.abs());
/// The offset to the intersection of the top and left edges of this rectangle.
///
/// See also [Size.topLeft].
- Offset get topLeft => Offset(left, top);
+ Offset/*!*/ get topLeft => Offset(left, top);
/// The offset to the center of the top edge of this rectangle.
///
/// See also [Size.topCenter].
- Offset get topCenter => Offset(left + width / 2.0, top);
+ Offset/*!*/ get topCenter => Offset(left + width / 2.0, top);
/// The offset to the intersection of the top and right edges of this rectangle.
///
/// See also [Size.topRight].
- Offset get topRight => Offset(right, top);
+ Offset/*!*/ get topRight => Offset(right, top);
/// The offset to the center of the left edge of this rectangle.
///
/// See also [Size.centerLeft].
- Offset get centerLeft => Offset(left, top + height / 2.0);
+ Offset/*!*/ get centerLeft => Offset(left, top + height / 2.0);
/// The offset to the point halfway between the left and right and the top and
/// bottom edges of this rectangle.
///
/// See also [Size.center].
- Offset get center => Offset(left + width / 2.0, top + height / 2.0);
+ Offset/*!*/ get center => Offset(left + width / 2.0, top + height / 2.0);
/// The offset to the center of the right edge of this rectangle.
///
/// See also [Size.centerLeft].
- Offset get centerRight => Offset(right, top + height / 2.0);
+ Offset/*!*/ get centerRight => Offset(right, top + height / 2.0);
/// The offset to the intersection of the bottom and left edges of this rectangle.
///
/// See also [Size.bottomLeft].
- Offset get bottomLeft => Offset(left, bottom);
+ Offset/*!*/ get bottomLeft => Offset(left, bottom);
/// The offset to the center of the bottom edge of this rectangle.
///
/// See also [Size.bottomLeft].
- Offset get bottomCenter => Offset(left + width / 2.0, bottom);
+ Offset/*!*/ get bottomCenter => Offset(left + width / 2.0, bottom);
/// The offset to the intersection of the bottom and right edges of this rectangle.
///
/// See also [Size.bottomRight].
- Offset get bottomRight => Offset(right, bottom);
+ Offset/*!*/ get bottomRight => Offset(right, bottom);
/// Whether the point specified by the given offset (which is assumed to be
/// relative to the origin) lies between the left and right and the top and
@@ -869,11 +828,8 @@
///
/// Rectangles include their top and left edges but exclude their bottom and
/// right edges.
- bool contains(Offset offset) {
- return offset.dx >= left &&
- offset.dx < right &&
- offset.dy >= top &&
- offset.dy < bottom;
+ bool/*!*/ contains(Offset/*!*/ offset) {
+ return offset.dx >= left && offset.dx < right && offset.dy >= top && offset.dy < bottom;
}
/// Linearly interpolate between two rectangles.
@@ -891,11 +847,10 @@
///
/// Values for `t` are usually obtained from an [Animation<double>], such as
/// an [AnimationController].
- static Rect lerp(Rect a, Rect b, double t) {
+ static Rect/*!*/ lerp(Rect/*?*/ a, Rect/*?*/ b, double/*!*/ t) {
assert(t != null);
- if (a == null && b == null) {
+ if (a == null && b == null)
return null;
- }
if (a == null)
return Rect.fromLTRB(b.left * t, b.top * t, b.right * t, b.bottom * t);
if (b == null) {
@@ -911,41 +866,38 @@
}
@override
- bool operator ==(dynamic other) {
- if (identical(this, other)) {
+ bool/*!*/ operator ==(dynamic other) {
+ if (identical(this, other))
return true;
- }
- if (runtimeType != other.runtimeType) {
+ if (runtimeType != other.runtimeType)
return false;
- }
- final Rect typedOther = other;
- return left == typedOther.left &&
- top == typedOther.top &&
- right == typedOther.right &&
- bottom == typedOther.bottom;
+ return other is Rect
+ && other.left == left
+ && other.top == top
+ && other.right == right
+ && other.bottom == bottom;
}
@override
- int get hashCode => hashValues(left, top, right, bottom);
+ int/*!*/ get hashCode => hashValues(left, top, right, bottom);
@override
- String toString() =>
- 'Rect.fromLTRB(${left.toStringAsFixed(1)}, ${top.toStringAsFixed(1)}, ${right.toStringAsFixed(1)}, ${bottom.toStringAsFixed(1)})';
+ String/*!*/ toString() => 'Rect.fromLTRB(${left.toStringAsFixed(1)}, ${top.toStringAsFixed(1)}, ${right.toStringAsFixed(1)}, ${bottom.toStringAsFixed(1)})';
}
/// A radius for either circular or elliptical shapes.
class Radius {
/// Constructs a circular radius. [x] and [y] will have the same radius value.
- const Radius.circular(double radius) : this.elliptical(radius, radius);
+ const Radius.circular(double/*!*/ radius) : this.elliptical(radius, radius);
/// Constructs an elliptical radius with the given radii.
const Radius.elliptical(this.x, this.y);
/// The radius value on the horizontal axis.
- final double x;
+ final double/*!*/ x;
/// The radius value on the vertical axis.
- final double y;
+ final double/*!*/ y;
/// A radius with [x] and [y] values set to zero.
///
@@ -960,55 +912,49 @@
/// occur as part of expressions. For example, negating a radius of one pixel
/// and then adding the result to another radius is equivalent to subtracting
/// a radius of one pixel from the other.
- Radius operator -() => Radius.elliptical(-x, -y);
+ Radius/*!*/ operator -() => Radius.elliptical(-x, -y);
/// Binary subtraction operator.
///
/// Returns a radius whose [x] value is the left-hand-side operand's [x]
/// minus the right-hand-side operand's [x] and whose [y] value is the
/// left-hand-side operand's [y] minus the right-hand-side operand's [y].
- Radius operator -(Radius other) =>
- Radius.elliptical(x - other.x, y - other.y);
+ Radius/*!*/ operator -(Radius/*!*/ other) => Radius.elliptical(x - other.x, y - other.y);
/// Binary addition operator.
///
/// Returns a radius whose [x] value is the sum of the [x] values of the
/// two operands, and whose [y] value is the sum of the [y] values of the
/// two operands.
- Radius operator +(Radius other) =>
- Radius.elliptical(x + other.x, y + other.y);
+ Radius/*!*/ operator +(Radius/*!*/ other) => Radius.elliptical(x + other.x, y + other.y);
/// Multiplication operator.
///
/// Returns a radius whose coordinates are the coordinates of the
/// left-hand-side operand (a radius) multiplied by the scalar
/// right-hand-side operand (a double).
- Radius operator *(double operand) =>
- Radius.elliptical(x * operand, y * operand);
+ Radius/*!*/ operator *(double/*!*/ operand) => Radius.elliptical(x * operand, y * operand);
/// Division operator.
///
/// Returns a radius whose coordinates are the coordinates of the
/// left-hand-side operand (a radius) divided by the scalar right-hand-side
/// operand (a double).
- Radius operator /(double operand) =>
- Radius.elliptical(x / operand, y / operand);
+ Radius/*!*/ operator /(double/*!*/ operand) => Radius.elliptical(x / operand, y / operand);
/// Integer (truncating) division operator.
///
/// Returns a radius whose coordinates are the coordinates of the
/// left-hand-side operand (a radius) divided by the scalar right-hand-side
/// operand (a double), rounded towards zero.
- Radius operator ~/(double operand) =>
- Radius.elliptical((x ~/ operand).toDouble(), (y ~/ operand).toDouble());
+ Radius/*!*/ operator ~/(double/*!*/ operand) => Radius.elliptical((x ~/ operand).toDouble(), (y ~/ operand).toDouble());
/// Modulo (remainder) operator.
///
/// Returns a radius whose coordinates are the remainder of dividing the
/// coordinates of the left-hand-side operand (a radius) by the scalar
/// right-hand-side operand (a double).
- Radius operator %(double operand) =>
- Radius.elliptical(x % operand, y % operand);
+ Radius/*!*/ operator %(double/*!*/ operand) => Radius.elliptical(x % operand, y % operand);
/// Linearly interpolate between two radii.
///
@@ -1025,14 +971,12 @@
///
/// Values for `t` are usually obtained from an [Animation<double>], such as
/// an [AnimationController].
- static Radius lerp(Radius a, Radius b, double t) {
+ static Radius/*!*/ lerp(Radius/*?*/ a, Radius/*?*/ b, double/*!*/ t) {
assert(t != null);
- if (a == null && b == null) {
+ if (a == null && b == null)
return null;
- }
- if (a == null) {
+ if (a == null)
return Radius.elliptical(b.x * t, b.y * t);
- }
if (b == null) {
final double k = 1.0 - t;
return Radius.elliptical(a.x * k, a.y * k);
@@ -1044,26 +988,25 @@
}
@override
- bool operator ==(dynamic other) {
- if (identical(this, other)) {
+ bool/*!*/ operator ==(dynamic other) {
+ if (identical(this, other))
return true;
- }
- if (runtimeType != other.runtimeType) {
+ if (runtimeType != other.runtimeType)
return false;
- }
- final Radius typedOther = other;
- return typedOther.x == x && typedOther.y == y;
+
+ return other is Radius
+ && other.x == x
+ && other.y == y;
}
@override
- int get hashCode => hashValues(x, y);
+ int/*!*/ get hashCode => hashValues(x, y);
@override
- String toString() {
- return x == y
- ? 'Radius.circular(${x.toStringAsFixed(1)})'
- : 'Radius.elliptical(${x.toStringAsFixed(1)}, '
- '${y.toStringAsFixed(1)})';
+ String/*!*/ toString() {
+ return x == y ? 'Radius.circular(${x.toStringAsFixed(1)})' :
+ 'Radius.elliptical(${x.toStringAsFixed(1)}, '
+ '${y.toStringAsFixed(1)})';
}
}
@@ -1071,95 +1014,94 @@
class RRect {
/// Construct a rounded rectangle from its left, top, right, and bottom edges,
/// and the same radii along its horizontal axis and its vertical axis.
- const RRect.fromLTRBXY(double left, double top, double right, double bottom,
- double radiusX, double radiusY)
- : this._raw(
- top: top,
- left: left,
- right: right,
- bottom: bottom,
- tlRadiusX: radiusX,
- tlRadiusY: radiusY,
- trRadiusX: radiusX,
- trRadiusY: radiusY,
- blRadiusX: radiusX,
- blRadiusY: radiusY,
- brRadiusX: radiusX,
- brRadiusY: radiusY,
- uniformRadii: radiusX == radiusY,
- );
+ const RRect.fromLTRBXY(double/*!*/ left, double/*!*/ top, double/*!*/ right, double/*!*/ bottom,
+ double/*!*/ radiusX, double/*!*/ radiusY) : this._raw(
+ top: top,
+ left: left,
+ right: right,
+ bottom: bottom,
+ tlRadiusX: radiusX,
+ tlRadiusY: radiusY,
+ trRadiusX: radiusX,
+ trRadiusY: radiusY,
+ blRadiusX: radiusX,
+ blRadiusY: radiusY,
+ brRadiusX: radiusX,
+ brRadiusY: radiusY,
+ uniformRadii: radiusX == radiusY,
+ );
/// Construct a rounded rectangle from its left, top, right, and bottom edges,
/// and the same radius in each corner.
- RRect.fromLTRBR(
- double left, double top, double right, double bottom, Radius radius)
- : this._raw(
- top: top,
- left: left,
- right: right,
- bottom: bottom,
- tlRadiusX: radius.x,
- tlRadiusY: radius.y,
- trRadiusX: radius.x,
- trRadiusY: radius.y,
- blRadiusX: radius.x,
- blRadiusY: radius.y,
- brRadiusX: radius.x,
- brRadiusY: radius.y,
- uniformRadii: radius.x == radius.y,
- );
+ RRect.fromLTRBR(double/*!*/ left, double/*!*/ top, double/*!*/ right, double/*!*/ bottom,
+ Radius/*!*/ radius)
+ : this._raw(
+ top: top,
+ left: left,
+ right: right,
+ bottom: bottom,
+ tlRadiusX: radius.x,
+ tlRadiusY: radius.y,
+ trRadiusX: radius.x,
+ trRadiusY: radius.y,
+ blRadiusX: radius.x,
+ blRadiusY: radius.y,
+ brRadiusX: radius.x,
+ brRadiusY: radius.y,
+ uniformRadii: radius.x == radius.y,
+ );
/// Construct a rounded rectangle from its bounding box and the same radii
/// along its horizontal axis and its vertical axis.
- RRect.fromRectXY(Rect rect, double radiusX, double radiusY)
- : this._raw(
- top: rect.top,
- left: rect.left,
- right: rect.right,
- bottom: rect.bottom,
- tlRadiusX: radiusX,
- tlRadiusY: radiusY,
- trRadiusX: radiusX,
- trRadiusY: radiusY,
- blRadiusX: radiusX,
- blRadiusY: radiusY,
- brRadiusX: radiusX,
- brRadiusY: radiusY,
- uniformRadii: radiusX == radiusY,
- );
+ RRect.fromRectXY(Rect/*!*/ rect, double/*!*/ radiusX, double/*!*/ radiusY)
+ : this._raw(
+ top: rect.top,
+ left: rect.left,
+ right: rect.right,
+ bottom: rect.bottom,
+ tlRadiusX: radiusX,
+ tlRadiusY: radiusY,
+ trRadiusX: radiusX,
+ trRadiusY: radiusY,
+ blRadiusX: radiusX,
+ blRadiusY: radiusY,
+ brRadiusX: radiusX,
+ brRadiusY: radiusY,
+ uniformRadii: radiusX == radiusY,
+ );
/// Construct a rounded rectangle from its bounding box and a radius that is
/// the same in each corner.
- RRect.fromRectAndRadius(Rect rect, Radius radius)
- : this._raw(
- top: rect.top,
- left: rect.left,
- right: rect.right,
- bottom: rect.bottom,
- tlRadiusX: radius.x,
- tlRadiusY: radius.y,
- trRadiusX: radius.x,
- trRadiusY: radius.y,
- blRadiusX: radius.x,
- blRadiusY: radius.y,
- brRadiusX: radius.x,
- brRadiusY: radius.y,
- uniformRadii: radius.x == radius.y,
- );
+ RRect.fromRectAndRadius(Rect/*!*/ rect, Radius/*!*/ radius)
+ : this._raw(
+ top: rect.top,
+ left: rect.left,
+ right: rect.right,
+ bottom: rect.bottom,
+ tlRadiusX: radius.x,
+ tlRadiusY: radius.y,
+ trRadiusX: radius.x,
+ trRadiusY: radius.y,
+ blRadiusX: radius.x,
+ blRadiusY: radius.y,
+ brRadiusX: radius.x,
+ brRadiusY: radius.y,
+ uniformRadii: radius.x == radius.y,
+ );
/// Construct a rounded rectangle from its left, top, right, and bottom edges,
/// and topLeft, topRight, bottomRight, and bottomLeft radii.
///
/// The corner radii default to [Radius.zero], i.e. right-angled corners.
RRect.fromLTRBAndCorners(
- double left,
- double top,
- double right,
- double bottom, {
- Radius topLeft = Radius.zero,
- Radius topRight = Radius.zero,
- Radius bottomRight = Radius.zero,
- Radius bottomLeft = Radius.zero,
+ double/*!*/ left,
+ double/*!*/ top,
+ double/*!*/ right,
+ double/*!*/ bottom, {
+ Radius/*!*/ topLeft = Radius.zero,
+ Radius/*!*/ topRight = Radius.zero,
+ Radius/*!*/ bottomRight = Radius.zero,
+ Radius/*!*/ bottomLeft = Radius.zero,
}) : this._raw(
top: top,
left: left,
@@ -1186,12 +1128,15 @@
/// topRight, bottomRight, and bottomLeft radii.
///
/// The corner radii default to [Radius.zero], i.e. right-angled corners
- RRect.fromRectAndCorners(Rect rect,
- {Radius topLeft = Radius.zero,
- Radius topRight = Radius.zero,
- Radius bottomRight = Radius.zero,
- Radius bottomLeft = Radius.zero})
- : this._raw(
+ RRect.fromRectAndCorners(
+ Rect/*!*/ rect,
+ {
+ Radius/*!*/ topLeft = Radius.zero,
+ Radius/*!*/ topRight = Radius.zero,
+ Radius/*!*/ bottomRight = Radius.zero,
+ Radius/*!*/ bottomLeft = Radius.zero
+ }
+ ) : this._raw(
top: rect.top,
left: rect.left,
right: rect.right,
@@ -1242,62 +1187,62 @@
this.webOnlyUniformRadii = uniformRadii;
/// The offset of the left edge of this rectangle from the x axis.
- final double left;
+ final double/*!*/ left;
/// The offset of the top edge of this rectangle from the y axis.
- final double top;
+ final double/*!*/ top;
/// The offset of the right edge of this rectangle from the x axis.
- final double right;
+ final double/*!*/ right;
/// The offset of the bottom edge of this rectangle from the y axis.
- final double bottom;
+ final double/*!*/ bottom;
/// The top-left horizontal radius.
- final double tlRadiusX;
+ final double/*!*/ tlRadiusX;
/// The top-left vertical radius.
- final double tlRadiusY;
+ final double/*!*/ tlRadiusY;
/// The top-left [Radius].
- Radius get tlRadius => Radius.elliptical(tlRadiusX, tlRadiusY);
+ Radius/*!*/ get tlRadius => Radius.elliptical(tlRadiusX, tlRadiusY);
/// The top-right horizontal radius.
- final double trRadiusX;
+ final double/*!*/ trRadiusX;
/// The top-right vertical radius.
- final double trRadiusY;
+ final double/*!*/ trRadiusY;
/// The top-right [Radius].
- Radius get trRadius => Radius.elliptical(trRadiusX, trRadiusY);
+ Radius/*!*/ get trRadius => Radius.elliptical(trRadiusX, trRadiusY);
/// The bottom-right horizontal radius.
- final double brRadiusX;
+ final double/*!*/ brRadiusX;
/// The bottom-right vertical radius.
- final double brRadiusY;
+ final double/*!*/ brRadiusY;
/// The bottom-right [Radius].
- Radius get brRadius => Radius.elliptical(brRadiusX, brRadiusY);
+ Radius/*!*/ get brRadius => Radius.elliptical(brRadiusX, brRadiusY);
/// The bottom-left horizontal radius.
- final double blRadiusX;
+ final double/*!*/ blRadiusX;
/// The bottom-left vertical radius.
- final double blRadiusY;
+ final double/*!*/ blRadiusY;
/// If radii is equal for all corners.
// webOnly
- final bool webOnlyUniformRadii;
+ final bool/*!*/ webOnlyUniformRadii;
/// The bottom-left [Radius].
- Radius get blRadius => Radius.elliptical(blRadiusX, blRadiusY);
+ Radius/*!*/ get blRadius => Radius.elliptical(blRadiusX, blRadiusY);
/// A rounded rectangle with all the values set to zero.
static const RRect zero = RRect._raw();
/// Returns a new [RRect] translated by the given offset.
- RRect shift(Offset offset) {
+ RRect/*!*/ shift(Offset/*!*/ offset) {
return RRect._raw(
left: left + offset.dx,
top: top + offset.dy,
@@ -1316,7 +1261,7 @@
/// Returns a new [RRect] with edges and radii moved outwards by the given
/// delta.
- RRect inflate(double delta) {
+ RRect/*!*/ inflate(double/*!*/ delta) {
return RRect._raw(
left: left - delta,
top: top - delta,
@@ -1334,22 +1279,22 @@
}
/// Returns a new [RRect] with edges and radii moved inwards by the given delta.
- RRect deflate(double delta) => inflate(-delta);
+ RRect/*!*/ deflate(double/*!*/ delta) => inflate(-delta);
/// The distance between the left and right edges of this rectangle.
- double get width => right - left;
+ double/*!*/ get width => right - left;
/// The distance between the top and bottom edges of this rectangle.
- double get height => bottom - top;
+ double/*!*/ get height => bottom - top;
/// The bounding box of this rounded rectangle (the rectangle with no rounded corners).
- Rect get outerRect => Rect.fromLTRB(left, top, right, bottom);
+ Rect/*!*/ get outerRect => Rect.fromLTRB(left, top, right, bottom);
/// The non-rounded rectangle that is constrained by the smaller of the two
/// diagonals, with each diagonal traveling through the middle of the curve
/// corners. The middle of a corner is the intersection of the curve with its
/// respective quadrant bisector.
- Rect get safeInnerRect {
+ Rect/*!*/ get safeInnerRect {
const double kInsetFactor = 0.29289321881; // 1-cos(pi/4)
final double leftRadius = math.max(blRadiusX, tlRadiusX);
@@ -1358,10 +1303,11 @@
final double bottomRadius = math.max(brRadiusY, blRadiusY);
return Rect.fromLTRB(
- left + leftRadius * kInsetFactor,
- top + topRadius * kInsetFactor,
- right - rightRadius * kInsetFactor,
- bottom - bottomRadius * kInsetFactor);
+ left + leftRadius * kInsetFactor,
+ top + topRadius * kInsetFactor,
+ right - rightRadius * kInsetFactor,
+ bottom - bottomRadius * kInsetFactor
+ );
}
/// The rectangle that would be formed using the axis-aligned intersection of
@@ -1370,115 +1316,121 @@
/// intersection of the [wideMiddleRect] and the [tallMiddleRect]. If any of
/// the intersections are void, the resulting [Rect] will have negative width
/// or height.
- Rect get middleRect {
+ Rect/*!*/ get middleRect {
final double leftRadius = math.max(blRadiusX, tlRadiusX);
final double topRadius = math.max(tlRadiusY, trRadiusY);
final double rightRadius = math.max(trRadiusX, brRadiusX);
final double bottomRadius = math.max(brRadiusY, blRadiusY);
- return Rect.fromLTRB(left + leftRadius, top + topRadius,
- right - rightRadius, bottom - bottomRadius);
+ return Rect.fromLTRB(
+ left + leftRadius,
+ top + topRadius,
+ right - rightRadius,
+ bottom - bottomRadius
+ );
}
/// The biggest rectangle that is entirely inside the rounded rectangle and
/// has the full width of the rounded rectangle. If the rounded rectangle does
/// not have an axis-aligned intersection of its left and right side, the
/// resulting [Rect] will have negative width or height.
- Rect get wideMiddleRect {
+ Rect/*!*/ get wideMiddleRect {
final double topRadius = math.max(tlRadiusY, trRadiusY);
final double bottomRadius = math.max(brRadiusY, blRadiusY);
- return Rect.fromLTRB(left, top + topRadius, right, bottom - bottomRadius);
+ return Rect.fromLTRB(
+ left,
+ top + topRadius,
+ right,
+ bottom - bottomRadius
+ );
}
/// The biggest rectangle that is entirely inside the rounded rectangle and
/// has the full height of the rounded rectangle. If the rounded rectangle
/// does not have an axis-aligned intersection of its top and bottom side, the
/// resulting [Rect] will have negative width or height.
- Rect get tallMiddleRect {
+ Rect/*!*/ get tallMiddleRect {
final double leftRadius = math.max(blRadiusX, tlRadiusX);
final double rightRadius = math.max(trRadiusX, brRadiusX);
- return Rect.fromLTRB(left + leftRadius, top, right - rightRadius, bottom);
+ return Rect.fromLTRB(
+ left + leftRadius,
+ top,
+ right - rightRadius,
+ bottom
+ );
}
/// Whether this rounded rectangle encloses a non-zero area.
/// Negative areas are considered empty.
- bool get isEmpty => left >= right || top >= bottom;
+ bool/*!*/ get isEmpty => left >= right || top >= bottom;
/// Whether all coordinates of this rounded rectangle are finite.
- bool get isFinite =>
- left.isFinite && top.isFinite && right.isFinite && bottom.isFinite;
+ bool/*!*/ get isFinite => left.isFinite && top.isFinite && right.isFinite && bottom.isFinite;
/// Whether this rounded rectangle is a simple rectangle with zero
/// corner radii.
- bool get isRect {
+ bool/*!*/ get isRect {
return (tlRadiusX == 0.0 || tlRadiusY == 0.0) &&
- (trRadiusX == 0.0 || trRadiusY == 0.0) &&
- (blRadiusX == 0.0 || blRadiusY == 0.0) &&
- (brRadiusX == 0.0 || brRadiusY == 0.0);
+ (trRadiusX == 0.0 || trRadiusY == 0.0) &&
+ (blRadiusX == 0.0 || blRadiusY == 0.0) &&
+ (brRadiusX == 0.0 || brRadiusY == 0.0);
}
/// Whether this rounded rectangle has a side with no straight section.
- bool get isStadium {
- return tlRadius == trRadius &&
- trRadius == brRadius &&
- brRadius == blRadius &&
- (width <= 2.0 * tlRadiusX || height <= 2.0 * tlRadiusY);
+ bool/*!*/ get isStadium {
+ return tlRadius == trRadius
+ && trRadius == brRadius
+ && brRadius == blRadius
+ && (width <= 2.0 * tlRadiusX || height <= 2.0 * tlRadiusY);
}
/// Whether this rounded rectangle has no side with a straight section.
- bool get isEllipse {
- return tlRadius == trRadius &&
- trRadius == brRadius &&
- brRadius == blRadius &&
- width <= 2.0 * tlRadiusX &&
- height <= 2.0 * tlRadiusY;
+ bool/*!*/ get isEllipse {
+ return tlRadius == trRadius
+ && trRadius == brRadius
+ && brRadius == blRadius
+ && width <= 2.0 * tlRadiusX
+ && height <= 2.0 * tlRadiusY;
}
/// Whether this rounded rectangle would draw as a circle.
- bool get isCircle => width == height && isEllipse;
+ bool/*!*/ get isCircle => width == height && isEllipse;
/// The lesser of the magnitudes of the [width] and the [height] of this
/// rounded rectangle.
- double get shortestSide => math.min(width.abs(), height.abs());
+ double/*!*/ get shortestSide => math.min(width.abs(), height.abs());
/// The greater of the magnitudes of the [width] and the [height] of this
/// rounded rectangle.
- double get longestSide => math.max(width.abs(), height.abs());
+ double/*!*/ get longestSide => math.max(width.abs(), height.abs());
/// Whether any of the dimensions are `NaN`.
- bool get hasNaN =>
- left.isNaN ||
- top.isNaN ||
- right.isNaN ||
- bottom.isNaN ||
- trRadiusX.isNaN ||
- trRadiusY.isNaN ||
- tlRadiusX.isNaN ||
- tlRadiusY.isNaN ||
- brRadiusX.isNaN ||
- brRadiusY.isNaN ||
- blRadiusX.isNaN ||
- blRadiusY.isNaN;
+ bool/*!*/ get hasNaN => left.isNaN || top.isNaN || right.isNaN || bottom.isNaN ||
+ trRadiusX.isNaN || trRadiusY.isNaN || tlRadiusX.isNaN || tlRadiusY.isNaN ||
+ brRadiusX.isNaN || brRadiusY.isNaN || blRadiusX.isNaN || blRadiusY.isNaN;
/// The offset to the point halfway between the left and right and the top and
/// bottom edges of this rectangle.
- Offset get center => Offset(left + width / 2.0, top + height / 2.0);
+ Offset/*!*/ get center => Offset(left + width / 2.0, top + height / 2.0);
// Returns the minimum between min and scale to which radius1 and radius2
// should be scaled with in order not to exceed the limit.
double _getMin(double min, double radius1, double radius2, double limit) {
final double sum = radius1 + radius2;
- if (sum > limit && sum != 0.0) {
+ if (sum > limit && sum != 0.0)
return math.min(min, limit / sum);
- }
return min;
}
- // Scales all radii so that on each side their sum will not pass the size of
- // the width/height.
- //
- // Inspired from:
- // https://github.com/google/skia/blob/master/src/core/SkRRect.cpp#L164
- RRect scaleRadii() {
+ /// Scales all radii so that on each side their sum will not exceed the size
+ /// of the width/height.
+ ///
+ /// Skia already handles RRects with radii that are too large in this way.
+ /// Therefore, this method is only needed for RRect use cases that require
+ /// the appropriately scaled radii values.
+ ///
+ /// See the [Skia scaling implementation](https://github.com/google/skia/blob/master/src/core/SkRRect.cpp)
+ /// for more details.
+ RRect/*!*/ scaleRadii() {
double scale = 1.0;
scale = _getMin(scale, blRadiusY, tlRadiusY, height);
scale = _getMin(scale, tlRadiusX, trRadiusX, width);
@@ -1525,13 +1477,9 @@
/// radii the first time it is called on a particular [RRect] instance. When
/// using this method, prefer to reuse existing [RRect]s rather than
/// recreating the object each time.
- bool contains(Offset point) {
- if (point.dx < left ||
- point.dx >= right ||
- point.dy < top ||
- point.dy >= bottom) {
+ bool/*!*/ contains(Offset/*!*/ point) {
+ if (point.dx < left || point.dx >= right || point.dy < top || point.dy >= bottom)
return false; // outside bounding box
- }
final RRect scaled = scaleRadii();
@@ -1548,19 +1496,19 @@
radiusX = scaled.tlRadiusX;
radiusY = scaled.tlRadiusY;
} else if (point.dx > right - scaled.trRadiusX &&
- point.dy < top + scaled.trRadiusY) {
+ point.dy < top + scaled.trRadiusY) {
x = point.dx - right + scaled.trRadiusX;
y = point.dy - top - scaled.trRadiusY;
radiusX = scaled.trRadiusX;
radiusY = scaled.trRadiusY;
} else if (point.dx > right - scaled.brRadiusX &&
- point.dy > bottom - scaled.brRadiusY) {
+ point.dy > bottom - scaled.brRadiusY) {
x = point.dx - right + scaled.brRadiusX;
y = point.dy - bottom + scaled.brRadiusY;
radiusX = scaled.brRadiusX;
radiusY = scaled.brRadiusY;
} else if (point.dx < left + scaled.blRadiusX &&
- point.dy > bottom - scaled.blRadiusY) {
+ point.dy > bottom - scaled.blRadiusY) {
x = point.dx - left - scaled.blRadiusX;
y = point.dy - bottom + scaled.blRadiusY;
radiusX = scaled.blRadiusX;
@@ -1572,9 +1520,8 @@
x = x / radiusX;
y = y / radiusY;
// check if the point is outside the unit circle
- if (x * x + y * y > 1.0) {
+ if (x * x + y * y > 1.0)
return false;
- }
return true;
}
@@ -1593,11 +1540,10 @@
///
/// Values for `t` are usually obtained from an [Animation<double>], such as
/// an [AnimationController].
- static RRect lerp(RRect a, RRect b, double t) {
+ static RRect/*!*/ lerp(RRect/*?*/ a, RRect/*?*/ b, double/*!*/ t) {
assert(t != null);
- if (a == null && b == null) {
+ if (a == null && b == null)
return null;
- }
if (a == null) {
return RRect._raw(
left: b.left * t,
@@ -1648,50 +1594,51 @@
}
@override
- bool operator ==(dynamic other) {
- if (identical(this, other)) {
+ bool/*!*/ operator ==(dynamic other) {
+ if (identical(this, other))
return true;
- }
- if (runtimeType != other.runtimeType) {
+ if (runtimeType != other.runtimeType)
return false;
- }
- final RRect typedOther = other;
- return left == typedOther.left &&
- top == typedOther.top &&
- right == typedOther.right &&
- bottom == typedOther.bottom &&
- tlRadiusX == typedOther.tlRadiusX &&
- tlRadiusY == typedOther.tlRadiusY &&
- trRadiusX == typedOther.trRadiusX &&
- trRadiusY == typedOther.trRadiusY &&
- blRadiusX == typedOther.blRadiusX &&
- blRadiusY == typedOther.blRadiusY &&
- brRadiusX == typedOther.brRadiusX &&
- brRadiusY == typedOther.brRadiusY;
+ return other is RRect
+ && other.left == left
+ && other.top == top
+ && other.right == right
+ && other.bottom == bottom
+ && other.tlRadiusX == tlRadiusX
+ && other.tlRadiusY == tlRadiusY
+ && other.trRadiusX == trRadiusX
+ && other.trRadiusY == trRadiusY
+ && other.blRadiusX == blRadiusX
+ && other.blRadiusY == blRadiusY
+ && other.brRadiusX == brRadiusX
+ && other.brRadiusY == brRadiusY;
}
@override
- int get hashCode => hashValues(left, top, right, bottom, tlRadiusX, tlRadiusY,
- trRadiusX, trRadiusY, blRadiusX, blRadiusY, brRadiusX, brRadiusY);
+ int/*!*/ get hashCode => hashValues(left, top, right, bottom,
+ tlRadiusX, tlRadiusY, trRadiusX, trRadiusY,
+ blRadiusX, blRadiusY, brRadiusX, brRadiusY);
@override
- String toString() {
+ String/*!*/ toString() {
final String rect = '${left.toStringAsFixed(1)}, '
- '${top.toStringAsFixed(1)}, '
- '${right.toStringAsFixed(1)}, '
- '${bottom.toStringAsFixed(1)}';
- if (tlRadius == trRadius && trRadius == brRadius && brRadius == blRadius) {
+ '${top.toStringAsFixed(1)}, '
+ '${right.toStringAsFixed(1)}, '
+ '${bottom.toStringAsFixed(1)}';
+ if (tlRadius == trRadius &&
+ trRadius == brRadius &&
+ brRadius == blRadius) {
if (tlRadius.x == tlRadius.y)
return 'RRect.fromLTRBR($rect, ${tlRadius.x.toStringAsFixed(1)})';
return 'RRect.fromLTRBXY($rect, ${tlRadius.x.toStringAsFixed(1)}, ${tlRadius.y.toStringAsFixed(1)})';
}
return 'RRect.fromLTRBAndCorners('
- '$rect, '
- 'topLeft: $tlRadius, '
- 'topRight: $trRadius, '
- 'bottomRight: $brRadius, '
- 'bottomLeft: $blRadius'
- ')';
+ '$rect, '
+ 'topLeft: $tlRadius, '
+ 'topRight: $trRadius, '
+ 'bottomRight: $brRadius, '
+ 'bottomLeft: $blRadius'
+ ')';
}
}
@@ -1720,12 +1667,12 @@
/// argument multiplied by the x-coordinate of the rotation point, minus the
/// `scos` argument multiplied by the y-coordinate of the rotation point.
///
- /// The [new RSTransform.fromComponents] method may be a simpler way to
+ /// The [RSTransform.fromComponents] method may be a simpler way to
/// construct these values. However, if there is a way to factor out the
/// computations of the sine and cosine of the rotation so that they can be
/// reused over multiple calls to this constructor, it may be more efficient
/// to directly use this constructor instead.
- RSTransform(double scos, double ssin, double tx, double ty) {
+ RSTransform(double/*!*/ scos, double/*!*/ ssin, double/*!*/ tx, double/*!*/ ty) {
_value
..[0] = scos
..[1] = ssin
@@ -1752,13 +1699,14 @@
/// (which are computed each time this constructor is called) and reuse them
/// over multiple [RSTransform] objects, it may be more efficient to directly
/// use the more direct [new RSTransform] constructor instead.
- factory RSTransform.fromComponents(
- {double rotation,
- double scale,
- double anchorX,
- double anchorY,
- double translateX,
- double translateY}) {
+ factory RSTransform.fromComponents({
+ double/*!*/ rotation,
+ double/*!*/ scale,
+ double/*!*/ anchorX,
+ double/*!*/ anchorY,
+ double/*!*/ translateX,
+ double/*!*/ translateY
+ }) {
final double scos = math.cos(rotation) * scale;
final double ssin = math.sin(rotation) * scale;
final double tx = translateX + -scos * anchorX + ssin * anchorY;
@@ -1769,74 +1717,18 @@
final Float32List _value = Float32List(4);
/// The cosine of the rotation multiplied by the scale factor.
- double get scos => _value[0];
+ double/*!*/ get scos => _value[0];
/// The sine of the rotation multiplied by that same scale factor.
- double get ssin => _value[1];
+ double/*!*/ get ssin => _value[1];
/// The x coordinate of the translation, minus [scos] multiplied by the
/// x-coordinate of the rotation point, plus [ssin] multiplied by the
/// y-coordinate of the rotation point.
- double get tx => _value[2];
+ double/*!*/ get tx => _value[2];
/// The y coordinate of the translation, minus [ssin] multiplied by the
/// x-coordinate of the rotation point, minus [scos] multiplied by the
/// y-coordinate of the rotation point.
- double get ty => _value[3];
-}
-
-/// Holds 2 floating-point coordinates.
-class Point {
- const Point(this.x, this.y);
-
- final double x;
- final double y;
-
- static const Point origin = Point(0.0, 0.0);
-
- Point operator -() => Point(-x, -y);
- Offset operator -(Point other) => Offset(x - other.x, y - other.y);
- Point operator +(Offset other) => Point(x + other.dx, y + other.dy);
- Rect operator &(Size other) => Rect.fromLTWH(x, y, other.width, other.height);
-
- Point operator *(double operand) => Point(x * operand, y * operand);
- Point operator /(double operand) => Point(x / operand, y / operand);
- Point operator ~/(double operand) =>
- Point((x ~/ operand).toDouble(), (y ~/ operand).toDouble());
- Point operator %(double operand) => Point(x % operand, y % operand);
-
- // does the equivalent of "return this - Point.origin"
- Offset toOffset() => Offset(x, y);
-
- /// Linearly interpolate between two points
- ///
- /// If either point is null, this function interpolates from [Point.origin].
- static Point lerp(Point a, Point b, double t) {
- if (a == null && b == null) {
- return null;
- }
- if (a == null) {
- return b * t;
- }
- if (b == null) {
- return a * (1.0 - t);
- }
- return Point(lerpDouble(a.x, b.x, t), lerpDouble(a.y, b.y, t));
- }
-
- @override
- bool operator ==(dynamic other) {
- if (other is! Point) {
- return false;
- }
- final Point typedOther = other;
- return x == typedOther.x && y == typedOther.y;
- }
-
- @override
- int get hashCode => hashValues(x, y);
-
- @override
- String toString() =>
- 'Point(${x?.toStringAsFixed(1)}, ${y?.toStringAsFixed(1)})';
+ double/*!*/ get ty => _value[3];
}