blob: a776adcab3c3b2471d2b3f3ecdebdaf626c3a9d6 [file] [log] [blame]
Cary Clarkbc5697d2017-10-04 14:31:33 -04001#Topic Rect
Cary Clark137b8742018-05-30 09:21:49 -04002#Alias Rects ##
3#Alias Rect_Reference ##
Cary Clarkbc5697d2017-10-04 14:31:33 -04004
5#Struct SkRect
6
Cary Clark61313f32018-10-08 14:57:48 -04007#Code
8#Populate
9##
10
Cary Clark7fc1d122017-10-09 14:07:42 -040011SkRect holds four SkScalar coordinates describing the upper and
Cary Clark682c58d2018-05-16 07:07:07 -040012lower bounds of a rectangle. SkRect may be created from outer bounds or
Cary Clark7fc1d122017-10-09 14:07:42 -040013from position, width, and height. SkRect describes an area; if its right
14is less than or equal to its left, or if its bottom is less than or equal to
15its top, it is considered empty.
16
17# move to topic about MakeIWH and friends
18SkRect can be constructed from int values to avoid compiler warnings that
19integer input cannot convert to SkScalar without loss of precision.
20
Cary Clarkbc5697d2017-10-04 14:31:33 -040021#Member SkScalar fLeft
Cary Clark08895c42018-02-01 09:37:32 -050022#Line # smaller x-axis bounds ##
Cary Clark7fc1d122017-10-09 14:07:42 -040023May contain any value, including infinities and NaN. The smaller of the
24horizontal values when sorted. When equal to or greater than fRight, Rect is empty.
Cary Clarkbc5697d2017-10-04 14:31:33 -040025##
26
27#Member SkScalar fTop
Cary Clark08895c42018-02-01 09:37:32 -050028#Line # smaller y-axis bounds ##
Cary Clark7fc1d122017-10-09 14:07:42 -040029May contain any value, including infinities and NaN. The smaller of the
30vertical values when sorted. When equal to or greater than fBottom, Rect is empty.
Cary Clarkbc5697d2017-10-04 14:31:33 -040031##
32
33#Member SkScalar fRight
Cary Clark08895c42018-02-01 09:37:32 -050034#Line # larger x-axis bounds ##
Cary Clark7fc1d122017-10-09 14:07:42 -040035May contain any value, including infinities and NaN. The larger of the
36horizontal values when sorted. When equal to or less than fLeft, Rect is empty.
Cary Clarkbc5697d2017-10-04 14:31:33 -040037##
38
39#Member SkScalar fBottom
Cary Clark08895c42018-02-01 09:37:32 -050040#Line # larger y-axis bounds ##
Cary Clark7fc1d122017-10-09 14:07:42 -040041May contain any value, including infinities and NaN. The larger of the
42vertical values when sorted. When equal to or less than fTop, Rect is empty.
Cary Clarkbc5697d2017-10-04 14:31:33 -040043##
44
45# ------------------------------------------------------------------------------
46
Cary Clark61313f32018-10-08 14:57:48 -040047#Method static constexpr SkRect MakeEmpty()
Cary Clarkbc5697d2017-10-04 14:31:33 -040048
Cary Clark61313f32018-10-08 14:57:48 -040049#In Constructors
Cary Clarkab2621d2018-01-30 10:08:57 -050050#Line # constructs from bounds of (0, 0, 0, 0) ##
Cary Clark09d80c02018-10-31 12:14:03 -040051#Populate
Cary Clarkbc5697d2017-10-04 14:31:33 -040052
53#Example
Cary Clark154beea2017-10-26 07:58:48 -040054 SkRect rect = SkRect::MakeEmpty();
55 SkDebugf("MakeEmpty isEmpty: %s\n", rect.isEmpty() ? "true" : "false");
56 rect.offset(10, 10);
57 SkDebugf("offset rect isEmpty: %s\n", rect.isEmpty() ? "true" : "false");
58 rect.inset(10, 10);
59 SkDebugf("inset rect isEmpty: %s\n", rect.isEmpty() ? "true" : "false");
60 rect.outset(20, 20);
61 SkDebugf("outset rect isEmpty: %s\n", rect.isEmpty() ? "true" : "false");
62#StdOut
63MakeEmpty isEmpty: true
64offset rect isEmpty: true
65inset rect isEmpty: true
66outset rect isEmpty: false
67##
Cary Clarkbc5697d2017-10-04 14:31:33 -040068##
69
Mike Reed274218e2018-01-08 15:05:02 -050070#SeeAlso isEmpty setEmpty SkIRect::MakeEmpty
Cary Clark884dd7d2017-10-11 10:37:52 -040071
72##
73
74# ------------------------------------------------------------------------------
75
Cary Clark61313f32018-10-08 14:57:48 -040076#Method static constexpr SkRect MakeWH(SkScalar w, SkScalar h)
Cary Clarkbc5697d2017-10-04 14:31:33 -040077
Cary Clark61313f32018-10-08 14:57:48 -040078#In Constructors
Cary Clarkab2621d2018-01-30 10:08:57 -050079#Line # constructs from SkScalar input returning (0, 0, width, height) ##
Cary Clark09d80c02018-10-31 12:14:03 -040080#Populate
Cary Clarkbc5697d2017-10-04 14:31:33 -040081
82#Example
Cary Clark154beea2017-10-26 07:58:48 -040083 SkRect rect1 = SkRect::MakeWH(25, 35);
84 SkRect rect2 = SkRect::MakeIWH(25, 35);
85 SkRect rect3 = SkRect::MakeXYWH(0, 0, 25, 35);
86 SkRect rect4 = SkRect::MakeLTRB(0, 0, 25, 35);
87 SkDebugf("all %s" "equal\n", rect1 == rect2 && rect2 == rect3 && rect3 == rect4 ?
Cary Clark7fc1d122017-10-09 14:07:42 -040088 "" : "not ");
89#StdOut
90all equal
91##
Cary Clarkbc5697d2017-10-04 14:31:33 -040092##
93
Cary Clark7fc1d122017-10-09 14:07:42 -040094#SeeAlso MakeSize MakeXYWH MakeIWH setWH SkIRect::MakeWH
Cary Clarkbc5697d2017-10-04 14:31:33 -040095
96##
97
98# ------------------------------------------------------------------------------
99
Cary Clark61313f32018-10-08 14:57:48 -0400100#Method static SkRect MakeIWH(int w, int h)
Cary Clarkbc5697d2017-10-04 14:31:33 -0400101
Cary Clark61313f32018-10-08 14:57:48 -0400102#In Constructors
Cary Clarkab2621d2018-01-30 10:08:57 -0500103#Line # constructs from int input returning (0, 0, width, height) ##
Cary Clark09d80c02018-10-31 12:14:03 -0400104#Populate
Cary Clarkbc5697d2017-10-04 14:31:33 -0400105
106#Example
Cary Clark154beea2017-10-26 07:58:48 -0400107 SkIRect i_rect = SkIRect::MakeWH(25, 35);
108 SkRect f_rect = SkRect::MakeIWH(25, 35);
109 SkDebugf("i_rect width: %d f_rect width:%g\n", i_rect.width(), f_rect.width());
110 i_rect = SkIRect::MakeWH(125000111, 0);
111 f_rect = SkRect::MakeIWH(125000111, 0);
112 SkDebugf("i_rect width: %d f_rect width:%.0f\n", i_rect.width(), f_rect.width());
Cary Clark7fc1d122017-10-09 14:07:42 -0400113#StdOut
Cary Clark154beea2017-10-26 07:58:48 -0400114i_rect width: 25 f_rect width:25
Cary Clark7fc1d122017-10-09 14:07:42 -0400115i_rect width: 125000111 f_rect width:125000112
116##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400117##
118
Cary Clark7fc1d122017-10-09 14:07:42 -0400119#SeeAlso MakeXYWH MakeWH isetWH SkIRect::MakeWH
Cary Clarkbc5697d2017-10-04 14:31:33 -0400120
121##
122
123# ------------------------------------------------------------------------------
124
Cary Clark61313f32018-10-08 14:57:48 -0400125#Method static constexpr SkRect MakeSize(const SkSize& size)
Cary Clarkbc5697d2017-10-04 14:31:33 -0400126
Cary Clark61313f32018-10-08 14:57:48 -0400127#In Constructors
Cary Clarkab2621d2018-01-30 10:08:57 -0500128#Line # constructs from Size returning (0, 0, width, height) ##
Cary Clark09d80c02018-10-31 12:14:03 -0400129#Populate
Cary Clarkbc5697d2017-10-04 14:31:33 -0400130
131#Example
Cary Clark154beea2017-10-26 07:58:48 -0400132 SkSize size = {25.5f, 35.5f};
133 SkRect rect = SkRect::MakeSize(size);
134 SkDebugf("rect width: %g height: %g\n", rect.width(), rect.height());
135 SkISize floor = size.toFloor();
136 rect = SkRect::MakeSize(SkSize::Make(floor));
137 SkDebugf("floor width: %g height: %g\n", rect.width(), rect.height());
Cary Clark7fc1d122017-10-09 14:07:42 -0400138#StdOut
Cary Clark154beea2017-10-26 07:58:48 -0400139rect width: 25.5 height: 35.5
Cary Clark7fc1d122017-10-09 14:07:42 -0400140floor width: 25 height: 35
141##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400142##
143
Cary Clark7fc1d122017-10-09 14:07:42 -0400144#SeeAlso MakeWH MakeXYWH MakeIWH setWH SkIRect::MakeWH
Cary Clarkbc5697d2017-10-04 14:31:33 -0400145
146##
147
148# ------------------------------------------------------------------------------
149
Cary Clark61313f32018-10-08 14:57:48 -0400150#Method static constexpr SkRect MakeLTRB(SkScalar l, SkScalar t, SkScalar r,
Cary Clarkbc5697d2017-10-04 14:31:33 -0400151 SkScalar b)
Cary Clark61313f32018-10-08 14:57:48 -0400152#In Constructors
Cary Clarkab2621d2018-01-30 10:08:57 -0500153#Line # constructs from SkScalar left, top, right, bottom ##
Cary Clark09d80c02018-10-31 12:14:03 -0400154#Populate
Cary Clarkbc5697d2017-10-04 14:31:33 -0400155
156#Example
Cary Clark154beea2017-10-26 07:58:48 -0400157 SkRect rect = SkRect::MakeLTRB(5, 35, 15, 25);
158 SkDebugf("rect: %g, %g, %g, %g isEmpty: %s\n", rect.left(), rect.top(), rect.right(),
159 rect.bottom(), rect.isEmpty() ? "true" : "false");
160 rect.sort();
161 SkDebugf("rect: %g, %g, %g, %g isEmpty: %s\n", rect.left(), rect.top(), rect.right(),
162 rect.bottom(), rect.isEmpty() ? "true" : "false");
Cary Clark7fc1d122017-10-09 14:07:42 -0400163#StdOut
Cary Clark154beea2017-10-26 07:58:48 -0400164rect: 5, 35, 15, 25 isEmpty: true
Cary Clark7fc1d122017-10-09 14:07:42 -0400165rect: 5, 25, 15, 35 isEmpty: false
166##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400167##
168
Cary Clark7fc1d122017-10-09 14:07:42 -0400169#SeeAlso MakeXYWH SkIRect::MakeLTRB
Cary Clarkbc5697d2017-10-04 14:31:33 -0400170
171##
172
173# ------------------------------------------------------------------------------
174
Cary Clark61313f32018-10-08 14:57:48 -0400175#Method static constexpr SkRect MakeXYWH(SkScalar x, SkScalar y, SkScalar w, SkScalar h)
Cary Clarkbc5697d2017-10-04 14:31:33 -0400176
Cary Clark61313f32018-10-08 14:57:48 -0400177#In Constructors
Cary Clarkab2621d2018-01-30 10:08:57 -0500178#Line # constructs from SkScalar input returning (x, y, width, height) ##
Cary Clark2be81cf2018-09-13 12:04:30 -0400179Returns constructed Rect set to #Formula # (x, y, x + w, y + h) ##.
180Does not validate input; w or h may be negative.
Cary Clarkbc5697d2017-10-04 14:31:33 -0400181
Cary Clark7fc1d122017-10-09 14:07:42 -0400182#Param x stored in fLeft ##
183#Param y stored in fTop ##
184#Param w added to x and stored in fRight ##
185#Param h added to y and stored in fBottom ##
186
Cary Clark884dd7d2017-10-11 10:37:52 -0400187#Return bounds at (x, y) with width w and height h ##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400188
189#Example
Cary Clark154beea2017-10-26 07:58:48 -0400190 SkRect rect = SkRect::MakeXYWH(5, 35, -15, 25);
191 SkDebugf("rect: %g, %g, %g, %g isEmpty: %s\n", rect.left(), rect.top(), rect.right(),
192 rect.bottom(), rect.isEmpty() ? "true" : "false");
193 rect.sort();
194 SkDebugf("rect: %g, %g, %g, %g isEmpty: %s\n", rect.left(), rect.top(), rect.right(),
195 rect.bottom(), rect.isEmpty() ? "true" : "false");
Cary Clark7fc1d122017-10-09 14:07:42 -0400196#StdOut
Cary Clark154beea2017-10-26 07:58:48 -0400197rect: 5, 35, -10, 60 isEmpty: true
Cary Clark7fc1d122017-10-09 14:07:42 -0400198rect: -10, 35, 5, 60 isEmpty: false
199##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400200##
201
Cary Clark7fc1d122017-10-09 14:07:42 -0400202#SeeAlso MakeLTRB SkIRect::MakeXYWH
Cary Clarkbc5697d2017-10-04 14:31:33 -0400203
204##
205
206# ------------------------------------------------------------------------------
207
Cary Clarkbc5697d2017-10-04 14:31:33 -0400208#Method static SkRect Make(const SkISize& size)
209
Cary Clark61313f32018-10-08 14:57:48 -0400210#In Constructors
Cary Clarkab2621d2018-01-30 10:08:57 -0500211#Line # constructs from ISize returning (0, 0, width, height) ##
Cary Clarka64e4ee2018-10-18 08:30:34 -0400212#Populate
Cary Clarkbc5697d2017-10-04 14:31:33 -0400213
214#Example
Cary Clark154beea2017-10-26 07:58:48 -0400215 SkRect rect1 = SkRect::MakeSize({2, 35});
216 SkRect rect2 = SkRect::MakeIWH(2, 35);
217 SkDebugf("rect1 %c= rect2\n", rect1 == rect2 ? '=' : '!');
Cary Clark7fc1d122017-10-09 14:07:42 -0400218#StdOut
219rect1 == rect2
220##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400221##
222
Cary Clark7fc1d122017-10-09 14:07:42 -0400223#SeeAlso MakeWH MakeXYWH SkRect::MakeIWH SkIRect::MakeSize
Cary Clarkbc5697d2017-10-04 14:31:33 -0400224
225##
226
227# ------------------------------------------------------------------------------
228
Cary Clark61313f32018-10-08 14:57:48 -0400229#Method static SkRect Make(const SkIRect& irect)
Cary Clarkbc5697d2017-10-04 14:31:33 -0400230
Cary Clark61313f32018-10-08 14:57:48 -0400231#In Constructors
Cary Clark09d80c02018-10-31 12:14:03 -0400232#Populate
Cary Clarkbc5697d2017-10-04 14:31:33 -0400233
234#Example
Cary Clark154beea2017-10-26 07:58:48 -0400235 SkIRect i_rect1 = {2, 35, 22, 53};
236 SkRect f_rect = SkRect::Make(i_rect1);
237 f_rect.offset(0.49f, 0.49f);
238 SkIRect i_rect2;
239 f_rect.round(&i_rect2);
240 SkDebugf("i_rect1 %c= i_rect2\n", i_rect1 == i_rect2? '=' : '!');
Cary Clarkbc5697d2017-10-04 14:31:33 -0400241##
242
Cary Clark7fc1d122017-10-09 14:07:42 -0400243#SeeAlso MakeLTRB
Cary Clarkbc5697d2017-10-04 14:31:33 -0400244
245##
246
Cary Clark4855f782018-02-06 09:41:53 -0500247#Subtopic Property
248#Line # member values, center, validity ##
Cary Clark2dc84ad2018-01-26 12:56:22 -0500249
Cary Clarkbc5697d2017-10-04 14:31:33 -0400250# ------------------------------------------------------------------------------
251
252#Method bool isEmpty() const
253
Cary Clark4855f782018-02-06 09:41:53 -0500254#In Property
Cary Clarkab2621d2018-01-30 10:08:57 -0500255#Line # returns true if width or height are zero or negative ##
Cary Clark09d80c02018-10-31 12:14:03 -0400256#Populate
Cary Clarkbc5697d2017-10-04 14:31:33 -0400257
258#Example
Cary Clark154beea2017-10-26 07:58:48 -0400259 SkRect tests[] = {{20, 40, 10, 50}, {20, 40, 20, 50}};
260 for (auto rect : tests) {
261 SkDebugf("rect: {%g, %g, %g, %g} is" "%s empty\n", rect.left(), rect.top(), rect.right(),
262 rect.bottom(), rect.isEmpty() ? "" : " not");
263 rect.sort();
264 SkDebugf("sorted: {%g, %g, %g, %g} is" "%s empty\n", rect.left(), rect.top(), rect.right(),
265 rect.bottom(), rect.isEmpty() ? "" : " not");
266 }
267#StdOut
268rect: {20, 40, 10, 50} is empty
269sorted: {10, 40, 20, 50} is not empty
270rect: {20, 40, 20, 50} is empty
271sorted: {20, 40, 20, 50} is empty
272##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400273##
274
Cary Clark7fc1d122017-10-09 14:07:42 -0400275#SeeAlso MakeEmpty sort SkIRect::isEmpty
Cary Clarkbc5697d2017-10-04 14:31:33 -0400276
277##
278
279# ------------------------------------------------------------------------------
280
281#Method bool isSorted() const
282
Cary Clark4855f782018-02-06 09:41:53 -0500283#In Property
Cary Clarkab2621d2018-01-30 10:08:57 -0500284#Line # returns true if width or height are zero or positive ##
Cary Clark09d80c02018-10-31 12:14:03 -0400285#Populate
Cary Clarkbc5697d2017-10-04 14:31:33 -0400286
287#Example
Cary Clark154beea2017-10-26 07:58:48 -0400288 SkRect tests[] = {{20, 40, 10, 50}, {20, 40, 20, 50}};
289 for (auto rect : tests) {
290 SkDebugf("rect: {%g, %g, %g, %g} is" "%s sorted\n", rect.left(), rect.top(), rect.right(),
291 rect.bottom(), rect.isSorted() ? "" : " not");
292 rect.sort();
293 SkDebugf("sorted: {%g, %g, %g, %g} is" "%s sorted\n", rect.left(), rect.top(), rect.right(),
294 rect.bottom(), rect.isSorted() ? "" : " not");
295 }
296#StdOut
297rect: {20, 40, 10, 50} is not sorted
298sorted: {10, 40, 20, 50} is sorted
299rect: {20, 40, 20, 50} is sorted
300sorted: {20, 40, 20, 50} is sorted
301##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400302##
303
Cary Clark7fc1d122017-10-09 14:07:42 -0400304#SeeAlso sort makeSorted isEmpty
Cary Clarkbc5697d2017-10-04 14:31:33 -0400305
306##
307
308# ------------------------------------------------------------------------------
309
Cary Clarkbc5697d2017-10-04 14:31:33 -0400310#Method bool isFinite() const
311
Cary Clark4855f782018-02-06 09:41:53 -0500312#In Property
Cary Clarkab2621d2018-01-30 10:08:57 -0500313#Line # returns true if no member is infinite or NaN ##
Cary Clark09d80c02018-10-31 12:14:03 -0400314#Populate
Cary Clarkbc5697d2017-10-04 14:31:33 -0400315
316#Example
Mike Reed274218e2018-01-08 15:05:02 -0500317SkRect largest = { SK_ScalarMin, SK_ScalarMin, SK_ScalarMax, SK_ScalarMax };
Cary Clark154beea2017-10-26 07:58:48 -0400318 SkDebugf("largest is finite: %s\n", largest.isFinite() ? "true" : "false");
319 SkDebugf("large width %g\n", largest.width());
320 SkRect widest = SkRect::MakeWH(largest.width(), largest.height());
321 SkDebugf("widest is finite: %s\n", widest.isFinite() ? "true" : "false");
322#StdOut
323largest is finite: true
324large width inf
Cary Clark7fc1d122017-10-09 14:07:42 -0400325widest is finite: false
326##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400327##
328
Cary Clark7fc1d122017-10-09 14:07:42 -0400329#SeeAlso SkScalarIsFinite SkScalarIsNaN
Cary Clarkbc5697d2017-10-04 14:31:33 -0400330
331##
332
333# ------------------------------------------------------------------------------
334
335#Method SkScalar x() const
336
Cary Clark4855f782018-02-06 09:41:53 -0500337#In Property
Cary Clarkab2621d2018-01-30 10:08:57 -0500338#Line # returns bounds left ##
Cary Clark09d80c02018-10-31 12:14:03 -0400339#Populate
Cary Clarkbc5697d2017-10-04 14:31:33 -0400340
341#Example
Cary Clark154beea2017-10-26 07:58:48 -0400342 SkRect unsorted = { 15, 5, 10, 25 };
343 SkDebugf("unsorted.fLeft: %g unsorted.x(): %g\n", unsorted.fLeft, unsorted.x());
344 SkRect sorted = unsorted.makeSorted();
345 SkDebugf("sorted.fLeft: %g sorted.x(): %g\n", sorted.fLeft, sorted.x());
Cary Clark7fc1d122017-10-09 14:07:42 -0400346#StdOut
Cary Clark154beea2017-10-26 07:58:48 -0400347unsorted.fLeft: 15 unsorted.x(): 15
Cary Clark7fc1d122017-10-09 14:07:42 -0400348sorted.fLeft: 10 sorted.x(): 10
349##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400350##
351
Cary Clark7fc1d122017-10-09 14:07:42 -0400352#SeeAlso fLeft left() y() SkIRect::x()
Cary Clarkbc5697d2017-10-04 14:31:33 -0400353
354##
355
356# ------------------------------------------------------------------------------
357
358#Method SkScalar y() const
359
Cary Clark4855f782018-02-06 09:41:53 -0500360#In Property
Cary Clarkab2621d2018-01-30 10:08:57 -0500361#Line # returns bounds top ##
Cary Clark09d80c02018-10-31 12:14:03 -0400362#Populate
Cary Clarkbc5697d2017-10-04 14:31:33 -0400363
364#Example
Cary Clark154beea2017-10-26 07:58:48 -0400365 SkRect unsorted = { 15, 25, 10, 5 };
366 SkDebugf("unsorted.fTop: %g unsorted.y(): %g\n", unsorted.fTop, unsorted.y());
367 SkRect sorted = unsorted.makeSorted();
Cary Clark7fc1d122017-10-09 14:07:42 -0400368 SkDebugf("sorted.fTop: %g sorted.y(): %g\n", sorted.fTop, sorted.y());
369#StdOut
Cary Clark154beea2017-10-26 07:58:48 -0400370unsorted.fTop: 25 unsorted.y(): 25
Cary Clark7fc1d122017-10-09 14:07:42 -0400371sorted.fTop: 5 sorted.y(): 5
372##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400373##
374
Cary Clark7fc1d122017-10-09 14:07:42 -0400375#SeeAlso fTop top() x() SkIRect::y()
Cary Clarkbc5697d2017-10-04 14:31:33 -0400376
377##
378
379# ------------------------------------------------------------------------------
380
381#Method SkScalar left() const
382
Cary Clark4855f782018-02-06 09:41:53 -0500383#In Property
Cary Clarkab2621d2018-01-30 10:08:57 -0500384#Line # returns smaller bounds in x, if sorted ##
Cary Clark09d80c02018-10-31 12:14:03 -0400385#Populate
Cary Clarkbc5697d2017-10-04 14:31:33 -0400386
387#Example
Cary Clark154beea2017-10-26 07:58:48 -0400388 SkRect unsorted = { 15, 5, 10, 25 };
389 SkDebugf("unsorted.fLeft: %g unsorted.left(): %g\n", unsorted.fLeft, unsorted.left());
390 SkRect sorted = unsorted.makeSorted();
391 SkDebugf("sorted.fLeft: %g sorted.left(): %g\n", sorted.fLeft, sorted.left());
Cary Clark7fc1d122017-10-09 14:07:42 -0400392#StdOut
Cary Clark154beea2017-10-26 07:58:48 -0400393unsorted.fLeft: 15 unsorted.left(): 15
Cary Clark7fc1d122017-10-09 14:07:42 -0400394sorted.fLeft: 10 sorted.left(): 10
395##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400396##
397
Cary Clark7fc1d122017-10-09 14:07:42 -0400398#SeeAlso fLeft x() SkIRect::left()
Cary Clarkbc5697d2017-10-04 14:31:33 -0400399
400##
401
402# ------------------------------------------------------------------------------
403
404#Method SkScalar top() const
405
Cary Clark4855f782018-02-06 09:41:53 -0500406#In Property
Cary Clarkab2621d2018-01-30 10:08:57 -0500407#Line # returns smaller bounds in y, if sorted ##
Cary Clark09d80c02018-10-31 12:14:03 -0400408#Populate
Cary Clarkbc5697d2017-10-04 14:31:33 -0400409
410#Example
Cary Clark154beea2017-10-26 07:58:48 -0400411 SkRect unsorted = { 15, 25, 10, 5 };
412 SkDebugf("unsorted.fTop: %g unsorted.top(): %g\n", unsorted.fTop, unsorted.top());
413 SkRect sorted = unsorted.makeSorted();
Cary Clark7fc1d122017-10-09 14:07:42 -0400414 SkDebugf("sorted.fTop: %g sorted.top(): %g\n", sorted.fTop, sorted.top());
415#StdOut
Cary Clark154beea2017-10-26 07:58:48 -0400416unsorted.fTop: 25 unsorted.top(): 25
Cary Clark7fc1d122017-10-09 14:07:42 -0400417sorted.fTop: 5 sorted.top(): 5
418##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400419##
420
Cary Clark7fc1d122017-10-09 14:07:42 -0400421#SeeAlso fTop y() SkIRect::top()
Cary Clarkbc5697d2017-10-04 14:31:33 -0400422
423##
424
425# ------------------------------------------------------------------------------
426
427#Method SkScalar right() const
428
Cary Clark4855f782018-02-06 09:41:53 -0500429#In Property
Cary Clarkab2621d2018-01-30 10:08:57 -0500430#Line # returns larger bounds in x, if sorted ##
Cary Clark09d80c02018-10-31 12:14:03 -0400431#Populate
Cary Clarkbc5697d2017-10-04 14:31:33 -0400432
433#Example
Cary Clark154beea2017-10-26 07:58:48 -0400434 SkRect unsorted = { 15, 25, 10, 5 };
435 SkDebugf("unsorted.fRight: %g unsorted.right(): %g\n", unsorted.fRight, unsorted.right());
436 SkRect sorted = unsorted.makeSorted();
437 SkDebugf("sorted.fRight: %g sorted.right(): %g\n", sorted.fRight, sorted.right());
Cary Clark7fc1d122017-10-09 14:07:42 -0400438#StdOut
Cary Clark154beea2017-10-26 07:58:48 -0400439unsorted.fRight: 10 unsorted.right(): 10
Cary Clark7fc1d122017-10-09 14:07:42 -0400440sorted.fRight: 15 sorted.right(): 15
441##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400442##
443
Cary Clark7fc1d122017-10-09 14:07:42 -0400444#SeeAlso fRight SkIRect::right()
Cary Clarkbc5697d2017-10-04 14:31:33 -0400445
446##
447
448# ------------------------------------------------------------------------------
449
450#Method SkScalar bottom() const
451
Cary Clark4855f782018-02-06 09:41:53 -0500452#In Property
Cary Clarkab2621d2018-01-30 10:08:57 -0500453#Line # returns larger bounds in y, if sorted ##
Cary Clark09d80c02018-10-31 12:14:03 -0400454#Populate
Cary Clarkbc5697d2017-10-04 14:31:33 -0400455
456#Example
Cary Clark154beea2017-10-26 07:58:48 -0400457 SkRect unsorted = { 15, 25, 10, 5 };
458 SkDebugf("unsorted.fBottom: %g unsorted.bottom(): %g\n", unsorted.fBottom, unsorted.bottom());
459 SkRect sorted = unsorted.makeSorted();
460 SkDebugf("sorted.fBottom: %g sorted.bottom(): %g\n", sorted.fBottom, sorted.bottom());
Cary Clark7fc1d122017-10-09 14:07:42 -0400461#StdOut
Cary Clark154beea2017-10-26 07:58:48 -0400462unsorted.fBottom: 5 unsorted.bottom(): 5
Cary Clark7fc1d122017-10-09 14:07:42 -0400463sorted.fBottom: 25 sorted.bottom(): 25
464##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400465##
466
Cary Clark7fc1d122017-10-09 14:07:42 -0400467#SeeAlso fBottom SkIRect::bottom()
Cary Clarkbc5697d2017-10-04 14:31:33 -0400468
469##
470
471# ------------------------------------------------------------------------------
472
473#Method SkScalar width() const
474
Cary Clark4855f782018-02-06 09:41:53 -0500475#In Property
Cary Clarkab2621d2018-01-30 10:08:57 -0500476#Line # returns span in x ##
Cary Clark09d80c02018-10-31 12:14:03 -0400477#Populate
Cary Clarkbc5697d2017-10-04 14:31:33 -0400478
479#Example
Cary Clark7fc1d122017-10-09 14:07:42 -0400480#Description
481Compare with SkIRect::width() example.
482##
Cary Clark154beea2017-10-26 07:58:48 -0400483 SkRect unsorted = { 15, 25, 10, 5 };
484 SkDebugf("unsorted width: %g\n", unsorted.width());
485 SkRect large = { -2147483647.f, 1, 2147483644.f, 2 };
486 SkDebugf("large width: %.0f\n", large.width());
Cary Clark7fc1d122017-10-09 14:07:42 -0400487#StdOut
Cary Clark154beea2017-10-26 07:58:48 -0400488unsorted width: -5
Cary Clark7fc1d122017-10-09 14:07:42 -0400489large width: 4294967296
490##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400491##
492
Cary Clark7fc1d122017-10-09 14:07:42 -0400493#SeeAlso height() SkIRect::width()
Cary Clarkbc5697d2017-10-04 14:31:33 -0400494
495##
496
497# ------------------------------------------------------------------------------
498
499#Method SkScalar height() const
500
Cary Clark4855f782018-02-06 09:41:53 -0500501#In Property
Cary Clarkab2621d2018-01-30 10:08:57 -0500502#Line # returns span in y ##
Cary Clark09d80c02018-10-31 12:14:03 -0400503#Populate
Cary Clarkbc5697d2017-10-04 14:31:33 -0400504
505#Example
Cary Clark7fc1d122017-10-09 14:07:42 -0400506#Description
507Compare with SkIRect::height() example.
508##
Cary Clark154beea2017-10-26 07:58:48 -0400509 SkRect unsorted = { 15, 25, 10, 20 };
510 SkDebugf("unsorted height: %g\n", unsorted.height());
511 SkRect large = { 1, -2147483647.f, 2, 2147483644.f };
512 SkDebugf("large height: %.0f\n", large.height());
Cary Clark7fc1d122017-10-09 14:07:42 -0400513#StdOut
Cary Clark154beea2017-10-26 07:58:48 -0400514unsorted height: -5
Cary Clark7fc1d122017-10-09 14:07:42 -0400515large height: 4294967296
516##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400517##
518
Cary Clark7fc1d122017-10-09 14:07:42 -0400519#SeeAlso width() SkIRect::height()
Cary Clarkbc5697d2017-10-04 14:31:33 -0400520
521##
522
523# ------------------------------------------------------------------------------
524
525#Method SkScalar centerX() const
526
Cary Clark4855f782018-02-06 09:41:53 -0500527#In Property
Cary Clarkab2621d2018-01-30 10:08:57 -0500528#Line # returns midpoint in x ##
Cary Clark09d80c02018-10-31 12:14:03 -0400529#Populate
Cary Clarkbc5697d2017-10-04 14:31:33 -0400530
531#Example
Cary Clark154beea2017-10-26 07:58:48 -0400532 SkRect tests[] = {{20, 30, 41, 51}, {-20, -30, -41, -51}};
533 for (auto rect : tests) {
534 SkDebugf("left: %3g right: %3g centerX: %3g\n", rect.left(), rect.right(), rect.centerX());
535 rect.sort();
536 SkDebugf("left: %3g right: %3g centerX: %3g\n", rect.left(), rect.right(), rect.centerX());
537 }
Cary Clark7fc1d122017-10-09 14:07:42 -0400538#StdOut
Cary Clark154beea2017-10-26 07:58:48 -0400539left: 20 right: 41 centerX: 30.5
540left: 20 right: 41 centerX: 30.5
541left: -20 right: -41 centerX: -30.5
Cary Clark7fc1d122017-10-09 14:07:42 -0400542left: -41 right: -20 centerX: -30.5
543##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400544##
545
Cary Clark47d7dae2018-04-11 16:54:35 -0400546#SeeAlso centerY
Cary Clarkbc5697d2017-10-04 14:31:33 -0400547
548##
549
550# ------------------------------------------------------------------------------
551
552#Method SkScalar centerY() const
553
Cary Clark4855f782018-02-06 09:41:53 -0500554#In Property
Cary Clarkab2621d2018-01-30 10:08:57 -0500555#Line # returns midpoint in y ##
Cary Clark09d80c02018-10-31 12:14:03 -0400556#Populate
Cary Clarkbc5697d2017-10-04 14:31:33 -0400557
558#Example
Cary Clark154beea2017-10-26 07:58:48 -0400559 SkRect rect = { 2e+38, 2e+38, 3e+38, 3e+38 };
560 SkDebugf("left: %g right: %g centerX: %g ", rect.left(), rect.right(), rect.centerX());
561 SkDebugf("safe mid x: %g\n", rect.left() / 2 + rect.right() / 2);
Cary Clark7fc1d122017-10-09 14:07:42 -0400562#StdOut
Cary Clark75fd4492018-06-20 12:45:16 -0400563left: 2e+38 right: 3e+38 centerX: 2.5e+38 safe mid x: 2.5e+38
Cary Clark7fc1d122017-10-09 14:07:42 -0400564##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400565##
566
Cary Clark47d7dae2018-04-11 16:54:35 -0400567#SeeAlso centerX
Cary Clarkbc5697d2017-10-04 14:31:33 -0400568
569##
570
Cary Clark4855f782018-02-06 09:41:53 -0500571#Subtopic Property ##
Cary Clark2dc84ad2018-01-26 12:56:22 -0500572
Cary Clark61313f32018-10-08 14:57:48 -0400573#Subtopic Operators
Cary Clark2dc84ad2018-01-26 12:56:22 -0500574
Cary Clarkbc5697d2017-10-04 14:31:33 -0400575# ------------------------------------------------------------------------------
576
Cary Clark884dd7d2017-10-11 10:37:52 -0400577#Method bool operator==(const SkRect& a, const SkRect& b)
Cary Clarkbc5697d2017-10-04 14:31:33 -0400578
Cary Clark61313f32018-10-08 14:57:48 -0400579#In Operators
Cary Clarkab2621d2018-01-30 10:08:57 -0500580#Line # returns true if members are equal ##
Cary Clark09d80c02018-10-31 12:14:03 -0400581#Populate
Cary Clarkbc5697d2017-10-04 14:31:33 -0400582
583#Example
Cary Clark154beea2017-10-26 07:58:48 -0400584 auto debugster = [](const SkRect& test) -> void {
585 SkRect negZero = {-0.0f, -0.0f, 2, 2};
586 SkDebugf("{%g, %g, %g, %g} %c= {%g, %g, %g, %g} %s numerically equal\n",
587 test.fLeft, test.fTop, test.fRight, test.fBottom,
588 negZero.fLeft, negZero.fTop, negZero.fRight, negZero.fBottom,
589 test == negZero ? '=' : '!',
590 test.fLeft == negZero.fLeft && test.fTop == negZero.fTop &&
591 test.fRight == negZero.fRight && test.fBottom == negZero.fBottom ?
592 "and are" : "yet are not");
593 };
594 SkRect tests[] = {{0, 0, 2, 2}, {-0, -0, 2, 2}, {0.0f, 0.0f, 2, 2}};
595 SkDebugf("tests are %s" "equal\n", tests[0] == tests[1] && tests[1] == tests[2] ? "" : "not ");
596 for (auto rect : tests) {
597 debugster(rect);
Cary Clark7fc1d122017-10-09 14:07:42 -0400598 }
Cary Clark154beea2017-10-26 07:58:48 -0400599#StdOut
600tests are equal
601{0, 0, 2, 2} == {-0, -0, 2, 2} and are numerically equal
602{0, 0, 2, 2} == {-0, -0, 2, 2} and are numerically equal
Cary Clark682c58d2018-05-16 07:07:07 -0400603{0, 0, 2, 2} == {-0, -0, 2, 2} and are numerically equal
Cary Clark7fc1d122017-10-09 14:07:42 -0400604##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400605##
606
Cary Clark7fc1d122017-10-09 14:07:42 -0400607#SeeAlso operator!=(const SkRect& a, const SkRect& b)
Cary Clarkbc5697d2017-10-04 14:31:33 -0400608
609##
610
611# ------------------------------------------------------------------------------
612
Cary Clark884dd7d2017-10-11 10:37:52 -0400613#Method bool operator!=(const SkRect& a, const SkRect& b)
Cary Clarkbc5697d2017-10-04 14:31:33 -0400614
Cary Clark61313f32018-10-08 14:57:48 -0400615#In Operators
Cary Clarkab2621d2018-01-30 10:08:57 -0500616#Line # returns true if members are unequal ##
Cary Clark09d80c02018-10-31 12:14:03 -0400617#Populate
Cary Clarkbc5697d2017-10-04 14:31:33 -0400618
619#Example
Cary Clark154beea2017-10-26 07:58:48 -0400620 SkRect test = {0, 0, 2, SK_ScalarNaN};
621 SkDebugf("test with NaN is %s" "equal to itself\n", test == test ? "" : "not ");
622#StdOut
Cary Clark682c58d2018-05-16 07:07:07 -0400623test with NaN is not equal to itself
Cary Clark7fc1d122017-10-09 14:07:42 -0400624##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400625##
626
Cary Clark7fc1d122017-10-09 14:07:42 -0400627#SeeAlso operator==(const SkRect& a, const SkRect& b)
Cary Clarkbc5697d2017-10-04 14:31:33 -0400628
629##
630
Cary Clark61313f32018-10-08 14:57:48 -0400631#Subtopic Operators ##
Cary Clark2dc84ad2018-01-26 12:56:22 -0500632
633#Subtopic As_Points
Cary Clark08895c42018-02-01 09:37:32 -0500634#Line # conversion to and from Points ##
Cary Clark2dc84ad2018-01-26 12:56:22 -0500635
Cary Clarkbc5697d2017-10-04 14:31:33 -0400636# ------------------------------------------------------------------------------
637
638#Method void toQuad(SkPoint quad[4]) const
639
Cary Clarkab2621d2018-01-30 10:08:57 -0500640#In As_Points
641#Line # returns four corners as Point ##
Cary Clark7fc1d122017-10-09 14:07:42 -0400642Returns four points in quad that enclose Rect ordered as: top-left, top-right,
Cary Clark682c58d2018-05-16 07:07:07 -0400643bottom-right, bottom-left.
Cary Clark7fc1d122017-10-09 14:07:42 -0400644
645#Private
Cary Clark682c58d2018-05-16 07:07:07 -0400646Consider adding param to control whether quad is clockwise or counterclockwise.
Cary Clarkbc5697d2017-10-04 14:31:33 -0400647##
648
Cary Clark7fc1d122017-10-09 14:07:42 -0400649#Param quad storage for corners of Rect ##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400650
651#Example
Cary Clark154beea2017-10-26 07:58:48 -0400652 SkRect rect = {1, 2, 3, 4};
653 SkPoint corners[4];
654 rect.toQuad(corners);
655 SkDebugf("rect: {%g, %g, %g, %g}\n", rect.fLeft, rect.fTop, rect.fRight, rect.fBottom);
656 SkDebugf("corners:");
657 for (auto corner : corners) {
658 SkDebugf(" {%g, %g}", corner.fX, corner.fY);
659 }
660 SkDebugf("\n");
661#StdOut
662rect: {1, 2, 3, 4}
Cary Clark682c58d2018-05-16 07:07:07 -0400663corners: {1, 2} {3, 2} {3, 4} {1, 4}
Cary Clark7fc1d122017-10-09 14:07:42 -0400664##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400665##
666
Cary Clark7fc1d122017-10-09 14:07:42 -0400667#SeeAlso SkPath::addRect
Cary Clarkbc5697d2017-10-04 14:31:33 -0400668
669##
670
671# ------------------------------------------------------------------------------
672
Cary Clark2dc84ad2018-01-26 12:56:22 -0500673#Method void setBounds(const SkPoint pts[], int count)
674
Cary Clarkab2621d2018-01-30 10:08:57 -0500675#In As_Points
676#Line # sets to upper and lower limits of Point array ##
Cary Clark09d80c02018-10-31 12:14:03 -0400677#Populate
Cary Clark2dc84ad2018-01-26 12:56:22 -0500678
679#Example
680 SkPoint points[] = {{3, 4}, {1, 2}, {5, 6}, {SK_ScalarNaN, 8}};
681 for (int count = 0; count <= (int) SK_ARRAY_COUNT(points); ++count) {
682 SkRect rect;
683 rect.setBounds(points, count);
684 if (count > 0) {
685 SkDebugf("added: %3g, %g ", points[count - 1].fX, points[count - 1].fY);
686 } else {
687 SkDebugf("%14s", " ");
688 }
689 SkDebugf("count: %d rect: %g, %g, %g, %g\n", count,
690 rect.fLeft, rect.fTop, rect.fRight, rect.fBottom);
691 }
692#StdOut
693 count: 0 rect: 0, 0, 0, 0
694added: 3, 4 count: 1 rect: 3, 4, 3, 4
695added: 1, 2 count: 2 rect: 1, 2, 3, 4
696added: 5, 6 count: 3 rect: 1, 2, 5, 6
697added: nan, 8 count: 4 rect: 0, 0, 0, 0
698##
699##
700
701#SeeAlso set setBoundsCheck SkPath::addPoly
702
703##
704
705# ------------------------------------------------------------------------------
706
707#Method bool setBoundsCheck(const SkPoint pts[], int count)
708
Cary Clarkab2621d2018-01-30 10:08:57 -0500709#In As_Points
710#Line # sets to upper and lower limits of Point array ##
Cary Clark09d80c02018-10-31 12:14:03 -0400711#Populate
Cary Clark2dc84ad2018-01-26 12:56:22 -0500712
713#Example
714 SkPoint points[] = {{3, 4}, {1, 2}, {5, 6}, {SK_ScalarNaN, 8}};
715 for (int count = 0; count <= (int) SK_ARRAY_COUNT(points); ++count) {
716 SkRect rect;
717 bool success = rect.setBoundsCheck(points, count);
718 if (count > 0) {
719 SkDebugf("added: %3g, %g ", points[count - 1].fX, points[count - 1].fY);
720 } else {
721 SkDebugf("%14s", " ");
722 }
723 SkDebugf("count: %d rect: %g, %g, %g, %g success: %s\n", count,
724 rect.fLeft, rect.fTop, rect.fRight, rect.fBottom, success ? "true" : "false");
725 }
726#StdOut
727 count: 0 rect: 0, 0, 0, 0 success: true
728added: 3, 4 count: 1 rect: 3, 4, 3, 4 success: true
729added: 1, 2 count: 2 rect: 1, 2, 3, 4 success: true
730added: 5, 6 count: 3 rect: 1, 2, 5, 6 success: true
731added: nan, 8 count: 4 rect: 0, 0, 0, 0 success: false
732##
733##
734
735#SeeAlso set setBounds SkPath::addPoly
736
737##
738
739#Subtopic As_Points ##
740
741#Subtopic Set
Cary Clark08895c42018-02-01 09:37:32 -0500742#Line # replaces all values ##
Cary Clark2dc84ad2018-01-26 12:56:22 -0500743
744# ------------------------------------------------------------------------------
745
Cary Clarkc06754b2018-05-16 21:28:55 -0400746#Method void setBoundsNoCheck(const SkPoint pts[], int count)
747#In Set
748#Line # sets to upper and lower limits of Point array ##
Cary Clark09d80c02018-10-31 12:14:03 -0400749#Populate
Cary Clarkc06754b2018-05-16 21:28:55 -0400750
751#Example
Cary Clark8f288d92018-05-17 15:16:57 -0400752 SkPoint points[] = {{3, 4}, {1, 2}, {SK_ScalarInfinity, 6}, {SK_ScalarNaN, 8}};
Cary Clarkffb3d682018-05-17 12:17:28 -0400753 for (int count = 0; count <= (int) SK_ARRAY_COUNT(points); ++count) {
754 SkRect rect;
755 rect.setBoundsNoCheck(points, count);
756 if (count > 0) {
757 SkDebugf("added: %3g, %g ", points[count - 1].fX, points[count - 1].fY);
758 } else {
759 SkDebugf("%14s", " ");
760 }
761 SkDebugf("count: %d rect: %g, %g, %g, %g\n", count,
762 rect.fLeft, rect.fTop, rect.fRight, rect.fBottom);
763 }
Cary Clarkc06754b2018-05-16 21:28:55 -0400764##
765
766#SeeAlso setBoundsCheck
767#Method ##
768
769# ------------------------------------------------------------------------------
770
Cary Clarkbc5697d2017-10-04 14:31:33 -0400771#Method void setEmpty()
772
Cary Clarkab2621d2018-01-30 10:08:57 -0500773#In Set
774#Line # sets to (0, 0, 0, 0) ##
Cary Clark09d80c02018-10-31 12:14:03 -0400775#Populate
Cary Clarkbc5697d2017-10-04 14:31:33 -0400776
777#Example
Cary Clark154beea2017-10-26 07:58:48 -0400778 SkRect rect = {3, 4, 1, 2};
779 for (int i = 0; i < 2; ++i) {
780 SkDebugf("rect: {%g, %g, %g, %g} is %s" "empty\n", rect.fLeft, rect.fTop,
781 rect.fRight, rect.fBottom, rect.isEmpty() ? "" : "not ");
782 rect.setEmpty();
783 }
784#StdOut
785rect: {3, 4, 1, 2} is empty
786rect: {0, 0, 0, 0} is empty
787##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400788##
789
Cary Clark7fc1d122017-10-09 14:07:42 -0400790#SeeAlso MakeEmpty SkIRect::setEmpty
Cary Clarkbc5697d2017-10-04 14:31:33 -0400791
792##
793
794# ------------------------------------------------------------------------------
795
796#Method void set(const SkIRect& src)
797
Cary Clarkab2621d2018-01-30 10:08:57 -0500798#In Set
799#Line # sets to SkScalar input (left, top, right, bottom) and others ##
Cary Clark09d80c02018-10-31 12:14:03 -0400800#Populate
Cary Clarkbc5697d2017-10-04 14:31:33 -0400801
802#Example
Cary Clark154beea2017-10-26 07:58:48 -0400803 SkIRect i_rect = {3, 4, 1, 2};
804 SkDebugf("i_rect: {%d, %d, %d, %d}\n", i_rect.fLeft, i_rect.fTop, i_rect.fRight, i_rect.fBottom);
805 SkRect f_rect;
806 f_rect.set(i_rect);
807 SkDebugf("f_rect: {%g, %g, %g, %g}\n", f_rect.fLeft, f_rect.fTop, f_rect.fRight, f_rect.fBottom);
808#StdOut
809i_rect: {3, 4, 1, 2}
810f_rect: {3, 4, 1, 2}
811##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400812##
813
Cary Clark7fc1d122017-10-09 14:07:42 -0400814#SeeAlso setLTRB SkIntToScalar
Cary Clarkbc5697d2017-10-04 14:31:33 -0400815
816##
817
818# ------------------------------------------------------------------------------
819
820#Method void set(SkScalar left, SkScalar top, SkScalar right, SkScalar bottom)
821
Cary Clarkab2621d2018-01-30 10:08:57 -0500822#In Set
Cary Clark09d80c02018-10-31 12:14:03 -0400823#Populate
Cary Clarkbc5697d2017-10-04 14:31:33 -0400824
825#Example
Cary Clark154beea2017-10-26 07:58:48 -0400826 SkRect rect1 = {3, 4, 1, 2};
827 SkDebugf("rect1: {%g, %g, %g, %g}\n", rect1.fLeft, rect1.fTop, rect1.fRight, rect1.fBottom);
828 SkRect rect2;
829 rect2.set(3, 4, 1, 2);
830 SkDebugf("rect2: {%g, %g, %g, %g}\n", rect2.fLeft, rect2.fTop, rect2.fRight, rect2.fBottom);
831#StdOut
832rect1: {3, 4, 1, 2}
833rect2: {3, 4, 1, 2}
834##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400835##
836
Cary Clark7fc1d122017-10-09 14:07:42 -0400837#SeeAlso setLTRB setXYWH SkIRect::set
Cary Clarkbc5697d2017-10-04 14:31:33 -0400838
839##
840
841# ------------------------------------------------------------------------------
842
843#Method void setLTRB(SkScalar left, SkScalar top, SkScalar right, SkScalar bottom)
844
Cary Clarkab2621d2018-01-30 10:08:57 -0500845#In Set
846#Line # sets to SkScalar input (left, top, right, bottom) ##
Cary Clark09d80c02018-10-31 12:14:03 -0400847#Populate
Cary Clarkbc5697d2017-10-04 14:31:33 -0400848
849#Example
Cary Clark154beea2017-10-26 07:58:48 -0400850 SkRect rect1 = {3, 4, 1, 2};
851 SkDebugf("rect1: {%g, %g, %g, %g}\n", rect1.fLeft, rect1.fTop, rect1.fRight, rect1.fBottom);
852 SkRect rect2;
853 rect2.setLTRB(3, 4, 1, 2);
854 SkDebugf("rect2: {%g, %g, %g, %g}\n", rect2.fLeft, rect2.fTop, rect2.fRight, rect2.fBottom);
855#StdOut
856rect1: {3, 4, 1, 2}
857rect2: {3, 4, 1, 2}
858##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400859##
860
Cary Clark7fc1d122017-10-09 14:07:42 -0400861#SeeAlso set setXYWH SkIRect::set
Cary Clarkbc5697d2017-10-04 14:31:33 -0400862
863##
864
865# ------------------------------------------------------------------------------
866
Cary Clarkbc5697d2017-10-04 14:31:33 -0400867#Method void set(const SkPoint pts[], int count)
868
Cary Clarkab2621d2018-01-30 10:08:57 -0500869#In Set
Cary Clark09d80c02018-10-31 12:14:03 -0400870#Populate
Cary Clarkbc5697d2017-10-04 14:31:33 -0400871
872#Example
Cary Clark154beea2017-10-26 07:58:48 -0400873 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 rect.set(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\n", count,
883 rect.fLeft, rect.fTop, rect.fRight, rect.fBottom);
884 }
885#StdOut
886 count: 0 rect: 0, 0, 0, 0
887added: 3, 4 count: 1 rect: 3, 4, 3, 4
888added: 1, 2 count: 2 rect: 1, 2, 3, 4
889added: 5, 6 count: 3 rect: 1, 2, 5, 6
890added: nan, 8 count: 4 rect: 0, 0, 0, 0
891##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400892##
893
Cary Clark7fc1d122017-10-09 14:07:42 -0400894#SeeAlso setBounds setBoundsCheck SkPath::addPoly
Cary Clarkbc5697d2017-10-04 14:31:33 -0400895
896##
897
898# ------------------------------------------------------------------------------
899
Cary Clarkbc5697d2017-10-04 14:31:33 -0400900#Method void set(const SkPoint& p0, const SkPoint& p1)
901
Cary Clarkab2621d2018-01-30 10:08:57 -0500902#In Set
Cary Clark09d80c02018-10-31 12:14:03 -0400903#Populate
Cary Clarkbc5697d2017-10-04 14:31:33 -0400904
905#Example
Cary Clark7fc1d122017-10-09 14:07:42 -0400906#Description
Cary Clark682c58d2018-05-16 07:07:07 -0400907p0 and p1 may be swapped and have the same effect unless one contains NaN.
Cary Clark7fc1d122017-10-09 14:07:42 -0400908##
Cary Clark154beea2017-10-26 07:58:48 -0400909 SkPoint point1 = {SK_ScalarNaN, 8};
910 SkPoint point2 = {3, 4};
911 SkRect rect;
912 rect.set(point1, point2);
913 SkDebugf("rect: %g, %g, %g, %g\n", rect.fLeft, rect.fTop, rect.fRight, rect.fBottom);
914 rect.set(point2, point1);
915 SkDebugf("rect: %g, %g, %g, %g\n", rect.fLeft, rect.fTop, rect.fRight, rect.fBottom);
Cary Clarkbc5697d2017-10-04 14:31:33 -0400916##
917
Cary Clark7fc1d122017-10-09 14:07:42 -0400918#SeeAlso setBounds setBoundsCheck
Cary Clarkbc5697d2017-10-04 14:31:33 -0400919
920##
921
922# ------------------------------------------------------------------------------
923
924#Method void setXYWH(SkScalar x, SkScalar y, SkScalar width, SkScalar height)
925
Cary Clarkab2621d2018-01-30 10:08:57 -0500926#In Set
927#Line # sets to SkScalar input (x, y, width, height) ##
Cary Clark2be81cf2018-09-13 12:04:30 -0400928Sets Rect to #Formula # (x, y, x + width, y + height) ##.
929Does not validate input; width or height may be negative.
Cary Clark7fc1d122017-10-09 14:07:42 -0400930
931#Param x stored in fLeft ##
932#Param y stored in fTop ##
933#Param width added to x and stored in fRight ##
934#Param height added to y and stored in fBottom ##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400935
936#Example
Cary Clark154beea2017-10-26 07:58:48 -0400937 SkRect rect;
938 rect.setXYWH(5, 35, -15, 25);
939 SkDebugf("rect: %g, %g, %g, %g isEmpty: %s\n", rect.left(), rect.top(), rect.right(),
940 rect.bottom(), rect.isEmpty() ? "true" : "false");
941 rect.sort();
942 SkDebugf("rect: %g, %g, %g, %g isEmpty: %s\n", rect.left(), rect.top(), rect.right(),
943 rect.bottom(), rect.isEmpty() ? "true" : "false");
Cary Clark7fc1d122017-10-09 14:07:42 -0400944#StdOut
Cary Clark154beea2017-10-26 07:58:48 -0400945rect: 5, 35, -10, 60 isEmpty: true
Cary Clark7fc1d122017-10-09 14:07:42 -0400946rect: -10, 35, 5, 60 isEmpty: false
947##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400948##
949
Cary Clark7fc1d122017-10-09 14:07:42 -0400950#SeeAlso MakeXYWH setLTRB set SkIRect::setXYWH
Cary Clarkbc5697d2017-10-04 14:31:33 -0400951
952##
953
954# ------------------------------------------------------------------------------
955
956#Method void setWH(SkScalar width, SkScalar height)
957
Cary Clarkab2621d2018-01-30 10:08:57 -0500958#In Set
959#Line # sets to SkScalar input (0, 0, width, height) ##
Cary Clark09d80c02018-10-31 12:14:03 -0400960#Populate
Cary Clarkbc5697d2017-10-04 14:31:33 -0400961
962#Example
Cary Clark154beea2017-10-26 07:58:48 -0400963 SkRect rect;
964 rect.setWH(-15, 25);
965 SkDebugf("rect: %g, %g, %g, %g isEmpty: %s\n", rect.left(), rect.top(), rect.right(),
966 rect.bottom(), rect.isEmpty() ? "true" : "false");
967 rect.sort();
968 SkDebugf("rect: %g, %g, %g, %g isEmpty: %s\n", rect.left(), rect.top(), rect.right(),
969 rect.bottom(), rect.isEmpty() ? "true" : "false");
Cary Clark7fc1d122017-10-09 14:07:42 -0400970#StdOut
Cary Clark154beea2017-10-26 07:58:48 -0400971rect: 0, 0, -15, 25 isEmpty: true
Cary Clark7fc1d122017-10-09 14:07:42 -0400972rect: -15, 0, 0, 25 isEmpty: false
973##
Cary Clarkbc5697d2017-10-04 14:31:33 -0400974##
975
Cary Clark7fc1d122017-10-09 14:07:42 -0400976#SeeAlso MakeWH setXYWH isetWH
Cary Clarkbc5697d2017-10-04 14:31:33 -0400977
978##
979
Cary Clark2dc84ad2018-01-26 12:56:22 -0500980#Subtopic Set ##
981
982#Subtopic From_Integers
Cary Clark682c58d2018-05-16 07:07:07 -0400983#Line # sets Scalar values from integer input ##
Cary Clark2dc84ad2018-01-26 12:56:22 -0500984
Cary Clark2dc84ad2018-01-26 12:56:22 -0500985# ------------------------------------------------------------------------------
986
987#Method void iset(int left, int top, int right, int bottom)
988
Cary Clarkab2621d2018-01-30 10:08:57 -0500989#In From_Integers
990#Line # sets to int input (left, top, right, bottom) ##
Cary Clark09d80c02018-10-31 12:14:03 -0400991#Populate
Cary Clark2dc84ad2018-01-26 12:56:22 -0500992
993#Example
994 SkRect rect1 = {3, 4, 1, 2};
995 SkDebugf("rect1: {%g, %g, %g, %g}\n", rect1.fLeft, rect1.fTop, rect1.fRight, rect1.fBottom);
996 SkRect rect2;
997 rect2.iset(3, 4, 1, 2);
998 SkDebugf("rect2: {%g, %g, %g, %g}\n", rect2.fLeft, rect2.fTop, rect2.fRight, rect2.fBottom);
999#StdOut
1000rect1: {3, 4, 1, 2}
1001rect2: {3, 4, 1, 2}
1002##
1003##
1004
1005#SeeAlso set setLTRB SkIRect::set SkIntToScalar
1006
1007##
1008
1009# ------------------------------------------------------------------------------
1010
1011#Method void isetWH(int width, int height)
1012
Cary Clarkab2621d2018-01-30 10:08:57 -05001013#In From_Integers
1014#Line # sets to int input (0, 0, width, height) ##
Cary Clark09d80c02018-10-31 12:14:03 -04001015#Populate
Cary Clark2dc84ad2018-01-26 12:56:22 -05001016
1017#Example
1018 SkRect rect1 = {0, 0, 1, 2};
1019 SkDebugf("rect1: {%g, %g, %g, %g}\n", rect1.fLeft, rect1.fTop, rect1.fRight, rect1.fBottom);
1020 SkRect rect2;
1021 rect2.isetWH(1, 2);
1022 SkDebugf("rect2: {%g, %g, %g, %g}\n", rect2.fLeft, rect2.fTop, rect2.fRight, rect2.fBottom);
1023#StdOut
1024rect1: {0, 0, 1, 2}
1025rect2: {0, 0, 1, 2}
1026##
1027##
1028
1029#SeeAlso MakeWH MakeXYWH iset() SkIRect:MakeWH
1030
1031##
1032
1033#Subtopic From_Integers ##
1034
1035#Subtopic Inset_Outset_Offset
Cary Clark08895c42018-02-01 09:37:32 -05001036#Line # moves sides ##
Cary Clark2dc84ad2018-01-26 12:56:22 -05001037
Cary Clarkbc5697d2017-10-04 14:31:33 -04001038# ------------------------------------------------------------------------------
1039
Cary Clarkbc5697d2017-10-04 14:31:33 -04001040#Method SkRect makeOffset(SkScalar dx, SkScalar dy) const
1041
Cary Clarkab2621d2018-01-30 10:08:57 -05001042#In Inset_Outset_Offset
1043#Line # constructs from translated sides ##
Cary Clark09d80c02018-10-31 12:14:03 -04001044#Populate
Cary Clarkbc5697d2017-10-04 14:31:33 -04001045
1046#Example
Cary Clark154beea2017-10-26 07:58:48 -04001047 SkRect rect = { 10, 50, 20, 60 };
1048 SkDebugf("rect: %g, %g, %g, %g isEmpty: %s\n", rect.left(), rect.top(), rect.right(),
1049 rect.bottom(), rect.isEmpty() ? "true" : "false");
1050 rect = rect.makeOffset(15, 32);
1051 SkDebugf("rect: %g, %g, %g, %g isEmpty: %s\n", rect.left(), rect.top(), rect.right(),
1052 rect.bottom(), rect.isEmpty() ? "true" : "false");
1053#StdOut
1054rect: 10, 50, 20, 60 isEmpty: false
1055rect: 25, 82, 35, 92 isEmpty: false
1056##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001057##
1058
Cary Clark7fc1d122017-10-09 14:07:42 -04001059#SeeAlso offset() makeInset makeOutset SkIRect::makeOffset
Cary Clarkbc5697d2017-10-04 14:31:33 -04001060
1061##
1062
1063# ------------------------------------------------------------------------------
1064
1065#Method SkRect makeInset(SkScalar dx, SkScalar dy) const
1066
Cary Clarkab2621d2018-01-30 10:08:57 -05001067#In Inset_Outset_Offset
1068#Line # constructs from sides moved symmetrically about the center ##
Cary Clark09d80c02018-10-31 12:14:03 -04001069#Populate
Cary Clarkbc5697d2017-10-04 14:31:33 -04001070
1071#Example
Cary Clark154beea2017-10-26 07:58:48 -04001072 SkRect rect = { 10, 50, 20, 60 };
1073 SkDebugf("rect: %g, %g, %g, %g isEmpty: %s\n", rect.left(), rect.top(), rect.right(),
1074 rect.bottom(), rect.isEmpty() ? "true" : "false");
1075 rect = rect.makeInset(15, 32);
1076 SkDebugf("rect: %g, %g, %g, %g isEmpty: %s\n", rect.left(), rect.top(), rect.right(),
1077 rect.bottom(), rect.isEmpty() ? "true" : "false");
1078#StdOut
1079rect: 10, 50, 20, 60 isEmpty: false
1080rect: 25, 82, 5, 28 isEmpty: true
1081##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001082##
1083
Cary Clark7fc1d122017-10-09 14:07:42 -04001084#SeeAlso inset() makeOffset makeOutset SkIRect::makeInset
Cary Clarkbc5697d2017-10-04 14:31:33 -04001085
1086##
1087
1088# ------------------------------------------------------------------------------
1089
1090#Method SkRect makeOutset(SkScalar dx, SkScalar dy) const
1091
Cary Clarkab2621d2018-01-30 10:08:57 -05001092#In Inset_Outset_Offset
1093#Line # constructs from sides moved symmetrically about the center ##
Cary Clark09d80c02018-10-31 12:14:03 -04001094#Populate
Cary Clarkbc5697d2017-10-04 14:31:33 -04001095
1096#Example
Cary Clark154beea2017-10-26 07:58:48 -04001097 SkRect rect = { 10, 50, 20, 60 };
1098 SkDebugf("rect: %g, %g, %g, %g isEmpty: %s\n", rect.left(), rect.top(), rect.right(),
1099 rect.bottom(), rect.isEmpty() ? "true" : "false");
1100 rect = rect.makeOutset(15, 32);
1101 SkDebugf("rect: %g, %g, %g, %g isEmpty: %s\n", rect.left(), rect.top(), rect.right(),
1102 rect.bottom(), rect.isEmpty() ? "true" : "false");
1103#StdOut
1104rect: 10, 50, 20, 60 isEmpty: false
1105rect: -5, 18, 35, 92 isEmpty: false
1106##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001107##
1108
Cary Clark7fc1d122017-10-09 14:07:42 -04001109#SeeAlso outset() makeOffset makeInset SkIRect::makeOutset
Cary Clarkbc5697d2017-10-04 14:31:33 -04001110
1111##
1112
1113# ------------------------------------------------------------------------------
1114
1115#Method void offset(SkScalar dx, SkScalar dy)
1116
Cary Clarkab2621d2018-01-30 10:08:57 -05001117#In Inset_Outset_Offset
1118#Line # translates sides without changing width and height ##
Cary Clark09d80c02018-10-31 12:14:03 -04001119#Populate
Cary Clarkbc5697d2017-10-04 14:31:33 -04001120
1121#Example
Cary Clark154beea2017-10-26 07:58:48 -04001122 SkRect rect = { 10, 14, 50, 73 };
1123 rect.offset(5, 13);
1124 SkDebugf("rect: %g, %g, %g, %g\n", rect.fLeft, rect.fTop, rect.fRight, rect.fBottom);
1125#StdOut
1126rect: 15, 27, 55, 86
1127##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001128##
1129
Cary Clark7fc1d122017-10-09 14:07:42 -04001130#SeeAlso offsetTo makeOffset SkIRect::offset
Cary Clarkbc5697d2017-10-04 14:31:33 -04001131
1132##
1133
1134# ------------------------------------------------------------------------------
1135
1136#Method void offset(const SkPoint& delta)
1137
Cary Clarkab2621d2018-01-30 10:08:57 -05001138#In Inset_Outset_Offset
Cary Clark09d80c02018-10-31 12:14:03 -04001139#Populate
Cary Clarkbc5697d2017-10-04 14:31:33 -04001140
1141#Example
Cary Clark154beea2017-10-26 07:58:48 -04001142 SkRect rect = { 10, 14, 50, 73 };
1143 rect.offset({5, 13});
1144 SkDebugf("rect: %g, %g, %g, %g\n", rect.fLeft, rect.fTop, rect.fRight, rect.fBottom);
1145#StdOut
1146rect: 15, 27, 55, 86
1147##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001148##
1149
Cary Clark7fc1d122017-10-09 14:07:42 -04001150#SeeAlso offsetTo makeOffset SkIRect::offset
Cary Clarkbc5697d2017-10-04 14:31:33 -04001151
1152##
1153
1154# ------------------------------------------------------------------------------
1155
1156#Method void offsetTo(SkScalar newX, SkScalar newY)
1157
Cary Clarkab2621d2018-01-30 10:08:57 -05001158#In Inset_Outset_Offset
1159#Line # translates to (x, y) without changing width and height ##
Cary Clark09d80c02018-10-31 12:14:03 -04001160#Populate
Cary Clarkbc5697d2017-10-04 14:31:33 -04001161
1162#Example
Cary Clark154beea2017-10-26 07:58:48 -04001163 SkRect rect = { 10, 14, 50, 73 };
1164 rect.offsetTo(15, 27);
1165 SkDebugf("rect: %g, %g, %g, %g\n", rect.fLeft, rect.fTop, rect.fRight, rect.fBottom);
1166#StdOut
1167rect: 15, 27, 55, 86
1168##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001169##
1170
Cary Clark7fc1d122017-10-09 14:07:42 -04001171#SeeAlso offset makeOffset setXYWH SkIRect::offsetTo
Cary Clarkbc5697d2017-10-04 14:31:33 -04001172
1173##
1174
1175# ------------------------------------------------------------------------------
1176
1177#Method void inset(SkScalar dx, SkScalar dy)
1178
Cary Clarkab2621d2018-01-30 10:08:57 -05001179#In Inset_Outset_Offset
1180#Line # moves the sides symmetrically about the center ##
Cary Clark09d80c02018-10-31 12:14:03 -04001181#Populate
Cary Clarkbc5697d2017-10-04 14:31:33 -04001182
1183#Example
Cary Clark154beea2017-10-26 07:58:48 -04001184 SkRect rect = { 10, 14, 50, 73 };
1185 rect.inset(5, 13);
1186 SkDebugf("rect: %g, %g, %g, %g\n", rect.fLeft, rect.fTop, rect.fRight, rect.fBottom);
1187#StdOut
1188rect: 15, 27, 45, 60
1189##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001190##
1191
Cary Clark7fc1d122017-10-09 14:07:42 -04001192#SeeAlso outset makeInset SkIRect::inset
Cary Clarkbc5697d2017-10-04 14:31:33 -04001193
1194##
1195
1196# ------------------------------------------------------------------------------
1197
1198#Method void outset(SkScalar dx, SkScalar dy)
1199
Cary Clarkab2621d2018-01-30 10:08:57 -05001200#In Inset_Outset_Offset
1201#Line # moves the sides symmetrically about the center ##
Cary Clark09d80c02018-10-31 12:14:03 -04001202#Populate
Cary Clarkbc5697d2017-10-04 14:31:33 -04001203
1204#Example
Cary Clark154beea2017-10-26 07:58:48 -04001205 SkRect rect = { 10, 14, 50, 73 };
1206 rect.outset(5, 13);
1207 SkDebugf("rect: %g, %g, %g, %g\n", rect.fLeft, rect.fTop, rect.fRight, rect.fBottom);
1208#StdOut
1209rect: 5, 1, 55, 86
1210##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001211##
1212
Cary Clark7fc1d122017-10-09 14:07:42 -04001213#SeeAlso inset makeOutset SkIRect::outset
Cary Clarkbc5697d2017-10-04 14:31:33 -04001214
1215##
1216
Cary Clark2dc84ad2018-01-26 12:56:22 -05001217#Subtopic Inset_Outset_Offset ##
1218
1219#Subtopic Intersection
Cary Clark682c58d2018-05-16 07:07:07 -04001220#Line # sets to shared bounds ##
Cary Clark7fc1d122017-10-09 14:07:42 -04001221
Cary Clark682c58d2018-05-16 07:07:07 -04001222Rects intersect when they enclose a common area. To intersect, each of the pair
Cary Clark7fc1d122017-10-09 14:07:42 -04001223must describe area; fLeft is less than fRight, and fTop is less than fBottom;
Cary Clark77b3f3a2018-11-07 14:59:03 -05001224isEmpty() returns false. The intersection of Rect pair can be described by:
Cary Clark2be81cf2018-09-13 12:04:30 -04001225#Formula # (max(a.fLeft, b.fLeft), max(a.fTop, b.fTop),
1226 min(a.fRight, b.fRight), min(a.fBottom, b.fBottom)) ##.
Cary Clark154beea2017-10-26 07:58:48 -04001227
Cary Clark7fc1d122017-10-09 14:07:42 -04001228The intersection is only meaningful if the resulting Rect is not empty and
1229describes an area: fLeft is less than fRight, and fTop is less than fBottom.
1230
Cary Clark2dc84ad2018-01-26 12:56:22 -05001231# ------------------------------------------------------------------------------
1232
Florin Malitaeb420452018-02-20 11:44:43 -05001233#Method bool contains(SkScalar x, SkScalar y) const
1234
1235#In Intersection
Cary Clarkedfe6702018-02-20 14:33:13 -05001236#Line # returns true if points are equal or inside ##
Cary Clark09d80c02018-10-31 12:14:03 -04001237#Populate
Florin Malitaeb420452018-02-20 11:44:43 -05001238
1239#Example
1240 SkRect rect = { 30, 50, 40, 60 };
1241 SkPoint tests[] = { { 30, 50 }, { 39, 49 }, { 29, 59 } };
1242 for (auto contained : tests) {
1243 SkDebugf("rect: (%g, %g, %g, %g) %s (%g, %g)\n",
1244 rect.left(), rect.top(), rect.right(), rect.bottom(),
1245 rect.contains(contained.x(), contained.y()) ? "contains" : "does not contain",
1246 contained.x(), contained.y());
1247 }
1248#StdOut
1249rect: (30, 50, 40, 60) contains (30, 50)
1250rect: (30, 50, 40, 60) does not contain (39, 49)
1251rect: (30, 50, 40, 60) does not contain (29, 59)
1252##
1253##
1254
Cary Clark53498e92018-06-28 19:13:56 -04001255#SeeAlso SkIRect::contains SkRRect::contains
Florin Malitaeb420452018-02-20 11:44:43 -05001256
1257##
1258
1259# ------------------------------------------------------------------------------
1260
Cary Clark2dc84ad2018-01-26 12:56:22 -05001261#Method bool contains(const SkRect& r) const
1262
Cary Clarkab2621d2018-01-30 10:08:57 -05001263#In Intersection
Cary Clark09d80c02018-10-31 12:14:03 -04001264#Populate
Cary Clark2dc84ad2018-01-26 12:56:22 -05001265
1266#Example
1267 SkRect rect = { 30, 50, 40, 60 };
1268 SkRect tests[] = { { 30, 50, 31, 51}, { 39, 49, 40, 50}, { 29, 59, 30, 60} };
1269 for (auto contained : tests) {
1270 SkDebugf("rect: (%g, %g, %g, %g) %s (%g, %g, %g, %g)\n",
1271 rect.left(), rect.top(), rect.right(), rect.bottom(),
1272 rect.contains(contained) ? "contains" : "does not contain",
1273 contained.left(), contained.top(), contained.right(), contained.bottom());
1274 }
1275#StdOut
1276rect: (30, 50, 40, 60) contains (30, 50, 31, 51)
1277rect: (30, 50, 40, 60) does not contain (39, 49, 40, 50)
1278rect: (30, 50, 40, 60) does not contain (29, 59, 30, 60)
1279##
1280##
1281
1282#SeeAlso SkIRect::contains
1283
1284##
1285
1286# ------------------------------------------------------------------------------
1287
1288#Method bool contains(const SkIRect& r) const
1289
Cary Clarkab2621d2018-01-30 10:08:57 -05001290#In Intersection
Cary Clark09d80c02018-10-31 12:14:03 -04001291#Populate
Cary Clark2dc84ad2018-01-26 12:56:22 -05001292
1293#Example
1294 SkRect rect = { 30, 50, 40, 60 };
1295 SkIRect tests[] = { { 30, 50, 31, 51}, { 39, 49, 40, 50}, { 29, 59, 30, 60} };
1296 for (auto contained : tests) {
1297 SkDebugf("rect: (%g, %g, %g, %g) %s (%d, %d, %d, %d)\n",
1298 rect.left(), rect.top(), rect.right(), rect.bottom(),
1299 rect.contains(contained) ? "contains" : "does not contain",
1300 contained.left(), contained.top(), contained.right(), contained.bottom());
1301 }
1302#StdOut
1303rect: (30, 50, 40, 60) contains (30, 50, 31, 51)
1304rect: (30, 50, 40, 60) does not contain (39, 49, 40, 50)
1305rect: (30, 50, 40, 60) does not contain (29, 59, 30, 60)
1306##
1307##
1308
1309#SeeAlso SkIRect::contains
1310
1311##
1312
Cary Clarkbc5697d2017-10-04 14:31:33 -04001313# ------------------------------------------------------------------------------
1314
1315#Method bool intersect(const SkRect& r)
1316
Cary Clarkab2621d2018-01-30 10:08:57 -05001317#In Intersection
1318#Line # sets to shared area; returns true if not empty ##
Cary Clark09d80c02018-10-31 12:14:03 -04001319#Populate
Cary Clarkbc5697d2017-10-04 14:31:33 -04001320
1321#Example
Cary Clark7fc1d122017-10-09 14:07:42 -04001322#Description
1323Two SkDebugf calls are required. If the calls are combined, their arguments
1324may not be evaluated in left to right order: the printed intersection may
1325be before or after the call to intersect.
1326##
Cary Clark154beea2017-10-26 07:58:48 -04001327 SkRect leftRect = { 10, 40, 50, 80 };
1328 SkRect rightRect = { 30, 60, 70, 90 };
1329 SkDebugf("%s intersection: ", leftRect.intersect(rightRect) ? "" : "no ");
Cary Clark682c58d2018-05-16 07:07:07 -04001330 SkDebugf("%g, %g, %g, %g\n", leftRect.left(), leftRect.top(),
Cary Clark7fc1d122017-10-09 14:07:42 -04001331 leftRect.right(), leftRect.bottom());
1332#StdOut
1333 intersection: 30, 60, 50, 80
Cary Clark682c58d2018-05-16 07:07:07 -04001334##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001335##
1336
Cary Clark7fc1d122017-10-09 14:07:42 -04001337#SeeAlso intersects Intersects join SkIRect::intersect
Cary Clarkbc5697d2017-10-04 14:31:33 -04001338
1339##
1340
1341# ------------------------------------------------------------------------------
1342
1343#Method bool intersect(SkScalar left, SkScalar top, SkScalar right, SkScalar bottom)
1344
Cary Clarkab2621d2018-01-30 10:08:57 -05001345#In Intersection
Cary Clark09d80c02018-10-31 12:14:03 -04001346#Populate
Cary Clarkbc5697d2017-10-04 14:31:33 -04001347
1348#Example
Cary Clark7fc1d122017-10-09 14:07:42 -04001349#Description
1350Two SkDebugf calls are required. If the calls are combined, their arguments
1351may not be evaluated in left to right order: the printed intersection may
1352be before or after the call to intersect.
1353##
Cary Clark154beea2017-10-26 07:58:48 -04001354 SkRect leftRect = { 10, 40, 50, 80 };
1355 SkDebugf("%s intersection: ", leftRect.intersect(30, 60, 70, 90) ? "" : "no ");
Cary Clark682c58d2018-05-16 07:07:07 -04001356 SkDebugf("%g, %g, %g, %g\n", leftRect.left(), leftRect.top(),
Cary Clark7fc1d122017-10-09 14:07:42 -04001357 leftRect.right(), leftRect.bottom());
1358#StdOut
1359 intersection: 30, 60, 50, 80
Cary Clark682c58d2018-05-16 07:07:07 -04001360##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001361##
1362
Cary Clark7fc1d122017-10-09 14:07:42 -04001363#SeeAlso intersects Intersects join SkIRect::intersect
Cary Clarkbc5697d2017-10-04 14:31:33 -04001364
1365##
1366
1367# ------------------------------------------------------------------------------
1368
Cary Clark61313f32018-10-08 14:57:48 -04001369#Method bool intersect(const SkRect& a, const SkRect& b)
Cary Clarkbc5697d2017-10-04 14:31:33 -04001370
Cary Clarkab2621d2018-01-30 10:08:57 -05001371#In Intersection
Cary Clark09d80c02018-10-31 12:14:03 -04001372#Populate
Cary Clarkbc5697d2017-10-04 14:31:33 -04001373
1374#Example
Cary Clark154beea2017-10-26 07:58:48 -04001375 SkRect result;
1376 bool intersected = result.intersect({ 10, 40, 50, 80 }, { 30, 60, 70, 90 });
1377 SkDebugf("%s intersection: %g, %g, %g, %g\n", intersected ? "" : "no ",
1378 result.left(), result.top(), result.right(), result.bottom());
Cary Clark7fc1d122017-10-09 14:07:42 -04001379#StdOut
1380 intersection: 30, 60, 50, 80
Cary Clark682c58d2018-05-16 07:07:07 -04001381##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001382##
1383
Cary Clark7fc1d122017-10-09 14:07:42 -04001384#SeeAlso intersects Intersects join SkIRect::intersect
Cary Clarkbc5697d2017-10-04 14:31:33 -04001385
1386##
1387
Cary Clark7fc1d122017-10-09 14:07:42 -04001388# ------------------------------------------------------------------------------
1389
Cary Clarkbc5697d2017-10-04 14:31:33 -04001390#Method bool intersects(SkScalar left, SkScalar top, SkScalar right, SkScalar bottom) const
1391
Cary Clarkab2621d2018-01-30 10:08:57 -05001392#In Intersection
1393#Line # returns true if areas overlap ##
Cary Clark09d80c02018-10-31 12:14:03 -04001394#Populate
Cary Clarkbc5697d2017-10-04 14:31:33 -04001395
1396#Example
Cary Clark154beea2017-10-26 07:58:48 -04001397 SkRect rect = { 10, 40, 50, 80 };
1398 SkDebugf("%s intersection", rect.intersects(30, 60, 70, 90) ? "" : "no ");
Cary Clark7fc1d122017-10-09 14:07:42 -04001399#StdOut
1400 intersection
Cary Clark682c58d2018-05-16 07:07:07 -04001401##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001402##
1403
Cary Clark7fc1d122017-10-09 14:07:42 -04001404#SeeAlso intersect Intersects SkIRect::Intersects
Cary Clarkbc5697d2017-10-04 14:31:33 -04001405
1406##
1407
Cary Clark7fc1d122017-10-09 14:07:42 -04001408# ------------------------------------------------------------------------------
1409
Cary Clarkbc5697d2017-10-04 14:31:33 -04001410#Method bool intersects(const SkRect& r) const
1411
Cary Clarkab2621d2018-01-30 10:08:57 -05001412#In Intersection
Cary Clark09d80c02018-10-31 12:14:03 -04001413#Populate
Cary Clarkbc5697d2017-10-04 14:31:33 -04001414
1415#Example
Cary Clark154beea2017-10-26 07:58:48 -04001416 SkRect rect = { 10, 40, 50, 80 };
1417 SkDebugf("%s intersection", rect.intersects({30, 60, 70, 90}) ? "" : "no ");
Cary Clark7fc1d122017-10-09 14:07:42 -04001418#StdOut
1419 intersection
Cary Clark682c58d2018-05-16 07:07:07 -04001420##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001421##
1422
Cary Clark7fc1d122017-10-09 14:07:42 -04001423#SeeAlso intersect Intersects SkIRect::Intersects
Cary Clarkbc5697d2017-10-04 14:31:33 -04001424
1425##
1426
Cary Clark7fc1d122017-10-09 14:07:42 -04001427# ------------------------------------------------------------------------------
1428
Cary Clarkbc5697d2017-10-04 14:31:33 -04001429#Method static bool Intersects(const SkRect& a, const SkRect& b)
1430
Cary Clarkab2621d2018-01-30 10:08:57 -05001431#In Intersection
1432#Line # returns true if areas overlap ##
Cary Clark09d80c02018-10-31 12:14:03 -04001433#Populate
Cary Clarkbc5697d2017-10-04 14:31:33 -04001434
1435#Example
Cary Clark154beea2017-10-26 07:58:48 -04001436 SkDebugf("%s intersection", SkRect::Intersects({10, 40, 50, 80}, {30, 60, 70, 90}) ? "" : "no ");
Cary Clark7fc1d122017-10-09 14:07:42 -04001437#StdOut
1438 intersection
Cary Clark682c58d2018-05-16 07:07:07 -04001439##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001440##
1441
Cary Clark7fc1d122017-10-09 14:07:42 -04001442#SeeAlso intersect intersects SkIRect::Intersects
Cary Clarkbc5697d2017-10-04 14:31:33 -04001443
1444##
1445
Cary Clark2dc84ad2018-01-26 12:56:22 -05001446#Subtopic Intersection ##
Cary Clark7fc1d122017-10-09 14:07:42 -04001447
Cary Clark2dc84ad2018-01-26 12:56:22 -05001448#Subtopic Join
Cary Clark682c58d2018-05-16 07:07:07 -04001449#Line # sets to union of bounds ##
Cary Clark2dc84ad2018-01-26 12:56:22 -05001450
Cary Clark7fc1d122017-10-09 14:07:42 -04001451# ------------------------------------------------------------------------------
Cary Clarkbc5697d2017-10-04 14:31:33 -04001452
1453#Method void join(SkScalar left, SkScalar top, SkScalar right, SkScalar bottom)
1454
Cary Clarkab2621d2018-01-30 10:08:57 -05001455#In Join
1456#Line # sets to union of bounds ##
Cary Clark09d80c02018-10-31 12:14:03 -04001457#Populate
Cary Clarkbc5697d2017-10-04 14:31:33 -04001458
1459#Example
Cary Clark154beea2017-10-26 07:58:48 -04001460 SkRect rect = { 10, 20, 15, 25};
1461 rect.join(50, 60, 55, 65);
1462 SkDebugf("join: %g, %g, %g, %g\n", rect.fLeft, rect.fTop, rect.fRight, rect.fBottom);
Cary Clark7fc1d122017-10-09 14:07:42 -04001463#StdOut
1464 join: 10, 20, 55, 65
Cary Clark682c58d2018-05-16 07:07:07 -04001465##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001466##
1467
Cary Clark7fc1d122017-10-09 14:07:42 -04001468#SeeAlso joinNonEmptyArg joinPossiblyEmptyRect SkIRect::join
Cary Clarkbc5697d2017-10-04 14:31:33 -04001469
1470##
1471
Cary Clark7fc1d122017-10-09 14:07:42 -04001472# ------------------------------------------------------------------------------
1473
Cary Clarkbc5697d2017-10-04 14:31:33 -04001474#Method void join(const SkRect& r)
1475
Cary Clarkab2621d2018-01-30 10:08:57 -05001476#In Join
Cary Clark09d80c02018-10-31 12:14:03 -04001477#Populate
Cary Clarkbc5697d2017-10-04 14:31:33 -04001478
1479#Example
Cary Clark154beea2017-10-26 07:58:48 -04001480 SkRect rect = { 10, 20, 15, 25};
1481 rect.join({50, 60, 55, 65});
1482 SkDebugf("join: %g, %g, %g, %g\n", rect.fLeft, rect.fTop, rect.fRight, rect.fBottom);
Cary Clark7fc1d122017-10-09 14:07:42 -04001483#StdOut
1484 join: 10, 20, 55, 65
Cary Clark682c58d2018-05-16 07:07:07 -04001485##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001486##
1487
Cary Clark7fc1d122017-10-09 14:07:42 -04001488#SeeAlso joinNonEmptyArg joinPossiblyEmptyRect SkIRect::join
Cary Clarkbc5697d2017-10-04 14:31:33 -04001489
1490##
1491
Cary Clark7fc1d122017-10-09 14:07:42 -04001492# ------------------------------------------------------------------------------
1493
Cary Clarkbc5697d2017-10-04 14:31:33 -04001494#Method void joinNonEmptyArg(const SkRect& r)
1495
Cary Clarkab2621d2018-01-30 10:08:57 -05001496#In Join
1497#Line # sets to union of bounds, asserting that argument is not empty ##
Cary Clark09d80c02018-10-31 12:14:03 -04001498#Populate
Cary Clarkbc5697d2017-10-04 14:31:33 -04001499
1500#Example
Cary Clark7fc1d122017-10-09 14:07:42 -04001501#Description
1502Since Rect is not sorted, first result is copy of toJoin.
1503##
Cary Clark154beea2017-10-26 07:58:48 -04001504 SkRect rect = { 10, 100, 15, 0};
1505 SkRect sorted = rect.makeSorted();
1506 SkRect toJoin = { 50, 60, 55, 65 };
1507 rect.joinNonEmptyArg(toJoin);
1508 SkDebugf("rect: %g, %g, %g, %g\n", rect.fLeft, rect.fTop, rect.fRight, rect.fBottom);
1509 sorted.joinNonEmptyArg(toJoin);
Cary Clark7fc1d122017-10-09 14:07:42 -04001510 SkDebugf("sorted: %g, %g, %g, %g\n", sorted.fLeft, sorted.fTop, sorted.fRight, sorted.fBottom);
1511#StdOut
Cary Clark154beea2017-10-26 07:58:48 -04001512rect: 50, 60, 55, 65
Cary Clark7fc1d122017-10-09 14:07:42 -04001513sorted: 10, 0, 55, 100
Cary Clark682c58d2018-05-16 07:07:07 -04001514##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001515##
1516
Cary Clark7fc1d122017-10-09 14:07:42 -04001517#SeeAlso join joinPossiblyEmptyRect SkIRect::join
Cary Clarkbc5697d2017-10-04 14:31:33 -04001518
1519##
1520
Cary Clark7fc1d122017-10-09 14:07:42 -04001521# ------------------------------------------------------------------------------
1522
Cary Clarkbc5697d2017-10-04 14:31:33 -04001523#Method void joinPossiblyEmptyRect(const SkRect& r)
1524
Cary Clarkab2621d2018-01-30 10:08:57 -05001525#In Join
Cary Clark682c58d2018-05-16 07:07:07 -04001526#Line # sets to union of bounds; skips empty check for both ##
Cary Clark09d80c02018-10-31 12:14:03 -04001527#Populate
Cary Clarkbc5697d2017-10-04 14:31:33 -04001528
1529#Example
Cary Clark7fc1d122017-10-09 14:07:42 -04001530#Description
1531Since Rect is not sorted, first result is not useful.
1532##
Cary Clark154beea2017-10-26 07:58:48 -04001533 SkRect rect = { 10, 100, 15, 0};
1534 SkRect sorted = rect.makeSorted();
1535 SkRect toJoin = { 50, 60, 55, 65 };
1536 rect.joinPossiblyEmptyRect(toJoin);
1537 SkDebugf("rect: %g, %g, %g, %g\n", rect.fLeft, rect.fTop, rect.fRight, rect.fBottom);
1538 sorted.joinPossiblyEmptyRect(toJoin);
1539 SkDebugf("sorted: %g, %g, %g, %g\n", sorted.fLeft, sorted.fTop, sorted.fRight, sorted.fBottom);
Cary Clark7fc1d122017-10-09 14:07:42 -04001540#StdOut
Cary Clark154beea2017-10-26 07:58:48 -04001541rect: 10, 60, 55, 65
Cary Clark7fc1d122017-10-09 14:07:42 -04001542sorted: 10, 0, 55, 100
Cary Clark682c58d2018-05-16 07:07:07 -04001543##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001544##
1545
Cary Clark7fc1d122017-10-09 14:07:42 -04001546#SeeAlso joinNonEmptyArg join SkIRect::join
Cary Clarkbc5697d2017-10-04 14:31:33 -04001547
1548##
1549
Cary Clark2dc84ad2018-01-26 12:56:22 -05001550#Subtopic Join ##
Cary Clark7fc1d122017-10-09 14:07:42 -04001551
Cary Clark2dc84ad2018-01-26 12:56:22 -05001552#Subtopic Rounding
Cary Clark08895c42018-02-01 09:37:32 -05001553#Line # adjust to integer bounds ##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001554
Cary Clarkbc5697d2017-10-04 14:31:33 -04001555#Method void round(SkIRect* dst) const
1556
Cary Clarkab2621d2018-01-30 10:08:57 -05001557#In Rounding
1558#Line # sets members to nearest integer value ##
Cary Clark7fc1d122017-10-09 14:07:42 -04001559Sets IRect by adding 0.5 and discarding the fractional portion of Rect
Cary Clark2be81cf2018-09-13 12:04:30 -04001560members, using #Formula # (SkScalarRoundToInt(fLeft), SkScalarRoundToInt(fTop),
1561 SkScalarRoundToInt(fRight), SkScalarRoundToInt(fBottom)) ##.
Cary Clarkbc5697d2017-10-04 14:31:33 -04001562
Cary Clark7fc1d122017-10-09 14:07:42 -04001563#Param dst storage for IRect ##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001564
1565#Example
Cary Clark154beea2017-10-26 07:58:48 -04001566 SkRect rect = { 30.5f, 50.5f, 40.5f, 60.5f };
1567 SkIRect round;
1568 rect.round(&round);
1569 SkDebugf("round: %d, %d, %d, %d\n", round.fLeft, round.fTop, round.fRight, round.fBottom);
Cary Clark7fc1d122017-10-09 14:07:42 -04001570#StdOut
1571round: 31, 51, 41, 61
1572##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001573##
1574
Cary Clark7fc1d122017-10-09 14:07:42 -04001575#SeeAlso roundIn roundOut SkScalarRoundToInt
Cary Clarkbc5697d2017-10-04 14:31:33 -04001576
1577##
1578
Cary Clark7fc1d122017-10-09 14:07:42 -04001579# ------------------------------------------------------------------------------
1580
Cary Clarkbc5697d2017-10-04 14:31:33 -04001581#Method void roundOut(SkIRect* dst) const
1582
Cary Clarkab2621d2018-01-30 10:08:57 -05001583#In Rounding
1584#Line # sets members to nearest integer value away from opposite ##
Cary Clark2be81cf2018-09-13 12:04:30 -04001585Sets IRect by discarding the fractional portion of fLeft and fTop; and rounding
1586up fRight and fBottom, using
1587#Formula # (SkScalarFloorToInt(fLeft), SkScalarFloorToInt(fTop),
1588 SkScalarCeilToInt(fRight), SkScalarCeilToInt(fBottom)) ##.
Cary Clarkbc5697d2017-10-04 14:31:33 -04001589
Cary Clark7fc1d122017-10-09 14:07:42 -04001590#Param dst storage for IRect ##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001591
1592#Example
Cary Clark154beea2017-10-26 07:58:48 -04001593 SkRect rect = { 30.5f, 50.5f, 40.5f, 60.5f };
1594 SkIRect round;
1595 rect.roundOut(&round);
1596 SkDebugf("round: %d, %d, %d, %d\n", round.fLeft, round.fTop, round.fRight, round.fBottom);
Cary Clark7fc1d122017-10-09 14:07:42 -04001597#StdOut
1598round: 30, 50, 41, 61
1599##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001600##
1601
Cary Clark7fc1d122017-10-09 14:07:42 -04001602#SeeAlso roundIn round SkScalarRoundToInt
Cary Clarkbc5697d2017-10-04 14:31:33 -04001603
1604##
1605
Cary Clark7fc1d122017-10-09 14:07:42 -04001606# ------------------------------------------------------------------------------
1607
Cary Clark682c58d2018-05-16 07:07:07 -04001608#Method void roundOut(SkRect* dst) const
Cary Clarkbc5697d2017-10-04 14:31:33 -04001609
Cary Clarkab2621d2018-01-30 10:08:57 -05001610#In Rounding
Cary Clark2be81cf2018-09-13 12:04:30 -04001611Sets Rect by discarding the fractional portion of fLeft and fTop; and rounding
1612up fRight and fBottom, using
1613#Formula # (SkScalarFloorToInt(fLeft), SkScalarFloorToInt(fTop),
1614 SkScalarCeilToInt(fRight), SkScalarCeilToInt(fBottom)) ##.
Cary Clarkbc5697d2017-10-04 14:31:33 -04001615
Cary Clark7fc1d122017-10-09 14:07:42 -04001616#Param dst storage for Rect ##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001617
1618#Example
Cary Clark154beea2017-10-26 07:58:48 -04001619 SkRect rect = { 30.5f, 50.5f, 40.5f, 60.5f };
1620 SkRect round;
1621 rect.roundOut(&round);
1622 SkDebugf("round: %g, %g, %g, %g\n", round.fLeft, round.fTop, round.fRight, round.fBottom);
Cary Clark7fc1d122017-10-09 14:07:42 -04001623#StdOut
1624round: 30, 50, 41, 61
1625##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001626##
1627
Cary Clark7fc1d122017-10-09 14:07:42 -04001628#SeeAlso roundIn round SkScalarRoundToInt
Cary Clarkbc5697d2017-10-04 14:31:33 -04001629
1630##
1631
Cary Clark7fc1d122017-10-09 14:07:42 -04001632# ------------------------------------------------------------------------------
1633
Cary Clarkbc5697d2017-10-04 14:31:33 -04001634#Method void roundIn(SkIRect* dst) const
1635
Cary Clarkab2621d2018-01-30 10:08:57 -05001636#In Rounding
1637#Line # sets members to nearest integer value towards opposite ##
Cary Clark2be81cf2018-09-13 12:04:30 -04001638Sets Rect by rounding up fLeft and fTop; and discarding the fractional portion
1639of fRight and fBottom, using
1640#Formula # (SkScalarCeilToInt(fLeft), SkScalarCeilToInt(fTop),
1641 SkScalarFloorToInt(fRight), SkScalarFloorToInt(fBottom)) ##.
Cary Clarkbc5697d2017-10-04 14:31:33 -04001642
Cary Clark7fc1d122017-10-09 14:07:42 -04001643#Param dst storage for IRect ##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001644
1645#Example
Cary Clark154beea2017-10-26 07:58:48 -04001646 SkRect rect = { 30.5f, 50.5f, 40.5f, 60.5f };
1647 SkIRect round;
1648 rect.roundIn(&round);
1649 SkDebugf("round: %d, %d, %d, %d\n", round.fLeft, round.fTop, round.fRight, round.fBottom);
Cary Clark7fc1d122017-10-09 14:07:42 -04001650#StdOut
Cary Clark154beea2017-10-26 07:58:48 -04001651round: 31, 51, 40, 60
Cary Clark7fc1d122017-10-09 14:07:42 -04001652##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001653##
1654
Cary Clark7fc1d122017-10-09 14:07:42 -04001655#SeeAlso roundOut round SkScalarRoundToInt
Cary Clarkbc5697d2017-10-04 14:31:33 -04001656
1657##
1658
Cary Clark7fc1d122017-10-09 14:07:42 -04001659# ------------------------------------------------------------------------------
1660
Cary Clarkbc5697d2017-10-04 14:31:33 -04001661#Method SkIRect round() const
1662
Cary Clarkab2621d2018-01-30 10:08:57 -05001663#In Rounding
Cary Clark7fc1d122017-10-09 14:07:42 -04001664Returns IRect by adding 0.5 and discarding the fractional portion of Rect
Cary Clark2be81cf2018-09-13 12:04:30 -04001665members, using #Formula # (SkScalarRoundToInt(fLeft), SkScalarRoundToInt(fTop),
1666 SkScalarRoundToInt(fRight), SkScalarRoundToInt(fBottom)) ##.
Cary Clarkbc5697d2017-10-04 14:31:33 -04001667
Cary Clark7fc1d122017-10-09 14:07:42 -04001668#Return rounded IRect ##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001669
1670#Example
Cary Clark154beea2017-10-26 07:58:48 -04001671 SkRect rect = { 30.5f, 50.5f, 40.5f, 60.5f };
1672 SkIRect round = rect.round();
1673 SkDebugf("round: %d, %d, %d, %d\n", round.fLeft, round.fTop, round.fRight, round.fBottom);
Cary Clark7fc1d122017-10-09 14:07:42 -04001674#StdOut
Cary Clark154beea2017-10-26 07:58:48 -04001675round: 31, 51, 41, 61
Cary Clark7fc1d122017-10-09 14:07:42 -04001676##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001677##
1678
Cary Clark7fc1d122017-10-09 14:07:42 -04001679#SeeAlso roundOut roundIn SkScalarRoundToInt
Cary Clarkbc5697d2017-10-04 14:31:33 -04001680
1681##
1682
Cary Clark7fc1d122017-10-09 14:07:42 -04001683# ------------------------------------------------------------------------------
1684
Cary Clarkbc5697d2017-10-04 14:31:33 -04001685#Method SkIRect roundOut() const
1686
Cary Clarkab2621d2018-01-30 10:08:57 -05001687#In Rounding
Cary Clark2be81cf2018-09-13 12:04:30 -04001688Sets IRect by discarding the fractional portion of fLeft and fTop; and rounding
1689up fRight and fBottom, using
1690#Formula # (SkScalarFloorToInt(fLeft), SkScalarFloorToInt(fTop),
1691 SkScalarCeilToInt(fRight), SkScalarCeilToInt(fBottom)) ##.
Cary Clarkbc5697d2017-10-04 14:31:33 -04001692
Cary Clark7fc1d122017-10-09 14:07:42 -04001693#Return rounded IRect ##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001694
1695#Example
Cary Clark154beea2017-10-26 07:58:48 -04001696 SkRect rect = { 30.5f, 50.5f, 40.5f, 60.5f };
1697 SkIRect round = rect.roundOut();
1698 SkDebugf("round: %d, %d, %d, %d\n", round.fLeft, round.fTop, round.fRight, round.fBottom);
Cary Clark7fc1d122017-10-09 14:07:42 -04001699#StdOut
Cary Clark154beea2017-10-26 07:58:48 -04001700round: 30, 50, 41, 61
Cary Clark7fc1d122017-10-09 14:07:42 -04001701##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001702##
1703
Cary Clark7fc1d122017-10-09 14:07:42 -04001704#SeeAlso round roundIn SkScalarRoundToInt
Cary Clarkbc5697d2017-10-04 14:31:33 -04001705
1706##
1707
Cary Clark2dc84ad2018-01-26 12:56:22 -05001708#Subtopic Rounding ##
1709
1710#Subtopic Sorting
Cary Clark08895c42018-02-01 09:37:32 -05001711#Line # orders sides ##
Cary Clark2dc84ad2018-01-26 12:56:22 -05001712
Cary Clark7fc1d122017-10-09 14:07:42 -04001713# ------------------------------------------------------------------------------
1714
Cary Clarkbc5697d2017-10-04 14:31:33 -04001715#Method void sort()
1716
Cary Clarkab2621d2018-01-30 10:08:57 -05001717#In Sorting
1718#Line # orders sides from smaller to larger ##
Cary Clark09d80c02018-10-31 12:14:03 -04001719#Populate
Cary Clarkbc5697d2017-10-04 14:31:33 -04001720
1721#Example
Cary Clark154beea2017-10-26 07:58:48 -04001722 SkRect rect = { 30.5f, 50.5f, 20.5f, 10.5f };
1723 SkDebugf("rect: %g, %g, %g, %g\n", rect.fLeft, rect.fTop, rect.fRight, rect.fBottom);
1724 rect.sort();
1725 SkDebugf("sorted: %g, %g, %g, %g\n", rect.fLeft, rect.fTop, rect.fRight, rect.fBottom);
Cary Clark7fc1d122017-10-09 14:07:42 -04001726#StdOut
Cary Clark154beea2017-10-26 07:58:48 -04001727rect: 30.5, 50.5, 20.5, 10.5
Cary Clark7fc1d122017-10-09 14:07:42 -04001728sorted: 20.5, 10.5, 30.5, 50.5
1729##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001730##
1731
Cary Clark2dc84ad2018-01-26 12:56:22 -05001732#SeeAlso makeSorted SkIRect::sort isSorted
Cary Clarkbc5697d2017-10-04 14:31:33 -04001733
1734##
1735
Cary Clark7fc1d122017-10-09 14:07:42 -04001736# ------------------------------------------------------------------------------
1737
Cary Clarkbc5697d2017-10-04 14:31:33 -04001738#Method SkRect makeSorted() const
1739
Cary Clarkab2621d2018-01-30 10:08:57 -05001740#In Sorting
Cary Clark61313f32018-10-08 14:57:48 -04001741#In Constructors
Cary Clark682c58d2018-05-16 07:07:07 -04001742#Line # constructs Rect, ordering sides from smaller to larger ##
Cary Clark09d80c02018-10-31 12:14:03 -04001743#Populate
Cary Clarkbc5697d2017-10-04 14:31:33 -04001744
1745#Example
Cary Clark154beea2017-10-26 07:58:48 -04001746 SkRect rect = { 30.5f, 50.5f, 20.5f, 10.5f };
1747 SkDebugf("rect: %g, %g, %g, %g\n", rect.fLeft, rect.fTop, rect.fRight, rect.fBottom);
1748 SkRect sort = rect.makeSorted();
1749 SkDebugf("sorted: %g, %g, %g, %g\n", sort.fLeft, sort.fTop, sort.fRight, sort.fBottom);
Cary Clark7fc1d122017-10-09 14:07:42 -04001750#StdOut
Cary Clark154beea2017-10-26 07:58:48 -04001751rect: 30.5, 50.5, 20.5, 10.5
Cary Clark7fc1d122017-10-09 14:07:42 -04001752sorted: 20.5, 10.5, 30.5, 50.5
1753##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001754##
1755
Cary Clark2dc84ad2018-01-26 12:56:22 -05001756#SeeAlso sort SkIRect::makeSorted isSorted
Cary Clarkbc5697d2017-10-04 14:31:33 -04001757
1758##
1759
Cary Clark2dc84ad2018-01-26 12:56:22 -05001760#Subtopic Sorting ##
1761
Cary Clark7fc1d122017-10-09 14:07:42 -04001762# ------------------------------------------------------------------------------
1763
Cary Clarkbc5697d2017-10-04 14:31:33 -04001764#Method const SkScalar* asScalars() const
Cary Clark4855f782018-02-06 09:41:53 -05001765#In Property
Cary Clarkab2621d2018-01-30 10:08:57 -05001766#Line # returns pointer to members as array ##
Cary Clark09d80c02018-10-31 12:14:03 -04001767#Populate
Cary Clarkbc5697d2017-10-04 14:31:33 -04001768
1769#Example
Cary Clark154beea2017-10-26 07:58:48 -04001770 SkRect rect = {7, 11, 13, 17};
1771SkDebugf("rect.asScalars() %c= &rect.fLeft\n", rect.asScalars() == &rect.fLeft? '=' : '!');
1772#StdOut
1773rect.asScalars() == &rect.fLeft
1774##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001775##
1776
Cary Clark7fc1d122017-10-09 14:07:42 -04001777#SeeAlso toQuad
1778
Cary Clarkbc5697d2017-10-04 14:31:33 -04001779##
1780
Cary Clark7fc1d122017-10-09 14:07:42 -04001781# ------------------------------------------------------------------------------
1782
Cary Clarkbc5697d2017-10-04 14:31:33 -04001783#Method void dump(bool asHex) const
Cary Clark4855f782018-02-06 09:41:53 -05001784#In Property
Cary Clarkab2621d2018-01-30 10:08:57 -05001785#Line # sends text representation to standard output using floats ##
Cary Clark09d80c02018-10-31 12:14:03 -04001786#Populate
Cary Clarkbc5697d2017-10-04 14:31:33 -04001787
1788#Example
Cary Clark7fc1d122017-10-09 14:07:42 -04001789 SkRect rect = {20, 30, 40, 50};
1790 for (bool dumpAsHex : { false, true } ) {
1791 rect.dump(dumpAsHex);
1792 SkDebugf("\n");
1793 }
1794#StdOut
Cary Clark154beea2017-10-26 07:58:48 -04001795SkRect::MakeLTRB(20, 30, 40, 50);
1796
1797SkRect::MakeLTRB(SkBits2Float(0x41a00000), /* 20.000000 */
1798 SkBits2Float(0x41f00000), /* 30.000000 */
1799 SkBits2Float(0x42200000), /* 40.000000 */
1800 SkBits2Float(0x42480000) /* 50.000000 */);
Cary Clark7fc1d122017-10-09 14:07:42 -04001801##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001802##
1803
Cary Clark7fc1d122017-10-09 14:07:42 -04001804#SeeAlso dumpHex
1805
Cary Clarkbc5697d2017-10-04 14:31:33 -04001806##
1807
Cary Clark7fc1d122017-10-09 14:07:42 -04001808# ------------------------------------------------------------------------------
1809
Cary Clarkbc5697d2017-10-04 14:31:33 -04001810#Method void dump() const
Cary Clark09d80c02018-10-31 12:14:03 -04001811#Populate
Cary Clark7fc1d122017-10-09 14:07:42 -04001812
Cary Clarkbc5697d2017-10-04 14:31:33 -04001813#Example
Cary Clark154beea2017-10-26 07:58:48 -04001814SkRect rect = {6.f / 7, 2.f / 3, 26.f / 10, 42.f / 6};
1815rect.dump();
1816SkRect copy = SkRect::MakeLTRB(0.857143f, 0.666667f, 2.6f, 7);
1817SkDebugf("rect is " "%s" "equal to copy\n", rect == copy ? "" : "not ");
Cary Clark7fc1d122017-10-09 14:07:42 -04001818#StdOut
Cary Clark154beea2017-10-26 07:58:48 -04001819SkRect::MakeLTRB(0.857143f, 0.666667f, 2.6f, 7);
Cary Clark7fc1d122017-10-09 14:07:42 -04001820rect is not equal to copy
1821##
Cary Clarkbc5697d2017-10-04 14:31:33 -04001822##
1823
Cary Clark7fc1d122017-10-09 14:07:42 -04001824#SeeAlso dumpHex
1825
Cary Clarkbc5697d2017-10-04 14:31:33 -04001826##
1827
Cary Clark7fc1d122017-10-09 14:07:42 -04001828# ------------------------------------------------------------------------------
1829
Cary Clarkbc5697d2017-10-04 14:31:33 -04001830#Method void dumpHex() const
Cary Clark4855f782018-02-06 09:41:53 -05001831#In Property
Cary Clarkab2621d2018-01-30 10:08:57 -05001832#Line # sends text representation to standard output using hexadecimal ##
Cary Clark7fc1d122017-10-09 14:07:42 -04001833Writes text representation of Rect to standard output. The representation may be
1834directly compiled as C++ code. Floating point values are written
1835in hexadecimal to preserve their exact bit pattern. The output reconstructs the
1836original Rect.
1837
Cary Clark682c58d2018-05-16 07:07:07 -04001838Use instead of dump() when submitting
1839#A bug reports against Skia # https://bug.skia.org ##
Cary Clark7fc1d122017-10-09 14:07:42 -04001840.
1841
Cary Clarkbc5697d2017-10-04 14:31:33 -04001842#Example
Cary Clark154beea2017-10-26 07:58:48 -04001843 SkRect rect = {6.f / 7, 2.f / 3, 26.f / 10, 42.f / 6};
1844rect.dumpHex();
1845SkRect copy = SkRect::MakeLTRB(SkBits2Float(0x3f5b6db7), /* 0.857143 */
1846 SkBits2Float(0x3f2aaaab), /* 0.666667 */
1847 SkBits2Float(0x40266666), /* 2.600000 */
1848 SkBits2Float(0x40e00000) /* 7.000000 */);
Cary Clark7fc1d122017-10-09 14:07:42 -04001849SkDebugf("rect is " "%s" "equal to copy\n", rect == copy ? "" : "not ");
1850#StdOut
Cary Clark154beea2017-10-26 07:58:48 -04001851SkRect::MakeLTRB(SkBits2Float(0x3f5b6db7), /* 0.857143 */
1852 SkBits2Float(0x3f2aaaab), /* 0.666667 */
1853 SkBits2Float(0x40266666), /* 2.600000 */
1854 SkBits2Float(0x40e00000) /* 7.000000 */);
Cary Clark7fc1d122017-10-09 14:07:42 -04001855rect is equal to copy
Cary Clarkbc5697d2017-10-04 14:31:33 -04001856##
Cary Clark7fc1d122017-10-09 14:07:42 -04001857##
1858
1859#SeeAlso dump
Cary Clark69261ba2018-10-11 15:28:31 -04001860
1861##
1862
1863#Struct SkRect ##
1864
1865#Topic Rect ##