blob: df781f890c1ab1e6382c7b34b3358c82785c6209 [file] [log] [blame]
Cary Clarkbc5697d2017-10-04 14:31:33 -04001#Topic Rect
2#Alias Rects
3#Alias Rect_Reference
4
Cary Clark08895c42018-02-01 09:37:32 -05005#Subtopic Overview
Cary Clark4855f782018-02-06 09:41:53 -05006 #Subtopic Subtopic
Cary Clark08895c42018-02-01 09:37:32 -05007 #Populate
8 ##
Cary Clark2dc84ad2018-01-26 12:56:22 -05009##
10
Cary Clarkbc5697d2017-10-04 14:31:33 -040011#Struct SkRect
12
Cary Clark7fc1d122017-10-09 14:07:42 -040013SkRect holds four SkScalar coordinates describing the upper and
14lower bounds of a rectangle. SkRect may be created from outer bounds or
15from position, width, and height. SkRect describes an area; if its right
16is less than or equal to its left, or if its bottom is less than or equal to
17its top, it is considered empty.
18
19# move to topic about MakeIWH and friends
20SkRect can be constructed from int values to avoid compiler warnings that
21integer input cannot convert to SkScalar without loss of precision.
22
Cary Clark4855f782018-02-06 09:41:53 -050023#Subtopic Related_Function
Cary Clark08895c42018-02-01 09:37:32 -050024#Populate
Cary Clarkbc5697d2017-10-04 14:31:33 -040025#Subtopic ##
26
Cary Clark4855f782018-02-06 09:41:53 -050027#Subtopic Member_Function
Cary Clark08895c42018-02-01 09:37:32 -050028#Populate
29##
Cary Clarkbc5697d2017-10-04 14:31:33 -040030
Cary Clark4855f782018-02-06 09:41:53 -050031#Subtopic Member
Cary Clark08895c42018-02-01 09:37:32 -050032#Populate
Cary Clarkbc5697d2017-10-04 14:31:33 -040033
34#Member SkScalar fLeft
Cary Clark08895c42018-02-01 09:37:32 -050035#Line # smaller x-axis bounds ##
Cary Clark7fc1d122017-10-09 14:07:42 -040036May contain any value, including infinities and NaN. The smaller of the
37horizontal values when sorted. When equal to or greater than fRight, Rect is empty.
Cary Clarkbc5697d2017-10-04 14:31:33 -040038##
39
40#Member SkScalar fTop
Cary Clark08895c42018-02-01 09:37:32 -050041#Line # smaller y-axis bounds ##
Cary Clark7fc1d122017-10-09 14:07:42 -040042May contain any value, including infinities and NaN. The smaller of the
43vertical values when sorted. When equal to or greater than fBottom, Rect is empty.
Cary Clarkbc5697d2017-10-04 14:31:33 -040044##
45
46#Member SkScalar fRight
Cary Clark08895c42018-02-01 09:37:32 -050047#Line # larger x-axis bounds ##
Cary Clark7fc1d122017-10-09 14:07:42 -040048May contain any value, including infinities and NaN. The larger of the
49horizontal values when sorted. When equal to or less than fLeft, Rect is empty.
Cary Clarkbc5697d2017-10-04 14:31:33 -040050##
51
52#Member SkScalar fBottom
Cary Clark08895c42018-02-01 09:37:32 -050053#Line # larger y-axis bounds ##
Cary Clark7fc1d122017-10-09 14:07:42 -040054May contain any value, including infinities and NaN. The larger of the
55vertical values when sorted. When equal to or less than fTop, Rect is empty.
Cary Clarkbc5697d2017-10-04 14:31:33 -040056##
57
Cary Clark4855f782018-02-06 09:41:53 -050058#Subtopic Member ##
Cary Clark2dc84ad2018-01-26 12:56:22 -050059
Cary Clark4855f782018-02-06 09:41:53 -050060#Subtopic Constructor
61#Populate
Cary Clark2dc84ad2018-01-26 12:56:22 -050062
Cary Clarkbc5697d2017-10-04 14:31:33 -040063# ------------------------------------------------------------------------------
64
65#Method static constexpr SkRect SK_WARN_UNUSED_RESULT MakeEmpty()
66
Cary Clark4855f782018-02-06 09:41:53 -050067#In Constructor
Cary Clarkab2621d2018-01-30 10:08:57 -050068#Line # constructs from bounds of (0, 0, 0, 0) ##
Cary Clark7fc1d122017-10-09 14:07:42 -040069Returns constructed Rect set to (0, 0, 0, 0).
70Many other rectangles are empty; if left is equal to or greater than right,
71or if top is equal to or greater than bottom. Setting all members to zero
72is a convenience, but does not designate a special empty rectangle.
73
74#Return bounds (0, 0, 0, 0) ##
Cary Clarkbc5697d2017-10-04 14:31:33 -040075
76#Example
Cary Clark154beea2017-10-26 07:58:48 -040077 SkRect rect = SkRect::MakeEmpty();
78 SkDebugf("MakeEmpty isEmpty: %s\n", rect.isEmpty() ? "true" : "false");
79 rect.offset(10, 10);
80 SkDebugf("offset rect isEmpty: %s\n", rect.isEmpty() ? "true" : "false");
81 rect.inset(10, 10);
82 SkDebugf("inset rect isEmpty: %s\n", rect.isEmpty() ? "true" : "false");
83 rect.outset(20, 20);
84 SkDebugf("outset rect isEmpty: %s\n", rect.isEmpty() ? "true" : "false");
85#StdOut
86MakeEmpty isEmpty: true
87offset rect isEmpty: true
88inset rect isEmpty: true
89outset rect isEmpty: false
90##
Cary Clarkbc5697d2017-10-04 14:31:33 -040091##
92
Mike Reed274218e2018-01-08 15:05:02 -050093#SeeAlso isEmpty setEmpty SkIRect::MakeEmpty
Cary Clark884dd7d2017-10-11 10:37:52 -040094
95##
96
97# ------------------------------------------------------------------------------
98
99#Method static constexpr SkRect SK_WARN_UNUSED_RESULT MakeWH(SkScalar w, SkScalar h)
Cary Clarkbc5697d2017-10-04 14:31:33 -0400100
Cary Clark4855f782018-02-06 09:41:53 -0500101#In Constructor
Cary Clarkab2621d2018-01-30 10:08:57 -0500102#Line # constructs from SkScalar input returning (0, 0, width, height) ##
Cary Clark7fc1d122017-10-09 14:07:42 -0400103Returns constructed Rect set to SkScalar values (0, 0, w, h). Does not
104validate input; w or h may be negative.
Cary Clarkbc5697d2017-10-04 14:31:33 -0400105
Cary Clark7fc1d122017-10-09 14:07:42 -0400106Passing integer values may generate a compiler warning since Rect cannot
107represent 32-bit integers exactly. Use SkIRect for an exact integer rectangle.
108
109#Param w SkScalar width of constructed Rect ##
110#Param h SkScalar height of constructed Rect ##
111
112#Return bounds (0, 0, w, h) ##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400113
114#Example
Cary Clark154beea2017-10-26 07:58:48 -0400115 SkRect rect1 = SkRect::MakeWH(25, 35);
116 SkRect rect2 = SkRect::MakeIWH(25, 35);
117 SkRect rect3 = SkRect::MakeXYWH(0, 0, 25, 35);
118 SkRect rect4 = SkRect::MakeLTRB(0, 0, 25, 35);
119 SkDebugf("all %s" "equal\n", rect1 == rect2 && rect2 == rect3 && rect3 == rect4 ?
Cary Clark7fc1d122017-10-09 14:07:42 -0400120 "" : "not ");
121#StdOut
122all equal
123##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400124##
125
Cary Clark7fc1d122017-10-09 14:07:42 -0400126#SeeAlso MakeSize MakeXYWH MakeIWH setWH SkIRect::MakeWH
Cary Clarkbc5697d2017-10-04 14:31:33 -0400127
128##
129
130# ------------------------------------------------------------------------------
131
132#Method static SkRect SK_WARN_UNUSED_RESULT MakeIWH(int w, int h)
133
Cary Clark4855f782018-02-06 09:41:53 -0500134#In Constructor
Cary Clarkab2621d2018-01-30 10:08:57 -0500135#Line # constructs from int input returning (0, 0, width, height) ##
Cary Clark7fc1d122017-10-09 14:07:42 -0400136Returns constructed Rect set to integer values (0, 0, w, h). Does not validate
137input; w or h may be negative.
Cary Clarkbc5697d2017-10-04 14:31:33 -0400138
Cary Clark7fc1d122017-10-09 14:07:42 -0400139Use to avoid a compiler warning that input may lose precision when stored.
140Use SkIRect for an exact integer rectangle.
141
142#Param w integer width of constructed Rect ##
143#Param h integer height of constructed Rect ##
144
145#Return bounds (0, 0, w, h) ##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400146
147#Example
Cary Clark154beea2017-10-26 07:58:48 -0400148 SkIRect i_rect = SkIRect::MakeWH(25, 35);
149 SkRect f_rect = SkRect::MakeIWH(25, 35);
150 SkDebugf("i_rect width: %d f_rect width:%g\n", i_rect.width(), f_rect.width());
151 i_rect = SkIRect::MakeWH(125000111, 0);
152 f_rect = SkRect::MakeIWH(125000111, 0);
153 SkDebugf("i_rect width: %d f_rect width:%.0f\n", i_rect.width(), f_rect.width());
Cary Clark7fc1d122017-10-09 14:07:42 -0400154#StdOut
Cary Clark154beea2017-10-26 07:58:48 -0400155i_rect width: 25 f_rect width:25
Cary Clark7fc1d122017-10-09 14:07:42 -0400156i_rect width: 125000111 f_rect width:125000112
157##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400158##
159
Cary Clark7fc1d122017-10-09 14:07:42 -0400160#SeeAlso MakeXYWH MakeWH isetWH SkIRect::MakeWH
Cary Clarkbc5697d2017-10-04 14:31:33 -0400161
162##
163
164# ------------------------------------------------------------------------------
165
Cary Clark884dd7d2017-10-11 10:37:52 -0400166#Method static constexpr SkRect SK_WARN_UNUSED_RESULT MakeSize(const SkSize& size)
Cary Clarkbc5697d2017-10-04 14:31:33 -0400167
Cary Clark4855f782018-02-06 09:41:53 -0500168#In Constructor
Cary Clarkab2621d2018-01-30 10:08:57 -0500169#Line # constructs from Size returning (0, 0, width, height) ##
Cary Clark7fc1d122017-10-09 14:07:42 -0400170Returns constructed Rect set to (0, 0, size.width(), size.height()). Does not
171validate input; size.width() or size.height() may be negative.
Cary Clarkbc5697d2017-10-04 14:31:33 -0400172
Cary Clark7fc1d122017-10-09 14:07:42 -0400173#Param size SkScalar values for Rect width and height ##
174
175#Return bounds (0, 0, size.width(), size.height()) ##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400176
177#Example
Cary Clark154beea2017-10-26 07:58:48 -0400178 SkSize size = {25.5f, 35.5f};
179 SkRect rect = SkRect::MakeSize(size);
180 SkDebugf("rect width: %g height: %g\n", rect.width(), rect.height());
181 SkISize floor = size.toFloor();
182 rect = SkRect::MakeSize(SkSize::Make(floor));
183 SkDebugf("floor width: %g height: %g\n", rect.width(), rect.height());
Cary Clark7fc1d122017-10-09 14:07:42 -0400184#StdOut
Cary Clark154beea2017-10-26 07:58:48 -0400185rect width: 25.5 height: 35.5
Cary Clark7fc1d122017-10-09 14:07:42 -0400186floor width: 25 height: 35
187##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400188##
189
Cary Clark7fc1d122017-10-09 14:07:42 -0400190#SeeAlso MakeWH MakeXYWH MakeIWH setWH SkIRect::MakeWH
Cary Clarkbc5697d2017-10-04 14:31:33 -0400191
192##
193
194# ------------------------------------------------------------------------------
195
196#Method static constexpr SkRect SK_WARN_UNUSED_RESULT MakeLTRB(SkScalar l, SkScalar t, SkScalar r,
197 SkScalar b)
Cary Clark4855f782018-02-06 09:41:53 -0500198#In Constructor
Cary Clarkab2621d2018-01-30 10:08:57 -0500199#Line # constructs from SkScalar left, top, right, bottom ##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400200
Cary Clark7fc1d122017-10-09 14:07:42 -0400201Returns constructed Rect set to (l, t, r, b). Does not sort input; Rect may
202result in fLeft greater than fRight, or fTop greater than fBottom.
Cary Clarkbc5697d2017-10-04 14:31:33 -0400203
Cary Clark7fc1d122017-10-09 14:07:42 -0400204#Param l SkScalar stored in fLeft ##
205#Param t SkScalar stored in fTop ##
206#Param r SkScalar stored in fRight ##
207#Param b SkScalar stored in fBottom ##
208
209#Return bounds (l, t, r, b) ##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400210
211#Example
Cary Clark154beea2017-10-26 07:58:48 -0400212 SkRect rect = SkRect::MakeLTRB(5, 35, 15, 25);
213 SkDebugf("rect: %g, %g, %g, %g isEmpty: %s\n", rect.left(), rect.top(), rect.right(),
214 rect.bottom(), rect.isEmpty() ? "true" : "false");
215 rect.sort();
216 SkDebugf("rect: %g, %g, %g, %g isEmpty: %s\n", rect.left(), rect.top(), rect.right(),
217 rect.bottom(), rect.isEmpty() ? "true" : "false");
Cary Clark7fc1d122017-10-09 14:07:42 -0400218#StdOut
Cary Clark154beea2017-10-26 07:58:48 -0400219rect: 5, 35, 15, 25 isEmpty: true
Cary Clark7fc1d122017-10-09 14:07:42 -0400220rect: 5, 25, 15, 35 isEmpty: false
221##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400222##
223
Cary Clark7fc1d122017-10-09 14:07:42 -0400224#SeeAlso MakeXYWH SkIRect::MakeLTRB
Cary Clarkbc5697d2017-10-04 14:31:33 -0400225
226##
227
228# ------------------------------------------------------------------------------
229
Cary Clark884dd7d2017-10-11 10:37:52 -0400230#Method static constexpr SkRect SK_WARN_UNUSED_RESULT MakeXYWH(SkScalar x, SkScalar y, SkScalar w, SkScalar h)
Cary Clarkbc5697d2017-10-04 14:31:33 -0400231
Cary Clark4855f782018-02-06 09:41:53 -0500232#In Constructor
Cary Clarkab2621d2018-01-30 10:08:57 -0500233#Line # constructs from SkScalar input returning (x, y, width, height) ##
Cary Clark7fc1d122017-10-09 14:07:42 -0400234Returns constructed Rect set to
235#Formula
236(x, y, x + w, y + h)
237##
238. Does not validate input;
239w or h may be negative.
Cary Clarkbc5697d2017-10-04 14:31:33 -0400240
Cary Clark7fc1d122017-10-09 14:07:42 -0400241#Param x stored in fLeft ##
242#Param y stored in fTop ##
243#Param w added to x and stored in fRight ##
244#Param h added to y and stored in fBottom ##
245
Cary Clark884dd7d2017-10-11 10:37:52 -0400246#Return bounds at (x, y) with width w and height h ##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400247
248#Example
Cary Clark154beea2017-10-26 07:58:48 -0400249 SkRect rect = SkRect::MakeXYWH(5, 35, -15, 25);
250 SkDebugf("rect: %g, %g, %g, %g isEmpty: %s\n", rect.left(), rect.top(), rect.right(),
251 rect.bottom(), rect.isEmpty() ? "true" : "false");
252 rect.sort();
253 SkDebugf("rect: %g, %g, %g, %g isEmpty: %s\n", rect.left(), rect.top(), rect.right(),
254 rect.bottom(), rect.isEmpty() ? "true" : "false");
Cary Clark7fc1d122017-10-09 14:07:42 -0400255#StdOut
Cary Clark154beea2017-10-26 07:58:48 -0400256rect: 5, 35, -10, 60 isEmpty: true
Cary Clark7fc1d122017-10-09 14:07:42 -0400257rect: -10, 35, 5, 60 isEmpty: false
258##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400259##
260
Cary Clark7fc1d122017-10-09 14:07:42 -0400261#SeeAlso MakeLTRB SkIRect::MakeXYWH
Cary Clarkbc5697d2017-10-04 14:31:33 -0400262
263##
264
265# ------------------------------------------------------------------------------
266
267#Method static SkRect SK_WARN_UNUSED_RESULT MakeFromIRect(const SkIRect& irect)
Cary Clark7fc1d122017-10-09 14:07:42 -0400268#Deprecated
Cary Clarkbc5697d2017-10-04 14:31:33 -0400269##
270
Cary Clarkbc5697d2017-10-04 14:31:33 -0400271# ------------------------------------------------------------------------------
272
273#Method static SkRect Make(const SkISize& size)
274
Cary Clark4855f782018-02-06 09:41:53 -0500275#In Constructor
Cary Clarkab2621d2018-01-30 10:08:57 -0500276#Line # constructs from ISize returning (0, 0, width, height) ##
Cary Clark7fc1d122017-10-09 14:07:42 -0400277Returns constructed IRect set to (0, 0, size.width(), size.height()).
278Does not validate input; size.width() or size.height() may be negative.
Cary Clarkbc5697d2017-10-04 14:31:33 -0400279
Cary Clark7fc1d122017-10-09 14:07:42 -0400280#Param size integer values for Rect width and height ##
281
282#Return bounds (0, 0, size.width(), size.height()) ##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400283
284#Example
Cary Clark154beea2017-10-26 07:58:48 -0400285 SkRect rect1 = SkRect::MakeSize({2, 35});
286 SkRect rect2 = SkRect::MakeIWH(2, 35);
287 SkDebugf("rect1 %c= rect2\n", rect1 == rect2 ? '=' : '!');
Cary Clark7fc1d122017-10-09 14:07:42 -0400288#StdOut
289rect1 == rect2
290##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400291##
292
Cary Clark7fc1d122017-10-09 14:07:42 -0400293#SeeAlso MakeWH MakeXYWH SkRect::MakeIWH SkIRect::MakeSize
Cary Clarkbc5697d2017-10-04 14:31:33 -0400294
295##
296
297# ------------------------------------------------------------------------------
298
299#Method static SkRect SK_WARN_UNUSED_RESULT Make(const SkIRect& irect)
300
Cary Clark4855f782018-02-06 09:41:53 -0500301#In Constructor
Cary Clark7fc1d122017-10-09 14:07:42 -0400302Returns constructed IRect set to irect, promoting integers to Scalar.
303Does not validate input; fLeft may be greater than fRight, fTop may be greater
304than fBottom.
Cary Clarkbc5697d2017-10-04 14:31:33 -0400305
Cary Clark7fc1d122017-10-09 14:07:42 -0400306#Param irect integer unsorted bounds ##
307
308#Return irect members converted to SkScalar ##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400309
310#Example
Cary Clark154beea2017-10-26 07:58:48 -0400311 SkIRect i_rect1 = {2, 35, 22, 53};
312 SkRect f_rect = SkRect::Make(i_rect1);
313 f_rect.offset(0.49f, 0.49f);
314 SkIRect i_rect2;
315 f_rect.round(&i_rect2);
316 SkDebugf("i_rect1 %c= i_rect2\n", i_rect1 == i_rect2? '=' : '!');
Cary Clarkbc5697d2017-10-04 14:31:33 -0400317##
318
Cary Clark7fc1d122017-10-09 14:07:42 -0400319#SeeAlso MakeLTRB
Cary Clarkbc5697d2017-10-04 14:31:33 -0400320
321##
322
Cary Clark4855f782018-02-06 09:41:53 -0500323#Subtopic Constructor ##
Cary Clark2dc84ad2018-01-26 12:56:22 -0500324
Cary Clark4855f782018-02-06 09:41:53 -0500325#Subtopic Property
326#Line # member values, center, validity ##
327#Populate
Cary Clark2dc84ad2018-01-26 12:56:22 -0500328
Cary Clarkbc5697d2017-10-04 14:31:33 -0400329# ------------------------------------------------------------------------------
330
331#Method bool isEmpty() const
332
Cary Clark4855f782018-02-06 09:41:53 -0500333#In Property
Cary Clarkab2621d2018-01-30 10:08:57 -0500334#Line # returns true if width or height are zero or negative ##
Cary Clark7fc1d122017-10-09 14:07:42 -0400335Returns true if fLeft is equal to or greater than fRight, or if fTop is equal
336to or greater than fBottom. Call sort() to reverse rectangles with negative
337width() or height().
Cary Clarkbc5697d2017-10-04 14:31:33 -0400338
Cary Clark7fc1d122017-10-09 14:07:42 -0400339#Return true if width() or height() are zero or negative ##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400340
341#Example
Cary Clark154beea2017-10-26 07:58:48 -0400342 SkRect tests[] = {{20, 40, 10, 50}, {20, 40, 20, 50}};
343 for (auto rect : tests) {
344 SkDebugf("rect: {%g, %g, %g, %g} is" "%s empty\n", rect.left(), rect.top(), rect.right(),
345 rect.bottom(), rect.isEmpty() ? "" : " not");
346 rect.sort();
347 SkDebugf("sorted: {%g, %g, %g, %g} is" "%s empty\n", rect.left(), rect.top(), rect.right(),
348 rect.bottom(), rect.isEmpty() ? "" : " not");
349 }
350#StdOut
351rect: {20, 40, 10, 50} is empty
352sorted: {10, 40, 20, 50} is not empty
353rect: {20, 40, 20, 50} is empty
354sorted: {20, 40, 20, 50} is empty
355##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400356##
357
Cary Clark7fc1d122017-10-09 14:07:42 -0400358#SeeAlso MakeEmpty sort SkIRect::isEmpty
Cary Clarkbc5697d2017-10-04 14:31:33 -0400359
360##
361
362# ------------------------------------------------------------------------------
363
364#Method bool isSorted() const
365
Cary Clark4855f782018-02-06 09:41:53 -0500366#In Property
Cary Clarkab2621d2018-01-30 10:08:57 -0500367#Line # returns true if width or height are zero or positive ##
Cary Clark7fc1d122017-10-09 14:07:42 -0400368Returns true if fLeft is equal to or less than fRight, or if fTop is equal
369to or less than fBottom. Call sort() to reverse rectangles with negative
370width() or height().
Cary Clarkbc5697d2017-10-04 14:31:33 -0400371
Cary Clark7fc1d122017-10-09 14:07:42 -0400372#Return true if width() or height() are zero or positive ##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400373
374#Example
Cary Clark154beea2017-10-26 07:58:48 -0400375 SkRect tests[] = {{20, 40, 10, 50}, {20, 40, 20, 50}};
376 for (auto rect : tests) {
377 SkDebugf("rect: {%g, %g, %g, %g} is" "%s sorted\n", rect.left(), rect.top(), rect.right(),
378 rect.bottom(), rect.isSorted() ? "" : " not");
379 rect.sort();
380 SkDebugf("sorted: {%g, %g, %g, %g} is" "%s sorted\n", rect.left(), rect.top(), rect.right(),
381 rect.bottom(), rect.isSorted() ? "" : " not");
382 }
383#StdOut
384rect: {20, 40, 10, 50} is not sorted
385sorted: {10, 40, 20, 50} is sorted
386rect: {20, 40, 20, 50} is sorted
387sorted: {20, 40, 20, 50} is sorted
388##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400389##
390
Cary Clark7fc1d122017-10-09 14:07:42 -0400391#SeeAlso sort makeSorted isEmpty
Cary Clarkbc5697d2017-10-04 14:31:33 -0400392
393##
394
395# ------------------------------------------------------------------------------
396
Cary Clarkbc5697d2017-10-04 14:31:33 -0400397#Method bool isFinite() const
398
Cary Clark4855f782018-02-06 09:41:53 -0500399#In Property
Cary Clarkab2621d2018-01-30 10:08:57 -0500400#Line # returns true if no member is infinite or NaN ##
Cary Clark7fc1d122017-10-09 14:07:42 -0400401Returns true if all values in the rectangle are finite: SK_ScalarMin or larger,
402and SK_ScalarMax or smaller.
Cary Clarkbc5697d2017-10-04 14:31:33 -0400403
Cary Clark7fc1d122017-10-09 14:07:42 -0400404#Return true if no member is infinite or NaN ##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400405
406#Example
Mike Reed274218e2018-01-08 15:05:02 -0500407SkRect largest = { SK_ScalarMin, SK_ScalarMin, SK_ScalarMax, SK_ScalarMax };
Cary Clark154beea2017-10-26 07:58:48 -0400408 SkDebugf("largest is finite: %s\n", largest.isFinite() ? "true" : "false");
409 SkDebugf("large width %g\n", largest.width());
410 SkRect widest = SkRect::MakeWH(largest.width(), largest.height());
411 SkDebugf("widest is finite: %s\n", widest.isFinite() ? "true" : "false");
412#StdOut
413largest is finite: true
414large width inf
Cary Clark7fc1d122017-10-09 14:07:42 -0400415widest is finite: false
416##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400417##
418
Cary Clark7fc1d122017-10-09 14:07:42 -0400419#SeeAlso SkScalarIsFinite SkScalarIsNaN
Cary Clarkbc5697d2017-10-04 14:31:33 -0400420
421##
422
423# ------------------------------------------------------------------------------
424
425#Method SkScalar x() const
426
Cary Clark4855f782018-02-06 09:41:53 -0500427#In Property
Cary Clarkab2621d2018-01-30 10:08:57 -0500428#Line # returns bounds left ##
Cary Clark7fc1d122017-10-09 14:07:42 -0400429Returns left edge of Rect, if sorted. Call isSorted to see if Rect is valid.
430Call sort() to reverse fLeft and fRight if needed.
431
432#Return fLeft ##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400433
434#Example
Cary Clark154beea2017-10-26 07:58:48 -0400435 SkRect unsorted = { 15, 5, 10, 25 };
436 SkDebugf("unsorted.fLeft: %g unsorted.x(): %g\n", unsorted.fLeft, unsorted.x());
437 SkRect sorted = unsorted.makeSorted();
438 SkDebugf("sorted.fLeft: %g sorted.x(): %g\n", sorted.fLeft, sorted.x());
Cary Clark7fc1d122017-10-09 14:07:42 -0400439#StdOut
Cary Clark154beea2017-10-26 07:58:48 -0400440unsorted.fLeft: 15 unsorted.x(): 15
Cary Clark7fc1d122017-10-09 14:07:42 -0400441sorted.fLeft: 10 sorted.x(): 10
442##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400443##
444
Cary Clark7fc1d122017-10-09 14:07:42 -0400445#SeeAlso fLeft left() y() SkIRect::x()
Cary Clarkbc5697d2017-10-04 14:31:33 -0400446
447##
448
449# ------------------------------------------------------------------------------
450
451#Method SkScalar y() const
452
Cary Clark4855f782018-02-06 09:41:53 -0500453#In Property
Cary Clarkab2621d2018-01-30 10:08:57 -0500454#Line # returns bounds top ##
Cary Clark7fc1d122017-10-09 14:07:42 -0400455Returns top edge of Rect, if sorted. Call isEmpty to see if Rect may be invalid,
456and sort() to reverse fTop and fBottom if needed.
457
458#Return fTop ##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400459
460#Example
Cary Clark154beea2017-10-26 07:58:48 -0400461 SkRect unsorted = { 15, 25, 10, 5 };
462 SkDebugf("unsorted.fTop: %g unsorted.y(): %g\n", unsorted.fTop, unsorted.y());
463 SkRect sorted = unsorted.makeSorted();
Cary Clark7fc1d122017-10-09 14:07:42 -0400464 SkDebugf("sorted.fTop: %g sorted.y(): %g\n", sorted.fTop, sorted.y());
465#StdOut
Cary Clark154beea2017-10-26 07:58:48 -0400466unsorted.fTop: 25 unsorted.y(): 25
Cary Clark7fc1d122017-10-09 14:07:42 -0400467sorted.fTop: 5 sorted.y(): 5
468##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400469##
470
Cary Clark7fc1d122017-10-09 14:07:42 -0400471#SeeAlso fTop top() x() SkIRect::y()
Cary Clarkbc5697d2017-10-04 14:31:33 -0400472
473##
474
475# ------------------------------------------------------------------------------
476
477#Method SkScalar left() const
478
Cary Clark4855f782018-02-06 09:41:53 -0500479#In Property
Cary Clarkab2621d2018-01-30 10:08:57 -0500480#Line # returns smaller bounds in x, if sorted ##
Cary Clark7fc1d122017-10-09 14:07:42 -0400481Returns left edge of Rect, if sorted. Call isSorted to see if Rect is valid.
482Call sort() to reverse fLeft and fRight if needed.
483
484#Return fLeft ##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400485
486#Example
Cary Clark154beea2017-10-26 07:58:48 -0400487 SkRect unsorted = { 15, 5, 10, 25 };
488 SkDebugf("unsorted.fLeft: %g unsorted.left(): %g\n", unsorted.fLeft, unsorted.left());
489 SkRect sorted = unsorted.makeSorted();
490 SkDebugf("sorted.fLeft: %g sorted.left(): %g\n", sorted.fLeft, sorted.left());
Cary Clark7fc1d122017-10-09 14:07:42 -0400491#StdOut
Cary Clark154beea2017-10-26 07:58:48 -0400492unsorted.fLeft: 15 unsorted.left(): 15
Cary Clark7fc1d122017-10-09 14:07:42 -0400493sorted.fLeft: 10 sorted.left(): 10
494##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400495##
496
Cary Clark7fc1d122017-10-09 14:07:42 -0400497#SeeAlso fLeft x() SkIRect::left()
Cary Clarkbc5697d2017-10-04 14:31:33 -0400498
499##
500
501# ------------------------------------------------------------------------------
502
503#Method SkScalar top() const
504
Cary Clark4855f782018-02-06 09:41:53 -0500505#In Property
Cary Clarkab2621d2018-01-30 10:08:57 -0500506#Line # returns smaller bounds in y, if sorted ##
Cary Clark7fc1d122017-10-09 14:07:42 -0400507Returns top edge of Rect, if sorted. Call isEmpty to see if Rect may be invalid,
508and sort() to reverse fTop and fBottom if needed.
509
510#Return fTop ##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400511
512#Example
Cary Clark154beea2017-10-26 07:58:48 -0400513 SkRect unsorted = { 15, 25, 10, 5 };
514 SkDebugf("unsorted.fTop: %g unsorted.top(): %g\n", unsorted.fTop, unsorted.top());
515 SkRect sorted = unsorted.makeSorted();
Cary Clark7fc1d122017-10-09 14:07:42 -0400516 SkDebugf("sorted.fTop: %g sorted.top(): %g\n", sorted.fTop, sorted.top());
517#StdOut
Cary Clark154beea2017-10-26 07:58:48 -0400518unsorted.fTop: 25 unsorted.top(): 25
Cary Clark7fc1d122017-10-09 14:07:42 -0400519sorted.fTop: 5 sorted.top(): 5
520##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400521##
522
Cary Clark7fc1d122017-10-09 14:07:42 -0400523#SeeAlso fTop y() SkIRect::top()
Cary Clarkbc5697d2017-10-04 14:31:33 -0400524
525##
526
527# ------------------------------------------------------------------------------
528
529#Method SkScalar right() const
530
Cary Clark4855f782018-02-06 09:41:53 -0500531#In Property
Cary Clarkab2621d2018-01-30 10:08:57 -0500532#Line # returns larger bounds in x, if sorted ##
Cary Clark7fc1d122017-10-09 14:07:42 -0400533Returns right edge of Rect, if sorted. Call isSorted to see if Rect is valid.
534Call sort() to reverse fLeft and fRight if needed.
535
536#Return fRight ##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400537
538#Example
Cary Clark154beea2017-10-26 07:58:48 -0400539 SkRect unsorted = { 15, 25, 10, 5 };
540 SkDebugf("unsorted.fRight: %g unsorted.right(): %g\n", unsorted.fRight, unsorted.right());
541 SkRect sorted = unsorted.makeSorted();
542 SkDebugf("sorted.fRight: %g sorted.right(): %g\n", sorted.fRight, sorted.right());
Cary Clark7fc1d122017-10-09 14:07:42 -0400543#StdOut
Cary Clark154beea2017-10-26 07:58:48 -0400544unsorted.fRight: 10 unsorted.right(): 10
Cary Clark7fc1d122017-10-09 14:07:42 -0400545sorted.fRight: 15 sorted.right(): 15
546##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400547##
548
Cary Clark7fc1d122017-10-09 14:07:42 -0400549#SeeAlso fRight SkIRect::right()
Cary Clarkbc5697d2017-10-04 14:31:33 -0400550
551##
552
553# ------------------------------------------------------------------------------
554
555#Method SkScalar bottom() const
556
Cary Clark4855f782018-02-06 09:41:53 -0500557#In Property
Cary Clarkab2621d2018-01-30 10:08:57 -0500558#Line # returns larger bounds in y, if sorted ##
Cary Clark7fc1d122017-10-09 14:07:42 -0400559Returns bottom edge of Rect, if sorted. Call isEmpty to see if Rect may be invalid,
560and sort() to reverse fTop and fBottom if needed.
561
562#Return fBottom ##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400563
564#Example
Cary Clark154beea2017-10-26 07:58:48 -0400565 SkRect unsorted = { 15, 25, 10, 5 };
566 SkDebugf("unsorted.fBottom: %g unsorted.bottom(): %g\n", unsorted.fBottom, unsorted.bottom());
567 SkRect sorted = unsorted.makeSorted();
568 SkDebugf("sorted.fBottom: %g sorted.bottom(): %g\n", sorted.fBottom, sorted.bottom());
Cary Clark7fc1d122017-10-09 14:07:42 -0400569#StdOut
Cary Clark154beea2017-10-26 07:58:48 -0400570unsorted.fBottom: 5 unsorted.bottom(): 5
Cary Clark7fc1d122017-10-09 14:07:42 -0400571sorted.fBottom: 25 sorted.bottom(): 25
572##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400573##
574
Cary Clark7fc1d122017-10-09 14:07:42 -0400575#SeeAlso fBottom SkIRect::bottom()
Cary Clarkbc5697d2017-10-04 14:31:33 -0400576
577##
578
579# ------------------------------------------------------------------------------
580
581#Method SkScalar width() const
582
Cary Clark4855f782018-02-06 09:41:53 -0500583#In Property
Cary Clarkab2621d2018-01-30 10:08:57 -0500584#Line # returns span in x ##
Cary Clark7fc1d122017-10-09 14:07:42 -0400585Returns span on the x-axis. This does not check if Rect is sorted, or if
586result fits in 32-bit float; result may be negative or infinity.
587
588#Return fRight minus fLeft ##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400589
590#Example
Cary Clark7fc1d122017-10-09 14:07:42 -0400591#Description
592Compare with SkIRect::width() example.
593##
Cary Clark154beea2017-10-26 07:58:48 -0400594 SkRect unsorted = { 15, 25, 10, 5 };
595 SkDebugf("unsorted width: %g\n", unsorted.width());
596 SkRect large = { -2147483647.f, 1, 2147483644.f, 2 };
597 SkDebugf("large width: %.0f\n", large.width());
Cary Clark7fc1d122017-10-09 14:07:42 -0400598#StdOut
Cary Clark154beea2017-10-26 07:58:48 -0400599unsorted width: -5
Cary Clark7fc1d122017-10-09 14:07:42 -0400600large width: 4294967296
601##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400602##
603
Cary Clark7fc1d122017-10-09 14:07:42 -0400604#SeeAlso height() SkIRect::width()
Cary Clarkbc5697d2017-10-04 14:31:33 -0400605
606##
607
608# ------------------------------------------------------------------------------
609
610#Method SkScalar height() const
611
Cary Clark4855f782018-02-06 09:41:53 -0500612#In Property
Cary Clarkab2621d2018-01-30 10:08:57 -0500613#Line # returns span in y ##
Cary Clark7fc1d122017-10-09 14:07:42 -0400614Returns span on the y-axis. This does not check if IRect is sorted, or if
615result fits in 32-bit float; result may be negative or infinity.
616
617#Return fBottom minus fTop ##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400618
619#Example
Cary Clark7fc1d122017-10-09 14:07:42 -0400620#Description
621Compare with SkIRect::height() example.
622##
Cary Clark154beea2017-10-26 07:58:48 -0400623 SkRect unsorted = { 15, 25, 10, 20 };
624 SkDebugf("unsorted height: %g\n", unsorted.height());
625 SkRect large = { 1, -2147483647.f, 2, 2147483644.f };
626 SkDebugf("large height: %.0f\n", large.height());
Cary Clark7fc1d122017-10-09 14:07:42 -0400627#StdOut
Cary Clark154beea2017-10-26 07:58:48 -0400628unsorted height: -5
Cary Clark7fc1d122017-10-09 14:07:42 -0400629large height: 4294967296
630##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400631##
632
Cary Clark7fc1d122017-10-09 14:07:42 -0400633#SeeAlso width() SkIRect::height()
Cary Clarkbc5697d2017-10-04 14:31:33 -0400634
635##
636
637# ------------------------------------------------------------------------------
638
639#Method SkScalar centerX() const
640
Cary Clark4855f782018-02-06 09:41:53 -0500641#In Property
Cary Clarkab2621d2018-01-30 10:08:57 -0500642#Line # returns midpoint in x ##
Cary Clark7fc1d122017-10-09 14:07:42 -0400643Returns average of left edge and right edge. Result does not change if Rect
644is sorted. Result may overflow to infinity if Rect is far from the origin.
645
646#Return midpoint in x ##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400647
648#Example
Cary Clark154beea2017-10-26 07:58:48 -0400649 SkRect tests[] = {{20, 30, 41, 51}, {-20, -30, -41, -51}};
650 for (auto rect : tests) {
651 SkDebugf("left: %3g right: %3g centerX: %3g\n", rect.left(), rect.right(), rect.centerX());
652 rect.sort();
653 SkDebugf("left: %3g right: %3g centerX: %3g\n", rect.left(), rect.right(), rect.centerX());
654 }
Cary Clark7fc1d122017-10-09 14:07:42 -0400655#StdOut
Cary Clark154beea2017-10-26 07:58:48 -0400656left: 20 right: 41 centerX: 30.5
657left: 20 right: 41 centerX: 30.5
658left: -20 right: -41 centerX: -30.5
Cary Clark7fc1d122017-10-09 14:07:42 -0400659left: -41 right: -20 centerX: -30.5
660##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400661##
662
Cary Clark7fc1d122017-10-09 14:07:42 -0400663#SeeAlso centerY SkIRect::centerX
Cary Clarkbc5697d2017-10-04 14:31:33 -0400664
665##
666
667# ------------------------------------------------------------------------------
668
669#Method SkScalar centerY() const
670
Cary Clark4855f782018-02-06 09:41:53 -0500671#In Property
Cary Clarkab2621d2018-01-30 10:08:57 -0500672#Line # returns midpoint in y ##
Cary Clark7fc1d122017-10-09 14:07:42 -0400673Returns average of top edge and bottom edge. Result does not change if Rect
674is sorted. Result may overflow to infinity if Rect is far from the origin.
675
676#Return midpoint in y ##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400677
678#Example
Cary Clark154beea2017-10-26 07:58:48 -0400679 SkRect rect = { 2e+38, 2e+38, 3e+38, 3e+38 };
680 SkDebugf("left: %g right: %g centerX: %g ", rect.left(), rect.right(), rect.centerX());
681 SkDebugf("safe mid x: %g\n", rect.left() / 2 + rect.right() / 2);
Cary Clark7fc1d122017-10-09 14:07:42 -0400682#StdOut
683left: 2e+38 right: 3e+38 centerX: inf safe mid x: 2.5e+38
684##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400685##
686
Cary Clark7fc1d122017-10-09 14:07:42 -0400687#SeeAlso centerX SkIRect::centerY
Cary Clarkbc5697d2017-10-04 14:31:33 -0400688
689##
690
Cary Clark4855f782018-02-06 09:41:53 -0500691#Subtopic Property ##
Cary Clark2dc84ad2018-01-26 12:56:22 -0500692
Cary Clark4855f782018-02-06 09:41:53 -0500693#Subtopic Operator
Cary Clark2dc84ad2018-01-26 12:56:22 -0500694
Cary Clark4855f782018-02-06 09:41:53 -0500695#Populate
Cary Clark2dc84ad2018-01-26 12:56:22 -0500696
Cary Clarkbc5697d2017-10-04 14:31:33 -0400697# ------------------------------------------------------------------------------
698
Cary Clark884dd7d2017-10-11 10:37:52 -0400699#Method bool operator==(const SkRect& a, const SkRect& b)
Cary Clarkbc5697d2017-10-04 14:31:33 -0400700
Cary Clark4855f782018-02-06 09:41:53 -0500701#In Operator
Cary Clarkab2621d2018-01-30 10:08:57 -0500702#Line # returns true if members are equal ##
Cary Clark7fc1d122017-10-09 14:07:42 -0400703Returns true if all members in a: fLeft, fTop, fRight, and fBottom; are
704equal to the corresponding members in b.
Cary Clarkbc5697d2017-10-04 14:31:33 -0400705
Cary Clark7fc1d122017-10-09 14:07:42 -0400706a and b are not equal if either contain NaN. a and b are equal if members
707contain zeroes width different signs.
708
709#Param a Rect to compare ##
710#Param b Rect to compare ##
711
712#Return true if members are equal ##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400713
714#Example
Cary Clark154beea2017-10-26 07:58:48 -0400715 auto debugster = [](const SkRect& test) -> void {
716 SkRect negZero = {-0.0f, -0.0f, 2, 2};
717 SkDebugf("{%g, %g, %g, %g} %c= {%g, %g, %g, %g} %s numerically equal\n",
718 test.fLeft, test.fTop, test.fRight, test.fBottom,
719 negZero.fLeft, negZero.fTop, negZero.fRight, negZero.fBottom,
720 test == negZero ? '=' : '!',
721 test.fLeft == negZero.fLeft && test.fTop == negZero.fTop &&
722 test.fRight == negZero.fRight && test.fBottom == negZero.fBottom ?
723 "and are" : "yet are not");
724 };
725 SkRect tests[] = {{0, 0, 2, 2}, {-0, -0, 2, 2}, {0.0f, 0.0f, 2, 2}};
726 SkDebugf("tests are %s" "equal\n", tests[0] == tests[1] && tests[1] == tests[2] ? "" : "not ");
727 for (auto rect : tests) {
728 debugster(rect);
Cary Clark7fc1d122017-10-09 14:07:42 -0400729 }
Cary Clark154beea2017-10-26 07:58:48 -0400730#StdOut
731tests are equal
732{0, 0, 2, 2} == {-0, -0, 2, 2} and are numerically equal
733{0, 0, 2, 2} == {-0, -0, 2, 2} and are numerically equal
Cary Clark7fc1d122017-10-09 14:07:42 -0400734{0, 0, 2, 2} == {-0, -0, 2, 2} and are numerically equal
735##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400736##
737
Cary Clark7fc1d122017-10-09 14:07:42 -0400738#SeeAlso operator!=(const SkRect& a, const SkRect& b)
Cary Clarkbc5697d2017-10-04 14:31:33 -0400739
740##
741
742# ------------------------------------------------------------------------------
743
Cary Clark884dd7d2017-10-11 10:37:52 -0400744#Method bool operator!=(const SkRect& a, const SkRect& b)
Cary Clarkbc5697d2017-10-04 14:31:33 -0400745
Cary Clark4855f782018-02-06 09:41:53 -0500746#In Operator
Cary Clarkab2621d2018-01-30 10:08:57 -0500747#Line # returns true if members are unequal ##
Cary Clark7fc1d122017-10-09 14:07:42 -0400748Returns true if any in a: fLeft, fTop, fRight, and fBottom; does not
749equal the corresponding members in b.
Cary Clarkbc5697d2017-10-04 14:31:33 -0400750
Cary Clark7fc1d122017-10-09 14:07:42 -0400751a and b are not equal if either contain NaN. a and b are equal if members
752contain zeroes width different signs.
753
754#Param a Rect to compare ##
755#Param b Rect to compare ##
756
757#Return true if members are not equal ##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400758
759#Example
Cary Clark154beea2017-10-26 07:58:48 -0400760 SkRect test = {0, 0, 2, SK_ScalarNaN};
761 SkDebugf("test with NaN is %s" "equal to itself\n", test == test ? "" : "not ");
762#StdOut
Cary Clark7fc1d122017-10-09 14:07:42 -0400763test with NaN is not equal to itself
764##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400765##
766
Cary Clark7fc1d122017-10-09 14:07:42 -0400767#SeeAlso operator==(const SkRect& a, const SkRect& b)
Cary Clarkbc5697d2017-10-04 14:31:33 -0400768
769##
770
Cary Clark4855f782018-02-06 09:41:53 -0500771#Subtopic Operator ##
Cary Clark2dc84ad2018-01-26 12:56:22 -0500772
773#Subtopic As_Points
Cary Clark08895c42018-02-01 09:37:32 -0500774#Line # conversion to and from Points ##
Cary Clark2dc84ad2018-01-26 12:56:22 -0500775
Cary Clark4855f782018-02-06 09:41:53 -0500776#Populate
Cary Clark2dc84ad2018-01-26 12:56:22 -0500777
Cary Clarkbc5697d2017-10-04 14:31:33 -0400778# ------------------------------------------------------------------------------
779
780#Method void toQuad(SkPoint quad[4]) const
781
Cary Clarkab2621d2018-01-30 10:08:57 -0500782#In As_Points
783#Line # returns four corners as Point ##
Cary Clark7fc1d122017-10-09 14:07:42 -0400784Returns four points in quad that enclose Rect ordered as: top-left, top-right,
785bottom-right, bottom-left.
786
787#Private
Cary Clarkbc5697d2017-10-04 14:31:33 -0400788Consider adding param to control whether quad is CW or CCW.
789##
790
Cary Clark7fc1d122017-10-09 14:07:42 -0400791#Param quad storage for corners of Rect ##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400792
793#Example
Cary Clark154beea2017-10-26 07:58:48 -0400794 SkRect rect = {1, 2, 3, 4};
795 SkPoint corners[4];
796 rect.toQuad(corners);
797 SkDebugf("rect: {%g, %g, %g, %g}\n", rect.fLeft, rect.fTop, rect.fRight, rect.fBottom);
798 SkDebugf("corners:");
799 for (auto corner : corners) {
800 SkDebugf(" {%g, %g}", corner.fX, corner.fY);
801 }
802 SkDebugf("\n");
803#StdOut
804rect: {1, 2, 3, 4}
Cary Clark7fc1d122017-10-09 14:07:42 -0400805corners: {1, 2} {3, 2} {3, 4} {1, 4}
806##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400807##
808
Cary Clark7fc1d122017-10-09 14:07:42 -0400809#SeeAlso SkPath::addRect
Cary Clarkbc5697d2017-10-04 14:31:33 -0400810
811##
812
813# ------------------------------------------------------------------------------
814
Cary Clark2dc84ad2018-01-26 12:56:22 -0500815#Method void setBounds(const SkPoint pts[], int count)
816
Cary Clarkab2621d2018-01-30 10:08:57 -0500817#In As_Points
818#Line # sets to upper and lower limits of Point array ##
Cary Clark2dc84ad2018-01-26 12:56:22 -0500819Sets to bounds of Point array with count entries. If count is zero or smaller,
820or if Point array contains an infinity or NaN, sets to (0, 0, 0, 0).
821
822Result is either empty or sorted: fLeft is less than or equal to fRight, and
823fTop is less than or equal to fBottom.
824
825#Param pts Point array ##
826#Param count entries in array ##
827
828#Example
829 SkPoint points[] = {{3, 4}, {1, 2}, {5, 6}, {SK_ScalarNaN, 8}};
830 for (int count = 0; count <= (int) SK_ARRAY_COUNT(points); ++count) {
831 SkRect rect;
832 rect.setBounds(points, count);
833 if (count > 0) {
834 SkDebugf("added: %3g, %g ", points[count - 1].fX, points[count - 1].fY);
835 } else {
836 SkDebugf("%14s", " ");
837 }
838 SkDebugf("count: %d rect: %g, %g, %g, %g\n", count,
839 rect.fLeft, rect.fTop, rect.fRight, rect.fBottom);
840 }
841#StdOut
842 count: 0 rect: 0, 0, 0, 0
843added: 3, 4 count: 1 rect: 3, 4, 3, 4
844added: 1, 2 count: 2 rect: 1, 2, 3, 4
845added: 5, 6 count: 3 rect: 1, 2, 5, 6
846added: nan, 8 count: 4 rect: 0, 0, 0, 0
847##
848##
849
850#SeeAlso set setBoundsCheck SkPath::addPoly
851
852##
853
854# ------------------------------------------------------------------------------
855
856#Method bool setBoundsCheck(const SkPoint pts[], int count)
857
Cary Clarkab2621d2018-01-30 10:08:57 -0500858#In As_Points
859#Line # sets to upper and lower limits of Point array ##
Cary Clark2dc84ad2018-01-26 12:56:22 -0500860Sets to bounds of Point array with count entries. Returns false if count is
861zero or smaller, or if Point array contains an infinity or NaN; in these cases
862sets Rect to (0, 0, 0, 0).
863
864Result is either empty or sorted: fLeft is less than or equal to fRight, and
865fTop is less than or equal to fBottom.
866
867#Param pts Point array ##
868#Param count entries in array ##
869
870#Return true if all Point values are finite ##
871
872#Example
873 SkPoint points[] = {{3, 4}, {1, 2}, {5, 6}, {SK_ScalarNaN, 8}};
874 for (int count = 0; count <= (int) SK_ARRAY_COUNT(points); ++count) {
875 SkRect rect;
876 bool success = rect.setBoundsCheck(points, count);
877 if (count > 0) {
878 SkDebugf("added: %3g, %g ", points[count - 1].fX, points[count - 1].fY);
879 } else {
880 SkDebugf("%14s", " ");
881 }
882 SkDebugf("count: %d rect: %g, %g, %g, %g success: %s\n", count,
883 rect.fLeft, rect.fTop, rect.fRight, rect.fBottom, success ? "true" : "false");
884 }
885#StdOut
886 count: 0 rect: 0, 0, 0, 0 success: true
887added: 3, 4 count: 1 rect: 3, 4, 3, 4 success: true
888added: 1, 2 count: 2 rect: 1, 2, 3, 4 success: true
889added: 5, 6 count: 3 rect: 1, 2, 5, 6 success: true
890added: nan, 8 count: 4 rect: 0, 0, 0, 0 success: false
891##
892##
893
894#SeeAlso set setBounds SkPath::addPoly
895
896##
897
898#Subtopic As_Points ##
899
900#Subtopic Set
Cary Clark08895c42018-02-01 09:37:32 -0500901#Line # replaces all values ##
Cary Clark4855f782018-02-06 09:41:53 -0500902#Populate
Cary Clark2dc84ad2018-01-26 12:56:22 -0500903
904# ------------------------------------------------------------------------------
905
Cary Clarkbc5697d2017-10-04 14:31:33 -0400906#Method void setEmpty()
907
Cary Clarkab2621d2018-01-30 10:08:57 -0500908#In Set
909#Line # sets to (0, 0, 0, 0) ##
Cary Clark7fc1d122017-10-09 14:07:42 -0400910Sets Rect to (0, 0, 0, 0).
911
912Many other rectangles are empty; if left is equal to or greater than right,
913or if top is equal to or greater than bottom. Setting all members to zero
914is a convenience, but does not designate a special empty rectangle.
Cary Clarkbc5697d2017-10-04 14:31:33 -0400915
916#Example
Cary Clark154beea2017-10-26 07:58:48 -0400917 SkRect rect = {3, 4, 1, 2};
918 for (int i = 0; i < 2; ++i) {
919 SkDebugf("rect: {%g, %g, %g, %g} is %s" "empty\n", rect.fLeft, rect.fTop,
920 rect.fRight, rect.fBottom, rect.isEmpty() ? "" : "not ");
921 rect.setEmpty();
922 }
923#StdOut
924rect: {3, 4, 1, 2} is empty
925rect: {0, 0, 0, 0} is empty
926##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400927##
928
Cary Clark7fc1d122017-10-09 14:07:42 -0400929#SeeAlso MakeEmpty SkIRect::setEmpty
Cary Clarkbc5697d2017-10-04 14:31:33 -0400930
931##
932
933# ------------------------------------------------------------------------------
934
935#Method void set(const SkIRect& src)
936
Cary Clarkab2621d2018-01-30 10:08:57 -0500937#In Set
938#Line # sets to SkScalar input (left, top, right, bottom) and others ##
Cary Clark7fc1d122017-10-09 14:07:42 -0400939Sets Rect to src, promoting src members from integer to Scalar.
940Very large values in src may lose precision.
941
942#Param src integer Rect ##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400943
944#Example
Cary Clark154beea2017-10-26 07:58:48 -0400945 SkIRect i_rect = {3, 4, 1, 2};
946 SkDebugf("i_rect: {%d, %d, %d, %d}\n", i_rect.fLeft, i_rect.fTop, i_rect.fRight, i_rect.fBottom);
947 SkRect f_rect;
948 f_rect.set(i_rect);
949 SkDebugf("f_rect: {%g, %g, %g, %g}\n", f_rect.fLeft, f_rect.fTop, f_rect.fRight, f_rect.fBottom);
950#StdOut
951i_rect: {3, 4, 1, 2}
952f_rect: {3, 4, 1, 2}
953##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400954##
955
Cary Clark7fc1d122017-10-09 14:07:42 -0400956#SeeAlso setLTRB SkIntToScalar
Cary Clarkbc5697d2017-10-04 14:31:33 -0400957
958##
959
960# ------------------------------------------------------------------------------
961
962#Method void set(SkScalar left, SkScalar top, SkScalar right, SkScalar bottom)
963
Cary Clarkab2621d2018-01-30 10:08:57 -0500964#In Set
Cary Clark7fc1d122017-10-09 14:07:42 -0400965Sets Rect to (left, top, right, bottom).
966left and right are not sorted; left is not necessarily less than right.
967top and bottom are not sorted; top is not necessarily less than bottom.
968
969#Param left stored in fLeft ##
970#Param top stored in fTop ##
971#Param right stored in fRight ##
972#Param bottom stored in fBottom ##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400973
974#Example
Cary Clark154beea2017-10-26 07:58:48 -0400975 SkRect rect1 = {3, 4, 1, 2};
976 SkDebugf("rect1: {%g, %g, %g, %g}\n", rect1.fLeft, rect1.fTop, rect1.fRight, rect1.fBottom);
977 SkRect rect2;
978 rect2.set(3, 4, 1, 2);
979 SkDebugf("rect2: {%g, %g, %g, %g}\n", rect2.fLeft, rect2.fTop, rect2.fRight, rect2.fBottom);
980#StdOut
981rect1: {3, 4, 1, 2}
982rect2: {3, 4, 1, 2}
983##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400984##
985
Cary Clark7fc1d122017-10-09 14:07:42 -0400986#SeeAlso setLTRB setXYWH SkIRect::set
Cary Clarkbc5697d2017-10-04 14:31:33 -0400987
988##
989
990# ------------------------------------------------------------------------------
991
992#Method void setLTRB(SkScalar left, SkScalar top, SkScalar right, SkScalar bottom)
993
Cary Clarkab2621d2018-01-30 10:08:57 -0500994#In Set
995#Line # sets to SkScalar input (left, top, right, bottom) ##
Cary Clark7fc1d122017-10-09 14:07:42 -0400996Sets Rect to (left, top, right, bottom).
997left and right are not sorted; left is not necessarily less than right.
998top and bottom are not sorted; top is not necessarily less than bottom.
Cary Clarkbc5697d2017-10-04 14:31:33 -0400999
Cary Clark7fc1d122017-10-09 14:07:42 -04001000#Param left stored in fLeft ##
1001#Param top stored in fTop ##
1002#Param right stored in fRight ##
1003#Param bottom stored in fBottom ##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001004
1005#Example
Cary Clark154beea2017-10-26 07:58:48 -04001006 SkRect rect1 = {3, 4, 1, 2};
1007 SkDebugf("rect1: {%g, %g, %g, %g}\n", rect1.fLeft, rect1.fTop, rect1.fRight, rect1.fBottom);
1008 SkRect rect2;
1009 rect2.setLTRB(3, 4, 1, 2);
1010 SkDebugf("rect2: {%g, %g, %g, %g}\n", rect2.fLeft, rect2.fTop, rect2.fRight, rect2.fBottom);
1011#StdOut
1012rect1: {3, 4, 1, 2}
1013rect2: {3, 4, 1, 2}
1014##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001015##
1016
Cary Clark7fc1d122017-10-09 14:07:42 -04001017#SeeAlso set setXYWH SkIRect::set
Cary Clarkbc5697d2017-10-04 14:31:33 -04001018
1019##
1020
1021# ------------------------------------------------------------------------------
1022
Cary Clarkbc5697d2017-10-04 14:31:33 -04001023#Method void set(const SkPoint pts[], int count)
1024
Cary Clarkab2621d2018-01-30 10:08:57 -05001025#In Set
Cary Clark7fc1d122017-10-09 14:07:42 -04001026Sets to bounds of Point array with count entries. If count is zero or smaller,
1027or if Point array contains an infinity or NaN, sets Rect to (0, 0, 0, 0).
Cary Clarkbc5697d2017-10-04 14:31:33 -04001028
Cary Clark7fc1d122017-10-09 14:07:42 -04001029Result is either empty or sorted: fLeft is less than or equal to fRight, and
1030fTop is less than or equal to fBottom.
1031
1032#Param pts Point array ##
1033#Param count entries in array ##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001034
1035#Example
Cary Clark154beea2017-10-26 07:58:48 -04001036 SkPoint points[] = {{3, 4}, {1, 2}, {5, 6}, {SK_ScalarNaN, 8}};
1037 for (int count = 0; count <= (int) SK_ARRAY_COUNT(points); ++count) {
1038 SkRect rect;
1039 rect.set(points, count);
1040 if (count > 0) {
1041 SkDebugf("added: %3g, %g ", points[count - 1].fX, points[count - 1].fY);
1042 } else {
1043 SkDebugf("%14s", " ");
1044 }
1045 SkDebugf("count: %d rect: %g, %g, %g, %g\n", count,
1046 rect.fLeft, rect.fTop, rect.fRight, rect.fBottom);
1047 }
1048#StdOut
1049 count: 0 rect: 0, 0, 0, 0
1050added: 3, 4 count: 1 rect: 3, 4, 3, 4
1051added: 1, 2 count: 2 rect: 1, 2, 3, 4
1052added: 5, 6 count: 3 rect: 1, 2, 5, 6
1053added: nan, 8 count: 4 rect: 0, 0, 0, 0
1054##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001055##
1056
Cary Clark7fc1d122017-10-09 14:07:42 -04001057#SeeAlso setBounds setBoundsCheck SkPath::addPoly
Cary Clarkbc5697d2017-10-04 14:31:33 -04001058
1059##
1060
1061# ------------------------------------------------------------------------------
1062
Cary Clarkbc5697d2017-10-04 14:31:33 -04001063#Method void set(const SkPoint& p0, const SkPoint& p1)
1064
Cary Clarkab2621d2018-01-30 10:08:57 -05001065#In Set
Cary Clark7fc1d122017-10-09 14:07:42 -04001066Sets bounds to the smallest Rect enclosing Points p0 and p1. The result is
1067sorted and may be empty. Does not check to see if values are finite.
1068
1069#Param p0 corner to include ##
1070#Param p1 corner to include ##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001071
1072#Example
Cary Clark7fc1d122017-10-09 14:07:42 -04001073#Description
1074p0 and p1 may be swapped and have the same effect unless one contains NaN.
1075##
Cary Clark154beea2017-10-26 07:58:48 -04001076 SkPoint point1 = {SK_ScalarNaN, 8};
1077 SkPoint point2 = {3, 4};
1078 SkRect rect;
1079 rect.set(point1, point2);
1080 SkDebugf("rect: %g, %g, %g, %g\n", rect.fLeft, rect.fTop, rect.fRight, rect.fBottom);
1081 rect.set(point2, point1);
1082 SkDebugf("rect: %g, %g, %g, %g\n", rect.fLeft, rect.fTop, rect.fRight, rect.fBottom);
Cary Clarkbc5697d2017-10-04 14:31:33 -04001083##
1084
Cary Clark7fc1d122017-10-09 14:07:42 -04001085#SeeAlso setBounds setBoundsCheck
Cary Clarkbc5697d2017-10-04 14:31:33 -04001086
1087##
1088
1089# ------------------------------------------------------------------------------
1090
1091#Method void setXYWH(SkScalar x, SkScalar y, SkScalar width, SkScalar height)
1092
Cary Clarkab2621d2018-01-30 10:08:57 -05001093#In Set
1094#Line # sets to SkScalar input (x, y, width, height) ##
Cary Clark7fc1d122017-10-09 14:07:42 -04001095Sets Rect to
1096#Formula
1097(x, y, x + width, y + height)
1098##
1099. Does not validate input;
1100width or height may be negative.
1101
1102#Param x stored in fLeft ##
1103#Param y stored in fTop ##
1104#Param width added to x and stored in fRight ##
1105#Param height added to y and stored in fBottom ##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001106
1107#Example
Cary Clark154beea2017-10-26 07:58:48 -04001108 SkRect rect;
1109 rect.setXYWH(5, 35, -15, 25);
1110 SkDebugf("rect: %g, %g, %g, %g isEmpty: %s\n", rect.left(), rect.top(), rect.right(),
1111 rect.bottom(), rect.isEmpty() ? "true" : "false");
1112 rect.sort();
1113 SkDebugf("rect: %g, %g, %g, %g isEmpty: %s\n", rect.left(), rect.top(), rect.right(),
1114 rect.bottom(), rect.isEmpty() ? "true" : "false");
Cary Clark7fc1d122017-10-09 14:07:42 -04001115#StdOut
Cary Clark154beea2017-10-26 07:58:48 -04001116rect: 5, 35, -10, 60 isEmpty: true
Cary Clark7fc1d122017-10-09 14:07:42 -04001117rect: -10, 35, 5, 60 isEmpty: false
1118##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001119##
1120
Cary Clark7fc1d122017-10-09 14:07:42 -04001121#SeeAlso MakeXYWH setLTRB set SkIRect::setXYWH
Cary Clarkbc5697d2017-10-04 14:31:33 -04001122
1123##
1124
1125# ------------------------------------------------------------------------------
1126
1127#Method void setWH(SkScalar width, SkScalar height)
1128
Cary Clarkab2621d2018-01-30 10:08:57 -05001129#In Set
1130#Line # sets to SkScalar input (0, 0, width, height) ##
Cary Clark7fc1d122017-10-09 14:07:42 -04001131Sets Rect to (0, 0, width, height). Does not validate input;
1132width or height may be negative.
1133
1134#Param width stored in fRight ##
1135#Param height stored in fBottom ##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001136
1137#Example
Cary Clark154beea2017-10-26 07:58:48 -04001138 SkRect rect;
1139 rect.setWH(-15, 25);
1140 SkDebugf("rect: %g, %g, %g, %g isEmpty: %s\n", rect.left(), rect.top(), rect.right(),
1141 rect.bottom(), rect.isEmpty() ? "true" : "false");
1142 rect.sort();
1143 SkDebugf("rect: %g, %g, %g, %g isEmpty: %s\n", rect.left(), rect.top(), rect.right(),
1144 rect.bottom(), rect.isEmpty() ? "true" : "false");
Cary Clark7fc1d122017-10-09 14:07:42 -04001145#StdOut
Cary Clark154beea2017-10-26 07:58:48 -04001146rect: 0, 0, -15, 25 isEmpty: true
Cary Clark7fc1d122017-10-09 14:07:42 -04001147rect: -15, 0, 0, 25 isEmpty: false
1148##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001149##
1150
Cary Clark7fc1d122017-10-09 14:07:42 -04001151#SeeAlso MakeWH setXYWH isetWH
Cary Clarkbc5697d2017-10-04 14:31:33 -04001152
1153##
1154
Cary Clark2dc84ad2018-01-26 12:56:22 -05001155#Subtopic Set ##
1156
1157#Subtopic From_Integers
Cary Clark08895c42018-02-01 09:37:32 -05001158#Line # set Scalar values from integer input ##
Cary Clark2dc84ad2018-01-26 12:56:22 -05001159
Cary Clark4855f782018-02-06 09:41:53 -05001160#Populate
Cary Clark2dc84ad2018-01-26 12:56:22 -05001161
1162# ------------------------------------------------------------------------------
1163
1164#Method void iset(int left, int top, int right, int bottom)
1165
Cary Clarkab2621d2018-01-30 10:08:57 -05001166#In From_Integers
1167#Line # sets to int input (left, top, right, bottom) ##
Cary Clark2dc84ad2018-01-26 12:56:22 -05001168Sets Rect to (left, top, right, bottom).
1169All parameters are promoted from integer to Scalar.
1170left and right are not sorted; left is not necessarily less than right.
1171top and bottom are not sorted; top is not necessarily less than bottom.
1172
1173#Param left promoted to SkScalar and stored in fLeft ##
1174#Param top promoted to SkScalar and stored in fTop ##
1175#Param right promoted to SkScalar and stored in fRight ##
1176#Param bottom promoted to SkScalar and stored in fBottom ##
1177
1178#Example
1179 SkRect rect1 = {3, 4, 1, 2};
1180 SkDebugf("rect1: {%g, %g, %g, %g}\n", rect1.fLeft, rect1.fTop, rect1.fRight, rect1.fBottom);
1181 SkRect rect2;
1182 rect2.iset(3, 4, 1, 2);
1183 SkDebugf("rect2: {%g, %g, %g, %g}\n", rect2.fLeft, rect2.fTop, rect2.fRight, rect2.fBottom);
1184#StdOut
1185rect1: {3, 4, 1, 2}
1186rect2: {3, 4, 1, 2}
1187##
1188##
1189
1190#SeeAlso set setLTRB SkIRect::set SkIntToScalar
1191
1192##
1193
1194# ------------------------------------------------------------------------------
1195
1196#Method void isetWH(int width, int height)
1197
Cary Clarkab2621d2018-01-30 10:08:57 -05001198#In From_Integers
1199#Line # sets to int input (0, 0, width, height) ##
Cary Clark2dc84ad2018-01-26 12:56:22 -05001200Sets Rect to (0, 0, width, height).
1201width and height may be zero or negative. width and height are promoted from
1202integer to SkScalar, large values may lose precision.
1203
1204#Param width promoted to SkScalar and stored in fRight ##
1205#Param height promoted to SkScalar and stored in fBottom ##
1206
1207#Example
1208 SkRect rect1 = {0, 0, 1, 2};
1209 SkDebugf("rect1: {%g, %g, %g, %g}\n", rect1.fLeft, rect1.fTop, rect1.fRight, rect1.fBottom);
1210 SkRect rect2;
1211 rect2.isetWH(1, 2);
1212 SkDebugf("rect2: {%g, %g, %g, %g}\n", rect2.fLeft, rect2.fTop, rect2.fRight, rect2.fBottom);
1213#StdOut
1214rect1: {0, 0, 1, 2}
1215rect2: {0, 0, 1, 2}
1216##
1217##
1218
1219#SeeAlso MakeWH MakeXYWH iset() SkIRect:MakeWH
1220
1221##
1222
1223#Subtopic From_Integers ##
1224
1225#Subtopic Inset_Outset_Offset
Cary Clark08895c42018-02-01 09:37:32 -05001226#Line # moves sides ##
Cary Clark2dc84ad2018-01-26 12:56:22 -05001227
Cary Clark4855f782018-02-06 09:41:53 -05001228#Populate
Cary Clark2dc84ad2018-01-26 12:56:22 -05001229
Cary Clarkbc5697d2017-10-04 14:31:33 -04001230# ------------------------------------------------------------------------------
1231
Cary Clarkbc5697d2017-10-04 14:31:33 -04001232#Method SkRect makeOffset(SkScalar dx, SkScalar dy) const
1233
Cary Clarkab2621d2018-01-30 10:08:57 -05001234#In Inset_Outset_Offset
1235#Line # constructs from translated sides ##
Cary Clark7fc1d122017-10-09 14:07:42 -04001236Returns Rect offset by (dx, dy).
Cary Clarkbc5697d2017-10-04 14:31:33 -04001237
Cary Clark7fc1d122017-10-09 14:07:42 -04001238If dx is negative, Rect returned is moved to the left.
1239If dx is positive, Rect returned is moved to the right.
1240If dy is negative, Rect returned is moved upward.
1241If dy is positive, Rect returned is moved downward.
Cary Clarkbc5697d2017-10-04 14:31:33 -04001242
Cary Clark7fc1d122017-10-09 14:07:42 -04001243#Param dx added to fLeft and fRight ##
1244#Param dy added to fTop and fBottom ##
1245
1246#Return Rect offset in x or y, with original width and height ##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001247
1248#Example
Cary Clark154beea2017-10-26 07:58:48 -04001249 SkRect rect = { 10, 50, 20, 60 };
1250 SkDebugf("rect: %g, %g, %g, %g isEmpty: %s\n", rect.left(), rect.top(), rect.right(),
1251 rect.bottom(), rect.isEmpty() ? "true" : "false");
1252 rect = rect.makeOffset(15, 32);
1253 SkDebugf("rect: %g, %g, %g, %g isEmpty: %s\n", rect.left(), rect.top(), rect.right(),
1254 rect.bottom(), rect.isEmpty() ? "true" : "false");
1255#StdOut
1256rect: 10, 50, 20, 60 isEmpty: false
1257rect: 25, 82, 35, 92 isEmpty: false
1258##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001259##
1260
Cary Clark7fc1d122017-10-09 14:07:42 -04001261#SeeAlso offset() makeInset makeOutset SkIRect::makeOffset
Cary Clarkbc5697d2017-10-04 14:31:33 -04001262
1263##
1264
1265# ------------------------------------------------------------------------------
1266
1267#Method SkRect makeInset(SkScalar dx, SkScalar dy) const
1268
Cary Clarkab2621d2018-01-30 10:08:57 -05001269#In Inset_Outset_Offset
1270#Line # constructs from sides moved symmetrically about the center ##
Cary Clark7fc1d122017-10-09 14:07:42 -04001271Returns Rect, inset by (dx, dy).
Cary Clarkbc5697d2017-10-04 14:31:33 -04001272
Cary Clark7fc1d122017-10-09 14:07:42 -04001273If dx is negative, Rect returned is wider.
1274If dx is positive, Rect returned is narrower.
1275If dy is negative, Rect returned is taller.
1276If dy is positive, Rect returned is shorter.
Cary Clarkbc5697d2017-10-04 14:31:33 -04001277
Cary Clark7fc1d122017-10-09 14:07:42 -04001278#Param dx added to fLeft and subtracted from fRight ##
1279#Param dy added to fTop and subtracted from fBottom ##
1280
1281#Return Rect inset symmetrically left and right, top and bottom ##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001282
1283#Example
Cary Clark154beea2017-10-26 07:58:48 -04001284 SkRect rect = { 10, 50, 20, 60 };
1285 SkDebugf("rect: %g, %g, %g, %g isEmpty: %s\n", rect.left(), rect.top(), rect.right(),
1286 rect.bottom(), rect.isEmpty() ? "true" : "false");
1287 rect = rect.makeInset(15, 32);
1288 SkDebugf("rect: %g, %g, %g, %g isEmpty: %s\n", rect.left(), rect.top(), rect.right(),
1289 rect.bottom(), rect.isEmpty() ? "true" : "false");
1290#StdOut
1291rect: 10, 50, 20, 60 isEmpty: false
1292rect: 25, 82, 5, 28 isEmpty: true
1293##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001294##
1295
Cary Clark7fc1d122017-10-09 14:07:42 -04001296#SeeAlso inset() makeOffset makeOutset SkIRect::makeInset
Cary Clarkbc5697d2017-10-04 14:31:33 -04001297
1298##
1299
1300# ------------------------------------------------------------------------------
1301
1302#Method SkRect makeOutset(SkScalar dx, SkScalar dy) const
1303
Cary Clarkab2621d2018-01-30 10:08:57 -05001304#In Inset_Outset_Offset
1305#Line # constructs from sides moved symmetrically about the center ##
Cary Clark7fc1d122017-10-09 14:07:42 -04001306Returns Rect, outset by (dx, dy).
Cary Clarkbc5697d2017-10-04 14:31:33 -04001307
Cary Clark7fc1d122017-10-09 14:07:42 -04001308If dx is negative, Rect returned is narrower.
1309If dx is positive, Rect returned is wider.
1310If dy is negative, Rect returned is shorter.
1311If dy is positive, Rect returned is taller.
Cary Clarkbc5697d2017-10-04 14:31:33 -04001312
Cary Clark7fc1d122017-10-09 14:07:42 -04001313#Param dx subtracted to fLeft and added from fRight ##
1314#Param dy subtracted to fTop and added from fBottom ##
1315
1316#Return Rect outset symmetrically left and right, top and bottom ##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001317
1318#Example
Cary Clark154beea2017-10-26 07:58:48 -04001319 SkRect rect = { 10, 50, 20, 60 };
1320 SkDebugf("rect: %g, %g, %g, %g isEmpty: %s\n", rect.left(), rect.top(), rect.right(),
1321 rect.bottom(), rect.isEmpty() ? "true" : "false");
1322 rect = rect.makeOutset(15, 32);
1323 SkDebugf("rect: %g, %g, %g, %g isEmpty: %s\n", rect.left(), rect.top(), rect.right(),
1324 rect.bottom(), rect.isEmpty() ? "true" : "false");
1325#StdOut
1326rect: 10, 50, 20, 60 isEmpty: false
1327rect: -5, 18, 35, 92 isEmpty: false
1328##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001329##
1330
Cary Clark7fc1d122017-10-09 14:07:42 -04001331#SeeAlso outset() makeOffset makeInset SkIRect::makeOutset
Cary Clarkbc5697d2017-10-04 14:31:33 -04001332
1333##
1334
1335# ------------------------------------------------------------------------------
1336
1337#Method void offset(SkScalar dx, SkScalar dy)
1338
Cary Clarkab2621d2018-01-30 10:08:57 -05001339#In Inset_Outset_Offset
1340#Line # translates sides without changing width and height ##
Cary Clark7fc1d122017-10-09 14:07:42 -04001341Offsets Rect by adding dx to fLeft, fRight; and by adding dy to fTop, fBottom.
Cary Clarkbc5697d2017-10-04 14:31:33 -04001342
Cary Clark7fc1d122017-10-09 14:07:42 -04001343If dx is negative, moves Rect to the left.
1344If dx is positive, moves Rect to the right.
1345If dy is negative, moves Rect upward.
1346If dy is positive, moves Rect downward.
1347
1348#Param dx offset added to fLeft and fRight ##
1349#Param dy offset added to fTop and fBottom ##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001350
1351#Example
Cary Clark154beea2017-10-26 07:58:48 -04001352 SkRect rect = { 10, 14, 50, 73 };
1353 rect.offset(5, 13);
1354 SkDebugf("rect: %g, %g, %g, %g\n", rect.fLeft, rect.fTop, rect.fRight, rect.fBottom);
1355#StdOut
1356rect: 15, 27, 55, 86
1357##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001358##
1359
Cary Clark7fc1d122017-10-09 14:07:42 -04001360#SeeAlso offsetTo makeOffset SkIRect::offset
Cary Clarkbc5697d2017-10-04 14:31:33 -04001361
1362##
1363
1364# ------------------------------------------------------------------------------
1365
1366#Method void offset(const SkPoint& delta)
1367
Cary Clarkab2621d2018-01-30 10:08:57 -05001368#In Inset_Outset_Offset
Cary Clark7fc1d122017-10-09 14:07:42 -04001369Offsets Rect by adding delta.fX to fLeft, fRight; and by adding delta.fY to
1370fTop, fBottom.
1371
1372If delta.fX is negative, moves Rect to the left.
1373If delta.fX is positive, moves Rect to the right.
1374If delta.fY is negative, moves Rect upward.
1375If delta.fY is positive, moves Rect downward.
1376
1377#Param delta added to Rect ##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001378
1379#Example
Cary Clark154beea2017-10-26 07:58:48 -04001380 SkRect rect = { 10, 14, 50, 73 };
1381 rect.offset({5, 13});
1382 SkDebugf("rect: %g, %g, %g, %g\n", rect.fLeft, rect.fTop, rect.fRight, rect.fBottom);
1383#StdOut
1384rect: 15, 27, 55, 86
1385##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001386##
1387
Cary Clark7fc1d122017-10-09 14:07:42 -04001388#SeeAlso offsetTo makeOffset SkIRect::offset
Cary Clarkbc5697d2017-10-04 14:31:33 -04001389
1390##
1391
1392# ------------------------------------------------------------------------------
1393
1394#Method void offsetTo(SkScalar newX, SkScalar newY)
1395
Cary Clarkab2621d2018-01-30 10:08:57 -05001396#In Inset_Outset_Offset
1397#Line # translates to (x, y) without changing width and height ##
Cary Clark7fc1d122017-10-09 14:07:42 -04001398Offsets Rect so that fLeft equals newX, and fTop equals newY. width and height
1399are unchanged.
Cary Clarkbc5697d2017-10-04 14:31:33 -04001400
Cary Clark7fc1d122017-10-09 14:07:42 -04001401#Param newX stored in fLeft, preserving width() ##
1402#Param newY stored in fTop, preserving height() ##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001403
1404#Example
Cary Clark154beea2017-10-26 07:58:48 -04001405 SkRect rect = { 10, 14, 50, 73 };
1406 rect.offsetTo(15, 27);
1407 SkDebugf("rect: %g, %g, %g, %g\n", rect.fLeft, rect.fTop, rect.fRight, rect.fBottom);
1408#StdOut
1409rect: 15, 27, 55, 86
1410##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001411##
1412
Cary Clark7fc1d122017-10-09 14:07:42 -04001413#SeeAlso offset makeOffset setXYWH SkIRect::offsetTo
Cary Clarkbc5697d2017-10-04 14:31:33 -04001414
1415##
1416
1417# ------------------------------------------------------------------------------
1418
1419#Method void inset(SkScalar dx, SkScalar dy)
1420
Cary Clarkab2621d2018-01-30 10:08:57 -05001421#In Inset_Outset_Offset
1422#Line # moves the sides symmetrically about the center ##
Cary Clark7fc1d122017-10-09 14:07:42 -04001423Insets Rect by (dx, dy).
Cary Clarkbc5697d2017-10-04 14:31:33 -04001424
Cary Clark7fc1d122017-10-09 14:07:42 -04001425If dx is positive, makes Rect narrower.
1426If dx is negative, makes Rect wider.
1427If dy is positive, makes Rect shorter.
1428If dy is negative, makes Rect taller.
1429
1430#Param dx added to fLeft and subtracted from fRight ##
1431#Param dy added to fTop and subtracted from fBottom ##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001432
1433#Example
Cary Clark154beea2017-10-26 07:58:48 -04001434 SkRect rect = { 10, 14, 50, 73 };
1435 rect.inset(5, 13);
1436 SkDebugf("rect: %g, %g, %g, %g\n", rect.fLeft, rect.fTop, rect.fRight, rect.fBottom);
1437#StdOut
1438rect: 15, 27, 45, 60
1439##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001440##
1441
Cary Clark7fc1d122017-10-09 14:07:42 -04001442#SeeAlso outset makeInset SkIRect::inset
Cary Clarkbc5697d2017-10-04 14:31:33 -04001443
1444##
1445
1446# ------------------------------------------------------------------------------
1447
1448#Method void outset(SkScalar dx, SkScalar dy)
1449
Cary Clarkab2621d2018-01-30 10:08:57 -05001450#In Inset_Outset_Offset
1451#Line # moves the sides symmetrically about the center ##
Cary Clark7fc1d122017-10-09 14:07:42 -04001452Outsets Rect by (dx, dy).
Cary Clarkbc5697d2017-10-04 14:31:33 -04001453
Cary Clark7fc1d122017-10-09 14:07:42 -04001454If dx is positive, makes Rect wider.
1455If dx is negative, makes Rect narrower.
1456If dy is positive, makes Rect taller.
1457If dy is negative, makes Rect shorter.
1458
1459#Param dx subtracted to fLeft and added from fRight ##
1460#Param dy subtracted to fTop and added from fBottom ##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001461
1462#Example
Cary Clark154beea2017-10-26 07:58:48 -04001463 SkRect rect = { 10, 14, 50, 73 };
1464 rect.outset(5, 13);
1465 SkDebugf("rect: %g, %g, %g, %g\n", rect.fLeft, rect.fTop, rect.fRight, rect.fBottom);
1466#StdOut
1467rect: 5, 1, 55, 86
1468##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001469##
1470
Cary Clark7fc1d122017-10-09 14:07:42 -04001471#SeeAlso inset makeOutset SkIRect::outset
Cary Clarkbc5697d2017-10-04 14:31:33 -04001472
1473##
1474
Cary Clark2dc84ad2018-01-26 12:56:22 -05001475#Subtopic Inset_Outset_Offset ##
1476
1477#Subtopic Intersection
Cary Clark08895c42018-02-01 09:37:32 -05001478#Line # set to shared bounds ##
Cary Clark7fc1d122017-10-09 14:07:42 -04001479
1480Rects intersect when they enclose a common area. To intersect, each of the pair
1481must describe area; fLeft is less than fRight, and fTop is less than fBottom;
Cary Clark154beea2017-10-26 07:58:48 -04001482empty() returns false. The intersection of Rect pair can be described by:
1483
Cary Clark7fc1d122017-10-09 14:07:42 -04001484#Formula
1485(max(a.fLeft, b.fLeft), max(a.fTop, b.fTop),
1486 min(a.fRight, b.fRight), min(a.fBottom, b.fBottom))
1487##
Cary Clark154beea2017-10-26 07:58:48 -04001488.
1489
Cary Clark7fc1d122017-10-09 14:07:42 -04001490The intersection is only meaningful if the resulting Rect is not empty and
1491describes an area: fLeft is less than fRight, and fTop is less than fBottom.
1492
Cary Clark4855f782018-02-06 09:41:53 -05001493#Populate
Cary Clark2dc84ad2018-01-26 12:56:22 -05001494
1495# ------------------------------------------------------------------------------
1496
Florin Malitaeb420452018-02-20 11:44:43 -05001497#Method bool contains(SkScalar x, SkScalar y) const
1498
1499#In Intersection
Cary Clarkedfe6702018-02-20 14:33:13 -05001500#Line # returns true if points are equal or inside ##
Florin Malitaeb420452018-02-20 11:44:43 -05001501Returns true if: fLeft <= x < fRight && fTop <= y < fBottom.
1502Returns false if SkRect is empty.
1503
1504#Param x test SkPoint x-coordinate ##
1505#Param y test SkPoint y-coordinate ##
1506
1507#Return true if (x, y) is inside SkRect ##
1508
1509#Example
1510 SkRect rect = { 30, 50, 40, 60 };
1511 SkPoint tests[] = { { 30, 50 }, { 39, 49 }, { 29, 59 } };
1512 for (auto contained : tests) {
1513 SkDebugf("rect: (%g, %g, %g, %g) %s (%g, %g)\n",
1514 rect.left(), rect.top(), rect.right(), rect.bottom(),
1515 rect.contains(contained.x(), contained.y()) ? "contains" : "does not contain",
1516 contained.x(), contained.y());
1517 }
1518#StdOut
1519rect: (30, 50, 40, 60) contains (30, 50)
1520rect: (30, 50, 40, 60) does not contain (39, 49)
1521rect: (30, 50, 40, 60) does not contain (29, 59)
1522##
1523##
1524
1525#SeeAlso SkIRect::contains
1526
1527##
1528
1529# ------------------------------------------------------------------------------
1530
Cary Clark2dc84ad2018-01-26 12:56:22 -05001531#Method bool contains(const SkRect& r) const
1532
Cary Clarkab2621d2018-01-30 10:08:57 -05001533#In Intersection
Cary Clark2dc84ad2018-01-26 12:56:22 -05001534Returns true if Rect contains r.
1535Returns false if Rect is empty or r is empty.
1536
1537Rect contains r when Rect area completely includes r area.
1538
1539#Param r Rect contained ##
1540
1541#Return true if all sides of Rect are outside r ##
1542
1543#Example
1544 SkRect rect = { 30, 50, 40, 60 };
1545 SkRect tests[] = { { 30, 50, 31, 51}, { 39, 49, 40, 50}, { 29, 59, 30, 60} };
1546 for (auto contained : tests) {
1547 SkDebugf("rect: (%g, %g, %g, %g) %s (%g, %g, %g, %g)\n",
1548 rect.left(), rect.top(), rect.right(), rect.bottom(),
1549 rect.contains(contained) ? "contains" : "does not contain",
1550 contained.left(), contained.top(), contained.right(), contained.bottom());
1551 }
1552#StdOut
1553rect: (30, 50, 40, 60) contains (30, 50, 31, 51)
1554rect: (30, 50, 40, 60) does not contain (39, 49, 40, 50)
1555rect: (30, 50, 40, 60) does not contain (29, 59, 30, 60)
1556##
1557##
1558
1559#SeeAlso SkIRect::contains
1560
1561##
1562
1563# ------------------------------------------------------------------------------
1564
1565#Method bool contains(const SkIRect& r) const
1566
Cary Clarkab2621d2018-01-30 10:08:57 -05001567#In Intersection
Cary Clark2dc84ad2018-01-26 12:56:22 -05001568Returns true if Rect contains r.
1569Returns false if Rect is empty or r is empty.
1570
1571Rect contains r when Rect area completely includes r area.
1572
1573#Param r IRect contained ##
1574
1575#Return true if all sides of Rect are outside r ##
1576
1577#Example
1578 SkRect rect = { 30, 50, 40, 60 };
1579 SkIRect tests[] = { { 30, 50, 31, 51}, { 39, 49, 40, 50}, { 29, 59, 30, 60} };
1580 for (auto contained : tests) {
1581 SkDebugf("rect: (%g, %g, %g, %g) %s (%d, %d, %d, %d)\n",
1582 rect.left(), rect.top(), rect.right(), rect.bottom(),
1583 rect.contains(contained) ? "contains" : "does not contain",
1584 contained.left(), contained.top(), contained.right(), contained.bottom());
1585 }
1586#StdOut
1587rect: (30, 50, 40, 60) contains (30, 50, 31, 51)
1588rect: (30, 50, 40, 60) does not contain (39, 49, 40, 50)
1589rect: (30, 50, 40, 60) does not contain (29, 59, 30, 60)
1590##
1591##
1592
1593#SeeAlso SkIRect::contains
1594
1595##
1596
Cary Clarkbc5697d2017-10-04 14:31:33 -04001597# ------------------------------------------------------------------------------
1598
1599#Method bool intersect(const SkRect& r)
1600
Cary Clarkab2621d2018-01-30 10:08:57 -05001601#In Intersection
1602#Line # sets to shared area; returns true if not empty ##
Cary Clark7fc1d122017-10-09 14:07:42 -04001603Returns true if Rect intersects r, and sets Rect to intersection.
1604Returns false if Rect does not intersect r, and leaves Rect unchanged.
Cary Clarkbc5697d2017-10-04 14:31:33 -04001605
Cary Clark7fc1d122017-10-09 14:07:42 -04001606Returns false if either r or Rect is empty, leaving Rect unchanged.
Cary Clarkbc5697d2017-10-04 14:31:33 -04001607
Cary Clark7fc1d122017-10-09 14:07:42 -04001608#Param r limit of result ##
1609
1610#Return true if r and Rect have area in common ##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001611
1612#Example
Cary Clark7fc1d122017-10-09 14:07:42 -04001613#Description
1614Two SkDebugf calls are required. If the calls are combined, their arguments
1615may not be evaluated in left to right order: the printed intersection may
1616be before or after the call to intersect.
1617##
Cary Clark154beea2017-10-26 07:58:48 -04001618 SkRect leftRect = { 10, 40, 50, 80 };
1619 SkRect rightRect = { 30, 60, 70, 90 };
1620 SkDebugf("%s intersection: ", leftRect.intersect(rightRect) ? "" : "no ");
1621 SkDebugf("%g, %g, %g, %g\n", leftRect.left(), leftRect.top(),
Cary Clark7fc1d122017-10-09 14:07:42 -04001622 leftRect.right(), leftRect.bottom());
1623#StdOut
1624 intersection: 30, 60, 50, 80
1625##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001626##
1627
Cary Clark7fc1d122017-10-09 14:07:42 -04001628#SeeAlso intersects Intersects join SkIRect::intersect
Cary Clarkbc5697d2017-10-04 14:31:33 -04001629
1630##
1631
1632# ------------------------------------------------------------------------------
1633
1634#Method bool intersect(SkScalar left, SkScalar top, SkScalar right, SkScalar bottom)
1635
Cary Clarkab2621d2018-01-30 10:08:57 -05001636#In Intersection
Cary Clark7fc1d122017-10-09 14:07:42 -04001637Constructs Rect to intersect from (left, top, right, bottom). Does not sort
1638construction.
Cary Clarkbc5697d2017-10-04 14:31:33 -04001639
Cary Clark7fc1d122017-10-09 14:07:42 -04001640Returns true if Rect intersects construction, and sets Rect to intersection.
1641Returns false if Rect does not intersect construction, and leaves Rect unchanged.
Cary Clarkbc5697d2017-10-04 14:31:33 -04001642
Cary Clark7fc1d122017-10-09 14:07:42 -04001643Returns false if either construction or Rect is empty, leaving Rect unchanged.
1644
1645#Param left x minimum of constructed Rect ##
1646#Param top y minimum of constructed Rect ##
1647#Param right x maximum of constructed Rect ##
1648#Param bottom y maximum of constructed Rect ##
1649
1650#Return true if construction and Rect have area in common ##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001651
1652#Example
Cary Clark7fc1d122017-10-09 14:07:42 -04001653#Description
1654Two SkDebugf calls are required. If the calls are combined, their arguments
1655may not be evaluated in left to right order: the printed intersection may
1656be before or after the call to intersect.
1657##
Cary Clark154beea2017-10-26 07:58:48 -04001658 SkRect leftRect = { 10, 40, 50, 80 };
1659 SkDebugf("%s intersection: ", leftRect.intersect(30, 60, 70, 90) ? "" : "no ");
1660 SkDebugf("%g, %g, %g, %g\n", leftRect.left(), leftRect.top(),
Cary Clark7fc1d122017-10-09 14:07:42 -04001661 leftRect.right(), leftRect.bottom());
1662#StdOut
1663 intersection: 30, 60, 50, 80
1664##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001665##
1666
Cary Clark7fc1d122017-10-09 14:07:42 -04001667#SeeAlso intersects Intersects join SkIRect::intersect
Cary Clarkbc5697d2017-10-04 14:31:33 -04001668
1669##
1670
1671# ------------------------------------------------------------------------------
1672
1673#Method bool SK_WARN_UNUSED_RESULT intersect(const SkRect& a, const SkRect& b)
1674
Cary Clarkab2621d2018-01-30 10:08:57 -05001675#In Intersection
Cary Clark7fc1d122017-10-09 14:07:42 -04001676Returns true if a intersects b, and sets Rect to intersection.
1677Returns false if a does not intersect b, and leaves Rect unchanged.
Cary Clarkbc5697d2017-10-04 14:31:33 -04001678
Cary Clark7fc1d122017-10-09 14:07:42 -04001679Returns false if either a or b is empty, leaving Rect unchanged.
Cary Clarkbc5697d2017-10-04 14:31:33 -04001680
Cary Clark7fc1d122017-10-09 14:07:42 -04001681#Param a Rect to intersect ##
1682#Param b Rect to intersect ##
1683
1684#Return true if a and b have area in common ##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001685
1686#Example
Cary Clark154beea2017-10-26 07:58:48 -04001687 SkRect result;
1688 bool intersected = result.intersect({ 10, 40, 50, 80 }, { 30, 60, 70, 90 });
1689 SkDebugf("%s intersection: %g, %g, %g, %g\n", intersected ? "" : "no ",
1690 result.left(), result.top(), result.right(), result.bottom());
Cary Clark7fc1d122017-10-09 14:07:42 -04001691#StdOut
1692 intersection: 30, 60, 50, 80
1693##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001694##
1695
Cary Clark7fc1d122017-10-09 14:07:42 -04001696#SeeAlso intersects Intersects join SkIRect::intersect
Cary Clarkbc5697d2017-10-04 14:31:33 -04001697
1698##
1699
Cary Clark7fc1d122017-10-09 14:07:42 -04001700# ------------------------------------------------------------------------------
1701
Cary Clarkbc5697d2017-10-04 14:31:33 -04001702#Method bool intersects(SkScalar left, SkScalar top, SkScalar right, SkScalar bottom) const
1703
Cary Clarkab2621d2018-01-30 10:08:57 -05001704#In Intersection
1705#Line # returns true if areas overlap ##
Cary Clark7fc1d122017-10-09 14:07:42 -04001706Constructs Rect to intersect from (left, top, right, bottom). Does not sort
1707construction.
Cary Clarkbc5697d2017-10-04 14:31:33 -04001708
Cary Clark7fc1d122017-10-09 14:07:42 -04001709Returns true if Rect intersects construction.
1710Returns false if either construction or Rect is empty, or do not intersect.
Cary Clarkbc5697d2017-10-04 14:31:33 -04001711
Cary Clark7fc1d122017-10-09 14:07:42 -04001712#Param left x minimum of constructed Rect ##
1713#Param top y minimum of constructed Rect ##
1714#Param right x maximum of constructed Rect ##
1715#Param bottom y maximum of constructed Rect ##
1716
1717#Return true if construction and Rect have area in common ##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001718
1719#Example
Cary Clark154beea2017-10-26 07:58:48 -04001720 SkRect rect = { 10, 40, 50, 80 };
1721 SkDebugf("%s intersection", rect.intersects(30, 60, 70, 90) ? "" : "no ");
Cary Clark7fc1d122017-10-09 14:07:42 -04001722#StdOut
1723 intersection
1724##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001725##
1726
Cary Clark7fc1d122017-10-09 14:07:42 -04001727#SeeAlso intersect Intersects SkIRect::Intersects
Cary Clarkbc5697d2017-10-04 14:31:33 -04001728
1729##
1730
Cary Clark7fc1d122017-10-09 14:07:42 -04001731# ------------------------------------------------------------------------------
1732
Cary Clarkbc5697d2017-10-04 14:31:33 -04001733#Method bool intersects(const SkRect& r) const
1734
Cary Clarkab2621d2018-01-30 10:08:57 -05001735#In Intersection
Cary Clark7fc1d122017-10-09 14:07:42 -04001736Returns true if Rect intersects r.
1737Returns false if either r or Rect is empty, or do not intersect.
Cary Clarkbc5697d2017-10-04 14:31:33 -04001738
Cary Clark7fc1d122017-10-09 14:07:42 -04001739#Param r Rect to intersect ##
1740
1741#Return true if r and Rect have area in common ##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001742
1743#Example
Cary Clark154beea2017-10-26 07:58:48 -04001744 SkRect rect = { 10, 40, 50, 80 };
1745 SkDebugf("%s intersection", rect.intersects({30, 60, 70, 90}) ? "" : "no ");
Cary Clark7fc1d122017-10-09 14:07:42 -04001746#StdOut
1747 intersection
1748##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001749##
1750
Cary Clark7fc1d122017-10-09 14:07:42 -04001751#SeeAlso intersect Intersects SkIRect::Intersects
Cary Clarkbc5697d2017-10-04 14:31:33 -04001752
1753##
1754
Cary Clark7fc1d122017-10-09 14:07:42 -04001755# ------------------------------------------------------------------------------
1756
Cary Clarkbc5697d2017-10-04 14:31:33 -04001757#Method static bool Intersects(const SkRect& a, const SkRect& b)
1758
Cary Clarkab2621d2018-01-30 10:08:57 -05001759#In Intersection
1760#Line # returns true if areas overlap ##
Cary Clark7fc1d122017-10-09 14:07:42 -04001761Returns true if a intersects b.
1762Returns false if either a or b is empty, or do not intersect.
Cary Clarkbc5697d2017-10-04 14:31:33 -04001763
Cary Clark7fc1d122017-10-09 14:07:42 -04001764#Param a Rect to intersect ##
1765#Param b Rect to intersect ##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001766
Cary Clark7fc1d122017-10-09 14:07:42 -04001767#Return true if a and b have area in common ##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001768
1769#Example
Cary Clark154beea2017-10-26 07:58:48 -04001770 SkDebugf("%s intersection", SkRect::Intersects({10, 40, 50, 80}, {30, 60, 70, 90}) ? "" : "no ");
Cary Clark7fc1d122017-10-09 14:07:42 -04001771#StdOut
1772 intersection
1773##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001774##
1775
Cary Clark7fc1d122017-10-09 14:07:42 -04001776#SeeAlso intersect intersects SkIRect::Intersects
Cary Clarkbc5697d2017-10-04 14:31:33 -04001777
1778##
1779
Cary Clark2dc84ad2018-01-26 12:56:22 -05001780#Subtopic Intersection ##
Cary Clark7fc1d122017-10-09 14:07:42 -04001781
Cary Clark2dc84ad2018-01-26 12:56:22 -05001782#Subtopic Join
Cary Clark08895c42018-02-01 09:37:32 -05001783#Line # set to union of bounds ##
Cary Clark2dc84ad2018-01-26 12:56:22 -05001784
Cary Clark4855f782018-02-06 09:41:53 -05001785#Populate
Cary Clark7fc1d122017-10-09 14:07:42 -04001786
1787# ------------------------------------------------------------------------------
Cary Clarkbc5697d2017-10-04 14:31:33 -04001788
1789#Method void join(SkScalar left, SkScalar top, SkScalar right, SkScalar bottom)
1790
Cary Clarkab2621d2018-01-30 10:08:57 -05001791#In Join
1792#Line # sets to union of bounds ##
Cary Clark7fc1d122017-10-09 14:07:42 -04001793Constructs Rect to intersect from (left, top, right, bottom). Does not sort
1794construction.
Cary Clarkbc5697d2017-10-04 14:31:33 -04001795
Cary Clark7fc1d122017-10-09 14:07:42 -04001796Sets Rect to the union of itself and the construction.
1797
1798Has no effect if construction is empty. Otherwise, if Rect is empty, sets
1799Rect to construction.
1800
1801#Param left x minimum of constructed Rect ##
1802#Param top y minimum of constructed Rect ##
1803#Param right x maximum of constructed Rect ##
1804#Param bottom y maximum of constructed Rect ##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001805
1806#Example
Cary Clark154beea2017-10-26 07:58:48 -04001807 SkRect rect = { 10, 20, 15, 25};
1808 rect.join(50, 60, 55, 65);
1809 SkDebugf("join: %g, %g, %g, %g\n", rect.fLeft, rect.fTop, rect.fRight, rect.fBottom);
Cary Clark7fc1d122017-10-09 14:07:42 -04001810#StdOut
1811 join: 10, 20, 55, 65
1812##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001813##
1814
Cary Clark7fc1d122017-10-09 14:07:42 -04001815#SeeAlso joinNonEmptyArg joinPossiblyEmptyRect SkIRect::join
Cary Clarkbc5697d2017-10-04 14:31:33 -04001816
1817##
1818
Cary Clark7fc1d122017-10-09 14:07:42 -04001819# ------------------------------------------------------------------------------
1820
Cary Clarkbc5697d2017-10-04 14:31:33 -04001821#Method void join(const SkRect& r)
1822
Cary Clarkab2621d2018-01-30 10:08:57 -05001823#In Join
Cary Clark7fc1d122017-10-09 14:07:42 -04001824Sets Rect to the union of itself and r.
Cary Clarkbc5697d2017-10-04 14:31:33 -04001825
Cary Clark7fc1d122017-10-09 14:07:42 -04001826Has no effect if r is empty. Otherwise, if Rect is empty, sets
1827Rect to r.
1828
1829#Param r expansion Rect ##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001830
1831#Example
Cary Clark154beea2017-10-26 07:58:48 -04001832 SkRect rect = { 10, 20, 15, 25};
1833 rect.join({50, 60, 55, 65});
1834 SkDebugf("join: %g, %g, %g, %g\n", rect.fLeft, rect.fTop, rect.fRight, rect.fBottom);
Cary Clark7fc1d122017-10-09 14:07:42 -04001835#StdOut
1836 join: 10, 20, 55, 65
1837##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001838##
1839
Cary Clark7fc1d122017-10-09 14:07:42 -04001840#SeeAlso joinNonEmptyArg joinPossiblyEmptyRect SkIRect::join
Cary Clarkbc5697d2017-10-04 14:31:33 -04001841
1842##
1843
Cary Clark7fc1d122017-10-09 14:07:42 -04001844# ------------------------------------------------------------------------------
1845
Cary Clarkbc5697d2017-10-04 14:31:33 -04001846#Method void joinNonEmptyArg(const SkRect& r)
1847
Cary Clarkab2621d2018-01-30 10:08:57 -05001848#In Join
1849#Line # sets to union of bounds, asserting that argument is not empty ##
Cary Clark7fc1d122017-10-09 14:07:42 -04001850Sets Rect to the union of itself and r.
1851
1852Asserts if r is empty and SK_DEBUG is defined.
1853If Rect is empty, sets Rect to r.
1854
1855May produce incorrect results if r is empty.
1856
1857#Param r expansion Rect ##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001858
1859#Example
Cary Clark7fc1d122017-10-09 14:07:42 -04001860#Description
1861Since Rect is not sorted, first result is copy of toJoin.
1862##
Cary Clark154beea2017-10-26 07:58:48 -04001863 SkRect rect = { 10, 100, 15, 0};
1864 SkRect sorted = rect.makeSorted();
1865 SkRect toJoin = { 50, 60, 55, 65 };
1866 rect.joinNonEmptyArg(toJoin);
1867 SkDebugf("rect: %g, %g, %g, %g\n", rect.fLeft, rect.fTop, rect.fRight, rect.fBottom);
1868 sorted.joinNonEmptyArg(toJoin);
Cary Clark7fc1d122017-10-09 14:07:42 -04001869 SkDebugf("sorted: %g, %g, %g, %g\n", sorted.fLeft, sorted.fTop, sorted.fRight, sorted.fBottom);
1870#StdOut
Cary Clark154beea2017-10-26 07:58:48 -04001871rect: 50, 60, 55, 65
Cary Clark7fc1d122017-10-09 14:07:42 -04001872sorted: 10, 0, 55, 100
1873##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001874##
1875
Cary Clark7fc1d122017-10-09 14:07:42 -04001876#SeeAlso join joinPossiblyEmptyRect SkIRect::join
Cary Clarkbc5697d2017-10-04 14:31:33 -04001877
1878##
1879
Cary Clark7fc1d122017-10-09 14:07:42 -04001880# ------------------------------------------------------------------------------
1881
Cary Clarkbc5697d2017-10-04 14:31:33 -04001882#Method void joinPossiblyEmptyRect(const SkRect& r)
1883
Cary Clarkab2621d2018-01-30 10:08:57 -05001884#In Join
1885#Line # sets to union of bounds. Skips empty check for both ##
Cary Clark7fc1d122017-10-09 14:07:42 -04001886Sets Rect to the union of itself and the construction.
Cary Clarkbc5697d2017-10-04 14:31:33 -04001887
Cary Clark7fc1d122017-10-09 14:07:42 -04001888May produce incorrect results if Rect or r is empty.
1889
1890#Param r expansion Rect ##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001891
1892#Example
Cary Clark7fc1d122017-10-09 14:07:42 -04001893#Description
1894Since Rect is not sorted, first result is not useful.
1895##
Cary Clark154beea2017-10-26 07:58:48 -04001896 SkRect rect = { 10, 100, 15, 0};
1897 SkRect sorted = rect.makeSorted();
1898 SkRect toJoin = { 50, 60, 55, 65 };
1899 rect.joinPossiblyEmptyRect(toJoin);
1900 SkDebugf("rect: %g, %g, %g, %g\n", rect.fLeft, rect.fTop, rect.fRight, rect.fBottom);
1901 sorted.joinPossiblyEmptyRect(toJoin);
1902 SkDebugf("sorted: %g, %g, %g, %g\n", sorted.fLeft, sorted.fTop, sorted.fRight, sorted.fBottom);
Cary Clark7fc1d122017-10-09 14:07:42 -04001903#StdOut
Cary Clark154beea2017-10-26 07:58:48 -04001904rect: 10, 60, 55, 65
Cary Clark7fc1d122017-10-09 14:07:42 -04001905sorted: 10, 0, 55, 100
1906##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001907##
1908
Cary Clark7fc1d122017-10-09 14:07:42 -04001909#SeeAlso joinNonEmptyArg join SkIRect::join
Cary Clarkbc5697d2017-10-04 14:31:33 -04001910
1911##
1912
Cary Clark2dc84ad2018-01-26 12:56:22 -05001913#Subtopic Join ##
Cary Clark7fc1d122017-10-09 14:07:42 -04001914
Cary Clark2dc84ad2018-01-26 12:56:22 -05001915#Subtopic Rounding
Cary Clark08895c42018-02-01 09:37:32 -05001916#Line # adjust to integer bounds ##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001917
Cary Clark4855f782018-02-06 09:41:53 -05001918#Populate
Cary Clark7fc1d122017-10-09 14:07:42 -04001919
Cary Clarkbc5697d2017-10-04 14:31:33 -04001920#Method void round(SkIRect* dst) const
1921
Cary Clarkab2621d2018-01-30 10:08:57 -05001922#In Rounding
1923#Line # sets members to nearest integer value ##
Cary Clark7fc1d122017-10-09 14:07:42 -04001924Sets IRect by adding 0.5 and discarding the fractional portion of Rect
1925members, using
1926#Formula
1927(SkScalarRoundToInt(fLeft), SkScalarRoundToInt(fTop),
1928 SkScalarRoundToInt(fRight), SkScalarRoundToInt(fBottom))
1929##
1930.
Cary Clarkbc5697d2017-10-04 14:31:33 -04001931
Cary Clark7fc1d122017-10-09 14:07:42 -04001932#Param dst storage for IRect ##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001933
1934#Example
Cary Clark154beea2017-10-26 07:58:48 -04001935 SkRect rect = { 30.5f, 50.5f, 40.5f, 60.5f };
1936 SkIRect round;
1937 rect.round(&round);
1938 SkDebugf("round: %d, %d, %d, %d\n", round.fLeft, round.fTop, round.fRight, round.fBottom);
Cary Clark7fc1d122017-10-09 14:07:42 -04001939#StdOut
1940round: 31, 51, 41, 61
1941##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001942##
1943
Cary Clark7fc1d122017-10-09 14:07:42 -04001944#SeeAlso roundIn roundOut SkScalarRoundToInt
Cary Clarkbc5697d2017-10-04 14:31:33 -04001945
1946##
1947
Cary Clark7fc1d122017-10-09 14:07:42 -04001948# ------------------------------------------------------------------------------
1949
Cary Clarkbc5697d2017-10-04 14:31:33 -04001950#Method void roundOut(SkIRect* dst) const
1951
Cary Clarkab2621d2018-01-30 10:08:57 -05001952#In Rounding
1953#Line # sets members to nearest integer value away from opposite ##
Cary Clark7fc1d122017-10-09 14:07:42 -04001954Sets IRect by discarding the fractional portion of fLeft and fTop; and
Cary Clark78c110e2018-02-09 16:49:09 -05001955rounding up fRight and fBottom, using
Cary Clark7fc1d122017-10-09 14:07:42 -04001956#Formula
1957(SkScalarFloorToInt(fLeft), SkScalarFloorToInt(fTop),
1958 SkScalarCeilToInt(fRight), SkScalarCeilToInt(fBottom))
1959##
1960.
Cary Clarkbc5697d2017-10-04 14:31:33 -04001961
Cary Clark7fc1d122017-10-09 14:07:42 -04001962#Param dst storage for IRect ##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001963
1964#Example
Cary Clark154beea2017-10-26 07:58:48 -04001965 SkRect rect = { 30.5f, 50.5f, 40.5f, 60.5f };
1966 SkIRect round;
1967 rect.roundOut(&round);
1968 SkDebugf("round: %d, %d, %d, %d\n", round.fLeft, round.fTop, round.fRight, round.fBottom);
Cary Clark7fc1d122017-10-09 14:07:42 -04001969#StdOut
1970round: 30, 50, 41, 61
1971##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001972##
1973
Cary Clark7fc1d122017-10-09 14:07:42 -04001974#SeeAlso roundIn round SkScalarRoundToInt
Cary Clarkbc5697d2017-10-04 14:31:33 -04001975
1976##
1977
Cary Clark7fc1d122017-10-09 14:07:42 -04001978# ------------------------------------------------------------------------------
1979
Cary Clarkbc5697d2017-10-04 14:31:33 -04001980#Method void roundOut(SkRect* dst) const
1981
Cary Clarkab2621d2018-01-30 10:08:57 -05001982#In Rounding
Cary Clark7fc1d122017-10-09 14:07:42 -04001983Sets Rect by discarding the fractional portion of fLeft and fTop; and
Cary Clark78c110e2018-02-09 16:49:09 -05001984rounding up fRight and fBottom, using
Cary Clark7fc1d122017-10-09 14:07:42 -04001985#Formula
1986(SkScalarFloorToInt(fLeft), SkScalarFloorToInt(fTop),
1987 SkScalarCeilToInt(fRight), SkScalarCeilToInt(fBottom))
1988##
1989.
Cary Clarkbc5697d2017-10-04 14:31:33 -04001990
Cary Clark7fc1d122017-10-09 14:07:42 -04001991#Param dst storage for Rect ##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001992
1993#Example
Cary Clark154beea2017-10-26 07:58:48 -04001994 SkRect rect = { 30.5f, 50.5f, 40.5f, 60.5f };
1995 SkRect round;
1996 rect.roundOut(&round);
1997 SkDebugf("round: %g, %g, %g, %g\n", round.fLeft, round.fTop, round.fRight, round.fBottom);
Cary Clark7fc1d122017-10-09 14:07:42 -04001998#StdOut
1999round: 30, 50, 41, 61
2000##
Cary Clarkbc5697d2017-10-04 14:31:33 -04002001##
2002
Cary Clark7fc1d122017-10-09 14:07:42 -04002003#SeeAlso roundIn round SkScalarRoundToInt
Cary Clarkbc5697d2017-10-04 14:31:33 -04002004
2005##
2006
Cary Clark7fc1d122017-10-09 14:07:42 -04002007# ------------------------------------------------------------------------------
2008
Cary Clarkbc5697d2017-10-04 14:31:33 -04002009#Method void roundIn(SkIRect* dst) const
2010
Cary Clarkab2621d2018-01-30 10:08:57 -05002011#In Rounding
2012#Line # sets members to nearest integer value towards opposite ##
Cary Clark7fc1d122017-10-09 14:07:42 -04002013Sets Rect by rounding up fLeft and fTop; and
Cary Clark78c110e2018-02-09 16:49:09 -05002014discarding the fractional portion of fRight and fBottom, using
Cary Clark154beea2017-10-26 07:58:48 -04002015
Cary Clark7fc1d122017-10-09 14:07:42 -04002016#Formula
2017(SkScalarCeilToInt(fLeft), SkScalarCeilToInt(fTop),
2018 SkScalarFloorToInt(fRight), SkScalarFloorToInt(fBottom))
2019##
2020.
Cary Clarkbc5697d2017-10-04 14:31:33 -04002021
Cary Clark7fc1d122017-10-09 14:07:42 -04002022#Param dst storage for IRect ##
Cary Clarkbc5697d2017-10-04 14:31:33 -04002023
2024#Example
Cary Clark154beea2017-10-26 07:58:48 -04002025 SkRect rect = { 30.5f, 50.5f, 40.5f, 60.5f };
2026 SkIRect round;
2027 rect.roundIn(&round);
2028 SkDebugf("round: %d, %d, %d, %d\n", round.fLeft, round.fTop, round.fRight, round.fBottom);
Cary Clark7fc1d122017-10-09 14:07:42 -04002029#StdOut
Cary Clark154beea2017-10-26 07:58:48 -04002030round: 31, 51, 40, 60
Cary Clark7fc1d122017-10-09 14:07:42 -04002031##
Cary Clarkbc5697d2017-10-04 14:31:33 -04002032##
2033
Cary Clark7fc1d122017-10-09 14:07:42 -04002034#SeeAlso roundOut round SkScalarRoundToInt
Cary Clarkbc5697d2017-10-04 14:31:33 -04002035
2036##
2037
Cary Clark7fc1d122017-10-09 14:07:42 -04002038# ------------------------------------------------------------------------------
2039
Cary Clarkbc5697d2017-10-04 14:31:33 -04002040#Method SkIRect round() const
2041
Cary Clarkab2621d2018-01-30 10:08:57 -05002042#In Rounding
Cary Clark7fc1d122017-10-09 14:07:42 -04002043Returns IRect by adding 0.5 and discarding the fractional portion of Rect
2044members, using
2045#Formula
2046(SkScalarRoundToInt(fLeft), SkScalarRoundToInt(fTop),
2047 SkScalarRoundToInt(fRight), SkScalarRoundToInt(fBottom))
2048##
2049.
Cary Clarkbc5697d2017-10-04 14:31:33 -04002050
Cary Clark7fc1d122017-10-09 14:07:42 -04002051#Return rounded IRect ##
Cary Clarkbc5697d2017-10-04 14:31:33 -04002052
2053#Example
Cary Clark154beea2017-10-26 07:58:48 -04002054 SkRect rect = { 30.5f, 50.5f, 40.5f, 60.5f };
2055 SkIRect round = rect.round();
2056 SkDebugf("round: %d, %d, %d, %d\n", round.fLeft, round.fTop, round.fRight, round.fBottom);
Cary Clark7fc1d122017-10-09 14:07:42 -04002057#StdOut
Cary Clark154beea2017-10-26 07:58:48 -04002058round: 31, 51, 41, 61
Cary Clark7fc1d122017-10-09 14:07:42 -04002059##
Cary Clarkbc5697d2017-10-04 14:31:33 -04002060##
2061
Cary Clark7fc1d122017-10-09 14:07:42 -04002062#SeeAlso roundOut roundIn SkScalarRoundToInt
Cary Clarkbc5697d2017-10-04 14:31:33 -04002063
2064##
2065
Cary Clark7fc1d122017-10-09 14:07:42 -04002066# ------------------------------------------------------------------------------
2067
Cary Clarkbc5697d2017-10-04 14:31:33 -04002068#Method SkIRect roundOut() const
2069
Cary Clarkab2621d2018-01-30 10:08:57 -05002070#In Rounding
Cary Clark7fc1d122017-10-09 14:07:42 -04002071Sets IRect by discarding the fractional portion of fLeft and fTop; and
Cary Clark78c110e2018-02-09 16:49:09 -05002072rounding up fRight and fBottom, using
Cary Clark7fc1d122017-10-09 14:07:42 -04002073#Formula
2074(SkScalarFloorToInt(fLeft), SkScalarFloorToInt(fTop),
2075 SkScalarCeilToInt(fRight), SkScalarCeilToInt(fBottom))
2076##
2077.
Cary Clarkbc5697d2017-10-04 14:31:33 -04002078
Cary Clark7fc1d122017-10-09 14:07:42 -04002079#Return rounded IRect ##
Cary Clarkbc5697d2017-10-04 14:31:33 -04002080
2081#Example
Cary Clark154beea2017-10-26 07:58:48 -04002082 SkRect rect = { 30.5f, 50.5f, 40.5f, 60.5f };
2083 SkIRect round = rect.roundOut();
2084 SkDebugf("round: %d, %d, %d, %d\n", round.fLeft, round.fTop, round.fRight, round.fBottom);
Cary Clark7fc1d122017-10-09 14:07:42 -04002085#StdOut
Cary Clark154beea2017-10-26 07:58:48 -04002086round: 30, 50, 41, 61
Cary Clark7fc1d122017-10-09 14:07:42 -04002087##
Cary Clarkbc5697d2017-10-04 14:31:33 -04002088##
2089
Cary Clark7fc1d122017-10-09 14:07:42 -04002090#SeeAlso round roundIn SkScalarRoundToInt
Cary Clarkbc5697d2017-10-04 14:31:33 -04002091
2092##
2093
Cary Clark2dc84ad2018-01-26 12:56:22 -05002094#Subtopic Rounding ##
2095
2096#Subtopic Sorting
Cary Clark08895c42018-02-01 09:37:32 -05002097#Line # orders sides ##
Cary Clark2dc84ad2018-01-26 12:56:22 -05002098
Cary Clark4855f782018-02-06 09:41:53 -05002099#Populate
Cary Clark7fc1d122017-10-09 14:07:42 -04002100
2101# ------------------------------------------------------------------------------
2102
Cary Clarkbc5697d2017-10-04 14:31:33 -04002103#Method void sort()
2104
Cary Clarkab2621d2018-01-30 10:08:57 -05002105#In Sorting
2106#Line # orders sides from smaller to larger ##
Cary Clark7fc1d122017-10-09 14:07:42 -04002107Swaps fLeft and fRight if fLeft is greater than fRight; and swaps
2108fTop and fBottom if fTop is greater than fBottom. Result may be empty;
2109and width() and height() will be zero or positive.
Cary Clarkbc5697d2017-10-04 14:31:33 -04002110
2111#Example
Cary Clark154beea2017-10-26 07:58:48 -04002112 SkRect rect = { 30.5f, 50.5f, 20.5f, 10.5f };
2113 SkDebugf("rect: %g, %g, %g, %g\n", rect.fLeft, rect.fTop, rect.fRight, rect.fBottom);
2114 rect.sort();
2115 SkDebugf("sorted: %g, %g, %g, %g\n", rect.fLeft, rect.fTop, rect.fRight, rect.fBottom);
Cary Clark7fc1d122017-10-09 14:07:42 -04002116#StdOut
Cary Clark154beea2017-10-26 07:58:48 -04002117rect: 30.5, 50.5, 20.5, 10.5
Cary Clark7fc1d122017-10-09 14:07:42 -04002118sorted: 20.5, 10.5, 30.5, 50.5
2119##
Cary Clarkbc5697d2017-10-04 14:31:33 -04002120##
2121
Cary Clark2dc84ad2018-01-26 12:56:22 -05002122#SeeAlso makeSorted SkIRect::sort isSorted
Cary Clarkbc5697d2017-10-04 14:31:33 -04002123
2124##
2125
Cary Clark7fc1d122017-10-09 14:07:42 -04002126# ------------------------------------------------------------------------------
2127
Cary Clarkbc5697d2017-10-04 14:31:33 -04002128#Method SkRect makeSorted() const
2129
Cary Clarkab2621d2018-01-30 10:08:57 -05002130#In Sorting
Cary Clark4855f782018-02-06 09:41:53 -05002131#In Constructor
Cary Clarkab2621d2018-01-30 10:08:57 -05002132#Line # constructs, ordering sides from smaller to larger ##
Cary Clark7fc1d122017-10-09 14:07:42 -04002133Returns Rect with fLeft and fRight swapped if fLeft is greater than fRight; and
2134with fTop and fBottom swapped if fTop is greater than fBottom. Result may be empty;
2135and width() and height() will be zero or positive.
Cary Clarkbc5697d2017-10-04 14:31:33 -04002136
Cary Clark7fc1d122017-10-09 14:07:42 -04002137#Return sorted Rect ##
Cary Clarkbc5697d2017-10-04 14:31:33 -04002138
2139#Example
Cary Clark154beea2017-10-26 07:58:48 -04002140 SkRect rect = { 30.5f, 50.5f, 20.5f, 10.5f };
2141 SkDebugf("rect: %g, %g, %g, %g\n", rect.fLeft, rect.fTop, rect.fRight, rect.fBottom);
2142 SkRect sort = rect.makeSorted();
2143 SkDebugf("sorted: %g, %g, %g, %g\n", sort.fLeft, sort.fTop, sort.fRight, sort.fBottom);
Cary Clark7fc1d122017-10-09 14:07:42 -04002144#StdOut
Cary Clark154beea2017-10-26 07:58:48 -04002145rect: 30.5, 50.5, 20.5, 10.5
Cary Clark7fc1d122017-10-09 14:07:42 -04002146sorted: 20.5, 10.5, 30.5, 50.5
2147##
Cary Clarkbc5697d2017-10-04 14:31:33 -04002148##
2149
Cary Clark2dc84ad2018-01-26 12:56:22 -05002150#SeeAlso sort SkIRect::makeSorted isSorted
Cary Clarkbc5697d2017-10-04 14:31:33 -04002151
2152##
2153
Cary Clark2dc84ad2018-01-26 12:56:22 -05002154#Subtopic Sorting ##
2155
Cary Clark7fc1d122017-10-09 14:07:42 -04002156# ------------------------------------------------------------------------------
2157
Cary Clarkbc5697d2017-10-04 14:31:33 -04002158#Method const SkScalar* asScalars() const
Cary Clark4855f782018-02-06 09:41:53 -05002159#In Property
Cary Clarkab2621d2018-01-30 10:08:57 -05002160#Line # returns pointer to members as array ##
Cary Clark7fc1d122017-10-09 14:07:42 -04002161Returns pointer to first Scalar in Rect, to treat it as an array with four
2162entries.
Cary Clarkbc5697d2017-10-04 14:31:33 -04002163
Cary Clark7fc1d122017-10-09 14:07:42 -04002164#Return pointer to fLeft ##
Cary Clarkbc5697d2017-10-04 14:31:33 -04002165
2166#Example
Cary Clark154beea2017-10-26 07:58:48 -04002167 SkRect rect = {7, 11, 13, 17};
2168SkDebugf("rect.asScalars() %c= &rect.fLeft\n", rect.asScalars() == &rect.fLeft? '=' : '!');
2169#StdOut
2170rect.asScalars() == &rect.fLeft
2171##
Cary Clarkbc5697d2017-10-04 14:31:33 -04002172##
2173
Cary Clark7fc1d122017-10-09 14:07:42 -04002174#SeeAlso toQuad
2175
Cary Clarkbc5697d2017-10-04 14:31:33 -04002176##
2177
Cary Clark7fc1d122017-10-09 14:07:42 -04002178# ------------------------------------------------------------------------------
2179
Cary Clarkbc5697d2017-10-04 14:31:33 -04002180#Method void dump(bool asHex) const
Cary Clark4855f782018-02-06 09:41:53 -05002181#In Property
Cary Clarkab2621d2018-01-30 10:08:57 -05002182#Line # sends text representation to standard output using floats ##
Cary Clark7fc1d122017-10-09 14:07:42 -04002183Writes text representation of Rect to standard output. Set asHex to true to
2184generate exact binary representations of floating point numbers.
2185
2186#Param asHex true if SkScalar values are written as hexadecimal ##
Cary Clarkbc5697d2017-10-04 14:31:33 -04002187
2188#Example
Cary Clark7fc1d122017-10-09 14:07:42 -04002189 SkRect rect = {20, 30, 40, 50};
2190 for (bool dumpAsHex : { false, true } ) {
2191 rect.dump(dumpAsHex);
2192 SkDebugf("\n");
2193 }
2194#StdOut
Cary Clark154beea2017-10-26 07:58:48 -04002195SkRect::MakeLTRB(20, 30, 40, 50);
2196
2197SkRect::MakeLTRB(SkBits2Float(0x41a00000), /* 20.000000 */
2198 SkBits2Float(0x41f00000), /* 30.000000 */
2199 SkBits2Float(0x42200000), /* 40.000000 */
2200 SkBits2Float(0x42480000) /* 50.000000 */);
Cary Clark7fc1d122017-10-09 14:07:42 -04002201##
Cary Clarkbc5697d2017-10-04 14:31:33 -04002202##
2203
Cary Clark7fc1d122017-10-09 14:07:42 -04002204#SeeAlso dumpHex
2205
Cary Clarkbc5697d2017-10-04 14:31:33 -04002206##
2207
Cary Clark7fc1d122017-10-09 14:07:42 -04002208# ------------------------------------------------------------------------------
2209
Cary Clarkbc5697d2017-10-04 14:31:33 -04002210#Method void dump() const
2211
Cary Clark7fc1d122017-10-09 14:07:42 -04002212Writes text representation of Rect to standard output. The representation may be
2213directly compiled as C++ code. Floating point values are written
2214with limited precision; it may not be possible to reconstruct original Rect
2215from output.
2216
Cary Clarkbc5697d2017-10-04 14:31:33 -04002217#Example
Cary Clark154beea2017-10-26 07:58:48 -04002218SkRect rect = {6.f / 7, 2.f / 3, 26.f / 10, 42.f / 6};
2219rect.dump();
2220SkRect copy = SkRect::MakeLTRB(0.857143f, 0.666667f, 2.6f, 7);
2221SkDebugf("rect is " "%s" "equal to copy\n", rect == copy ? "" : "not ");
Cary Clark7fc1d122017-10-09 14:07:42 -04002222#StdOut
Cary Clark154beea2017-10-26 07:58:48 -04002223SkRect::MakeLTRB(0.857143f, 0.666667f, 2.6f, 7);
Cary Clark7fc1d122017-10-09 14:07:42 -04002224rect is not equal to copy
2225##
Cary Clarkbc5697d2017-10-04 14:31:33 -04002226##
2227
Cary Clark7fc1d122017-10-09 14:07:42 -04002228#SeeAlso dumpHex
2229
Cary Clarkbc5697d2017-10-04 14:31:33 -04002230##
2231
Cary Clark7fc1d122017-10-09 14:07:42 -04002232# ------------------------------------------------------------------------------
2233
Cary Clarkbc5697d2017-10-04 14:31:33 -04002234#Method void dumpHex() const
Cary Clark4855f782018-02-06 09:41:53 -05002235#In Property
Cary Clarkab2621d2018-01-30 10:08:57 -05002236#Line # sends text representation to standard output using hexadecimal ##
Cary Clark7fc1d122017-10-09 14:07:42 -04002237Writes text representation of Rect to standard output. The representation may be
2238directly compiled as C++ code. Floating point values are written
2239in hexadecimal to preserve their exact bit pattern. The output reconstructs the
2240original Rect.
2241
2242Use instead of dump() when submitting
2243#A bug reports against Skia # http://bug.skia.org ##
2244.
2245
Cary Clarkbc5697d2017-10-04 14:31:33 -04002246#Example
Cary Clark154beea2017-10-26 07:58:48 -04002247 SkRect rect = {6.f / 7, 2.f / 3, 26.f / 10, 42.f / 6};
2248rect.dumpHex();
2249SkRect copy = SkRect::MakeLTRB(SkBits2Float(0x3f5b6db7), /* 0.857143 */
2250 SkBits2Float(0x3f2aaaab), /* 0.666667 */
2251 SkBits2Float(0x40266666), /* 2.600000 */
2252 SkBits2Float(0x40e00000) /* 7.000000 */);
Cary Clark7fc1d122017-10-09 14:07:42 -04002253SkDebugf("rect is " "%s" "equal to copy\n", rect == copy ? "" : "not ");
2254#StdOut
Cary Clark154beea2017-10-26 07:58:48 -04002255SkRect::MakeLTRB(SkBits2Float(0x3f5b6db7), /* 0.857143 */
2256 SkBits2Float(0x3f2aaaab), /* 0.666667 */
2257 SkBits2Float(0x40266666), /* 2.600000 */
2258 SkBits2Float(0x40e00000) /* 7.000000 */);
Cary Clark7fc1d122017-10-09 14:07:42 -04002259rect is equal to copy
Cary Clarkbc5697d2017-10-04 14:31:33 -04002260##
Cary Clark7fc1d122017-10-09 14:07:42 -04002261##
2262
2263#SeeAlso dump
Cary Clarkbc5697d2017-10-04 14:31:33 -04002264
2265##
2266
Cary Clark0c95aab2018-01-08 16:20:59 -05002267#Method static SkRect SK_WARN_UNUSED_RESULT MakeLargest()
Cary Clark0c95aab2018-01-08 16:20:59 -05002268#Deprecated
2269##
2270
Cary Clarkbc5697d2017-10-04 14:31:33 -04002271#Struct SkRect ##
2272
2273#Topic Rect ##