// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. // @dart = 2.9 part of base; /** * A utility class for representing two-dimensional sizes. */ class Size { num width; num height; Size(num this.width, num this.height) {} bool operator ==(covariant Size other) { return other != null && width == other.width && height == other.height; } int get hashCode => throw new UnimplementedError(); /** * Returns the area of the size (width * height). */ num area() { return width * height; } /** * Returns the ratio of the size's width to its height. */ num aspectRatio() { return width / height; } /** * Clamps the width and height parameters upward to integer values. * Returns this size with ceil'd components. */ Size ceil() { width = width.ceil(); height = height.ceil(); return this; } /** * Returns a new copy of the Size. */ Size clone() { return new Size(width, height); } /** * Returns true if this Size is the same size or smaller than the * [target] size in both dimensions. */ bool fitsInside(Size target) { return width <= target.width && height <= target.height; } /** * Clamps the width and height parameters downward to integer values. * Returns this size with floored components. */ Size floor() { width = width.floor(); height = height.floor(); return this; } /** * Returns the longer of the two dimensions in the size. */ num getLongest() { return max(width, height); } /** * Returns the shorter of the two dimensions in the size. */ num getShortest() { return min(width, height); } /** * Returns true if the size has zero area, false if both dimensions * are non-zero numbers. */ bool get isEmpty { return area() == 0; } /** * Returns the perimeter of the size (width + height) * 2. */ num perimeter() { return (width + height) * 2; } /** * Rounds the width and height parameters to integer values. * Returns this size with rounded components. */ Size round() { width = width.round(); height = height.round(); return this; } /** * Scales the size uniformly by a factor. * [s] The scale factor. * Returns this Size object after scaling. */ Size scale(num s) { width *= s; height *= s; return this; } /** * Uniformly scales the size to fit inside the dimensions of a given size. The * original aspect ratio will be preserved. * * This function assumes that both Sizes contain strictly positive dimensions. * Returns this Size object, after optional scaling. */ Size scaleToFit(Size target) { num s = aspectRatio() > target.aspectRatio() ? target.width / width : target.height / height; return scale(s); } /** * Returns a nice string representing size. * Returns in the form (50 x 73). */ String toString() { return "(${width} x ${height})"; } }