Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(34)

Side by Side Diff: client/base/Size.dart

Issue 9382027: Move client/{base, observable, layout, touch, util, view} to samples/ui_lib . (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: '' Created 8 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « client/base/Env.dart ('k') | client/base/base.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file.
4
5 /**
6 * A utility class for representing two-dimensional sizes.
7 */
8 class Size {
9 num width;
10 num height;
11
12 Size(num this.width, num this.height) {
13 }
14
15 bool operator ==(Size other) {
16 return other !== null && width == other.width && height == other.height;
17 }
18
19 /**
20 * Returns the area of the size (width * height).
21 */
22 num area() {
23 return width * height;
24 }
25
26 /**
27 * Returns the ratio of the size's width to its height.
28 */
29 num aspectRatio() {
30 return width / height;
31 }
32
33 /**
34 * Clamps the width and height parameters upward to integer values.
35 * Returns this size with ceil'd components.
36 */
37 Size ceil() {
38 width = width.ceil();
39 height = height.ceil();
40 return this;
41 }
42
43 /**
44 * Returns a new copy of the Size.
45 */
46 Size clone() {
47 return new Size(width, height);
48 }
49
50 /**
51 * Returns true if this Size is the same size or smaller than the
52 * [target] size in both dimensions.
53 */
54 bool fitsInside(Size target) {
55 return width <= target.width && height <= target.height;
56 }
57
58 /**
59 * Clamps the width and height parameters downward to integer values.
60 * Returns this size with floored components.
61 */
62 Size floor() {
63 width = width.floor();
64 height = height.floor();
65 return this;
66 }
67
68 /**
69 * Returns the longer of the two dimensions in the size.
70 */
71 num getLongest() {
72 return Math.max(width, height);
73 }
74
75 /**
76 * Returns the shorter of the two dimensions in the size.
77 */
78 num getShortest() {
79 return Math.min(width, height);
80 }
81
82 /**
83 * Returns true if the size has zero area, false if both dimensions
84 * are non-zero numbers.
85 */
86 bool isEmpty() {
87 return area() == 0;
88 }
89
90 /**
91 * Returns the perimeter of the size (width + height) * 2.
92 */
93 num perimeter() {
94 return (width + height) * 2;
95 }
96
97 /**
98 * Rounds the width and height parameters to integer values.
99 * Returns this size with rounded components.
100 */
101 Size round() {
102 width = width.round();
103 height = height.round();
104 return this;
105 }
106
107 /**
108 * Scales the size uniformly by a factor.
109 * [s] The scale factor.
110 * Returns this Size object after scaling.
111 */
112 Size scale(num s) {
113 width *= s;
114 height *= s;
115 return this;
116 }
117
118 /**
119 * Uniformly scales the size to fit inside the dimensions of a given size. The
120 * original aspect ratio will be preserved.
121 *
122 * This function assumes that both Sizes contain strictly positive dimensions.
123 * Returns this Size object, after optional scaling.
124 */
125 Size scaleToFit(Size target) {
126 num s = aspectRatio() > target.aspectRatio() ?
127 target.width / width : target.height / height;
128 return scale(s);
129 }
130
131 /**
132 * Returns a nice string representing size.
133 * Returns in the form (50 x 73).
134 */
135 String toString() {
136 return "(${width} x ${height})";
137 }
138 }
OLDNEW
« no previous file with comments | « client/base/Env.dart ('k') | client/base/base.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698