Home | History | Annotate | Download | only in docs
      1 #Topic IRect
      2 #Alias IRects ##
      3 #Alias IRect_Reference ##
      4 
      5 #Struct SkIRect
      6 
      7 #Code
      8 #Populate
      9 ##
     10 
     11 SkIRect holds four 32-bit integer coordinates describing the upper and
     12 lower bounds of a rectangle. SkIRect may be created from outer bounds or
     13 from position, width, and height. SkIRect describes an area; if its right
     14 is less than or equal to its left, or if its bottom is less than or equal to
     15 its top, it is considered empty.
     16 
     17 #Member int32_t  fLeft
     18 #Line # smaller x-axis bounds ##
     19 May contain any value. The smaller of the horizontal values when sorted.
     20 When equal to or greater than fRight, IRect is empty.
     21 ##
     22 
     23 #Member int32_t  fTop
     24 #Line # smaller y-axis bounds ##
     25 May contain any value. The smaller of the horizontal values when sorted.
     26 When equal to or greater than fBottom, IRect is empty.
     27 ##
     28 
     29 #Member int32_t  fRight
     30 #Line # larger x-axis bounds ##
     31 May contain any value. The larger of the vertical values when sorted.
     32 When equal to or less than fLeft, IRect is empty.
     33 ##
     34 
     35 #Member int32_t  fBottom
     36 #Line # larger y-axis bounds ##
     37 May contain any value. The larger of the vertical values when sorted.
     38 When equal to or less than fTop, IRect is empty.
     39 ##
     40 
     41 # ------------------------------------------------------------------------------
     42 
     43 #Method static constexpr SkIRect MakeEmpty()
     44 
     45 #In Constructors
     46 #Line # returns bounds of (0, 0, 0, 0) ##
     47 #Populate
     48 
     49 #Example
     50     SkIRect rect = SkIRect::MakeEmpty();
     51     SkDebugf("MakeEmpty isEmpty: %s\n", rect.isEmpty() ? "true" : "false");
     52     rect.offset(10, 10);
     53     SkDebugf("offset rect isEmpty: %s\n", rect.isEmpty() ? "true" : "false");
     54     rect.inset(10, 10);
     55     SkDebugf("inset rect isEmpty: %s\n", rect.isEmpty() ? "true" : "false");
     56     rect.outset(20, 20);
     57     SkDebugf("outset rect isEmpty: %s\n", rect.isEmpty() ? "true" : "false");
     58 #StdOut
     59 MakeEmpty isEmpty: true
     60 offset rect isEmpty: true
     61 inset rect isEmpty: true
     62 outset rect isEmpty: false
     63 ##
     64 ##
     65 
     66 #SeeAlso EmptyIRect isEmpty setEmpty SkRect::MakeEmpty
     67 
     68 ##
     69 
     70 # ------------------------------------------------------------------------------
     71 
     72 #Method static constexpr SkIRect MakeWH(int32_t w, int32_t h)
     73 
     74 #In Constructors
     75 #Line # constructs from int input returning (0, 0, width, height) ##
     76 #Populate
     77 
     78 #Example
     79     SkIRect rect1 = SkIRect::MakeWH(25, 35);
     80     SkIRect rect2 = SkIRect::MakeSize({25, 35});
     81     SkIRect rect3 = SkIRect::MakeXYWH(0, 0, 25, 35);
     82     SkIRect rect4 = SkIRect::MakeLTRB(0, 0, 25, 35);
     83     SkDebugf("all %s" "equal\n", rect1 == rect2 && rect2 == rect3 && rect3 == rect4 ?
     84              "" : "not ");
     85 #StdOut
     86 all equal
     87 ##
     88 ##
     89 
     90 #SeeAlso MakeSize MakeXYWH SkRect::MakeWH SkRect::MakeIWH
     91 
     92 ##
     93 
     94 # ------------------------------------------------------------------------------
     95 
     96 #Method static constexpr SkIRect MakeSize(const SkISize& size)
     97 
     98 #In Constructors
     99 #Line # constructs from ISize returning (0, 0, width, height) ##
    100 #Populate
    101 
    102 #Example
    103     SkSize size = {25.5f, 35.5f};
    104     SkIRect rect = SkIRect::MakeSize(size.toRound());
    105     SkDebugf("round width: %d  height: %d\n", rect.width(), rect.height());
    106     rect = SkIRect::MakeSize(size.toFloor());
    107     SkDebugf("floor width: %d  height: %d\n", rect.width(), rect.height());
    108 #StdOut
    109 round width: 26  height: 36
    110 floor width: 25  height: 35
    111 ##
    112 ##
    113 
    114 #SeeAlso MakeWH MakeXYWH SkRect::Make SkRect::MakeIWH
    115 
    116 ##
    117 
    118 # ------------------------------------------------------------------------------
    119 
    120 #Method static constexpr SkIRect MakeLTRB(int32_t l, int32_t t, int32_t r, int32_t b)
    121 
    122 #In Constructors
    123 #Line # constructs from int left, top, right, bottom ##
    124 #Populate
    125 
    126 #Example
    127     SkIRect rect = SkIRect::MakeLTRB(5, 35, 15, 25);
    128     SkDebugf("rect: %d, %d, %d, %d  isEmpty: %s\n", rect.left(), rect.top(), rect.right(),
    129               rect.bottom(), rect.isEmpty() ? "true" : "false");
    130     rect.sort();
    131     SkDebugf("rect: %d, %d, %d, %d  isEmpty: %s\n", rect.left(), rect.top(), rect.right(),
    132               rect.bottom(), rect.isEmpty() ? "true" : "false");
    133 #StdOut
    134 rect: 5, 35, 15, 25  isEmpty: true
    135 rect: 5, 25, 15, 35  isEmpty: false
    136 ##
    137 ##
    138 
    139 #SeeAlso MakeXYWH SkRect::MakeLTRB
    140 
    141 ##
    142 
    143 # ------------------------------------------------------------------------------
    144 
    145 #Method static constexpr SkIRect MakeXYWH(int32_t x, int32_t y, int32_t w, int32_t h)
    146 
    147 #In Constructors
    148 #Line # constructs from int input returning (x, y, width, height) ##
    149 
    150 #Populate
    151 
    152 #Example
    153     SkIRect rect = SkIRect::MakeXYWH(5, 35, -15, 25);
    154     SkDebugf("rect: %d, %d, %d, %d  isEmpty: %s\n", rect.left(), rect.top(), rect.right(),
    155               rect.bottom(), rect.isEmpty() ? "true" : "false");
    156     rect.sort();
    157     SkDebugf("rect: %d, %d, %d, %d  isEmpty: %s\n", rect.left(), rect.top(), rect.right(),
    158               rect.bottom(), rect.isEmpty() ? "true" : "false");
    159 #StdOut
    160 rect: 5, 35, -10, 60  isEmpty: true
    161 rect: -10, 35, 5, 60  isEmpty: false
    162 ##
    163 ##
    164 
    165 #SeeAlso MakeLTRB SkRect::MakeXYWH
    166 
    167 ##
    168 
    169 #Subtopic Property
    170 #Line # member values, center, validity ##
    171 ##
    172 
    173 # ------------------------------------------------------------------------------
    174 
    175 #Method int32_t left() const
    176 
    177 #In Property
    178 #Line # returns smaller bounds in x, if sorted ##
    179 #Populate
    180 
    181 #Example
    182     SkIRect unsorted = { 15, 5, 10, 25 };
    183     SkDebugf("unsorted.fLeft: %d unsorted.left(): %d\n", unsorted.fLeft, unsorted.left());
    184     SkIRect sorted = unsorted.makeSorted();
    185     SkDebugf("sorted.fLeft: %d sorted.left(): %d\n", sorted.fLeft, sorted.left());
    186 #StdOut
    187 unsorted.fLeft: 15 unsorted.left(): 15
    188 sorted.fLeft: 10 sorted.left(): 10
    189 ##
    190 ##
    191 
    192 #SeeAlso fLeft x() SkRect::left()
    193 
    194 ##
    195 
    196 # ------------------------------------------------------------------------------
    197 
    198 #Method int32_t top() const
    199 
    200 #In Property
    201 #Line # returns smaller bounds in y, if sorted ##
    202 #Populate
    203 
    204 #Example
    205     SkIRect unsorted = { 15, 25, 10, 5 };
    206     SkDebugf("unsorted.fTop: %d unsorted.top(): %d\n", unsorted.fTop, unsorted.top());
    207     SkIRect sorted = unsorted.makeSorted();
    208     SkDebugf("sorted.fTop: %d sorted.top(): %d\n", sorted.fTop, sorted.top());
    209 #StdOut
    210 unsorted.fTop: 25 unsorted.top(): 25
    211 sorted.fTop: 5 sorted.top(): 5
    212 ##
    213 ##
    214 
    215 #SeeAlso fTop y() SkRect::top()
    216 
    217 ##
    218 
    219 # ------------------------------------------------------------------------------
    220 
    221 #Method int32_t right() const
    222 
    223 #In Property
    224 #Line # returns larger bounds in x, if sorted ##
    225 #Populate
    226 
    227 #Example
    228     SkIRect unsorted = { 15, 25, 10, 5 };
    229     SkDebugf("unsorted.fRight: %d unsorted.right(): %d\n", unsorted.fRight, unsorted.right());
    230     SkIRect sorted = unsorted.makeSorted();
    231     SkDebugf("sorted.fRight: %d sorted.right(): %d\n", sorted.fRight, sorted.right());
    232 #StdOut
    233 unsorted.fRight: 10 unsorted.right(): 10
    234 sorted.fRight: 15 sorted.right(): 15
    235 ##
    236 ##
    237 
    238 #SeeAlso fRight SkRect::right()
    239 
    240 ##
    241 
    242 # ------------------------------------------------------------------------------
    243 
    244 #Method int32_t bottom() const
    245 
    246 #In Property
    247 #Line # returns larger bounds in y, if sorted ##
    248 #Populate
    249 
    250 #Example
    251     SkIRect unsorted = { 15, 25, 10, 5 };
    252     SkDebugf("unsorted.fBottom: %d unsorted.bottom(): %d\n", unsorted.fBottom, unsorted.bottom());
    253     SkIRect sorted = unsorted.makeSorted();
    254     SkDebugf("sorted.fBottom: %d sorted.bottom(): %d\n", sorted.fBottom, sorted.bottom());
    255 #StdOut
    256 unsorted.fBottom: 5 unsorted.bottom(): 5
    257 sorted.fBottom: 25 sorted.bottom(): 25
    258 ##
    259 ##
    260 
    261 #SeeAlso fBottom SkRect::bottom()
    262 
    263 ##
    264 
    265 # ------------------------------------------------------------------------------
    266 
    267 #Method int32_t x() const
    268 
    269 #In Property
    270 #Line # returns bounds left ##
    271 #Populate
    272 
    273 #Example
    274     SkIRect unsorted = { 15, 5, 10, 25 };
    275     SkDebugf("unsorted.fLeft: %d unsorted.x(): %d\n", unsorted.fLeft, unsorted.x());
    276     SkIRect sorted = unsorted.makeSorted();
    277     SkDebugf("sorted.fLeft: %d sorted.x(): %d\n", sorted.fLeft, sorted.x());
    278 #StdOut
    279 unsorted.fLeft: 15 unsorted.x(): 15
    280 sorted.fLeft: 10 sorted.x(): 10
    281 ##
    282 ##
    283 
    284 #SeeAlso fLeft left() y() SkRect::x()
    285 
    286 ##
    287 
    288 # ------------------------------------------------------------------------------
    289 
    290 #Method int32_t y() const
    291 
    292 #In Property
    293 #Line # returns bounds top ##
    294 #Populate
    295 
    296 #Example
    297     SkIRect unsorted = { 15, 25, 10, 5 };
    298     SkDebugf("unsorted.fTop: %d unsorted.y(): %d\n", unsorted.fTop, unsorted.y());
    299     SkIRect sorted = unsorted.makeSorted();
    300     SkDebugf("sorted.fTop: %d sorted.y(): %d\n", sorted.fTop, sorted.y());
    301 #StdOut
    302 unsorted.fTop: 25 unsorted.y(): 25
    303 sorted.fTop: 5 sorted.y(): 5
    304 ##
    305 ##
    306 
    307 #SeeAlso fTop top() x() SkRect::y()
    308 
    309 ##
    310 
    311 # ------------------------------------------------------------------------------
    312 
    313 #Method int32_t width() const
    314 
    315 #In Property
    316 #Line # returns span in x ##
    317 #Populate
    318 
    319 #Example
    320     SkIRect unsorted = { 15, 25, 10, 5 };
    321     SkDebugf("unsorted width: %d\n", unsorted.width());
    322     SkIRect large = { -2147483647, 1, 2147483644, 2 };
    323     SkDebugf("large width: %d\n", large.width());
    324 #StdOut
    325 unsorted width: -5
    326 large width: -5
    327 ##
    328 ##
    329 
    330 #SeeAlso height() width64() height64() SkRect::width()
    331 
    332 ##
    333 
    334 # ------------------------------------------------------------------------------
    335 
    336 #Method int64_t width64() const
    337 
    338 #In Property
    339 #Line # returns span in y as int64_t ##
    340 #Populate
    341 
    342 #Example
    343 SkIRect large = { -2147483647, 1, 2147483644, 2 };
    344 SkDebugf("width: %d width64: %lld\n", large.width(), large.width64());
    345 #StdOut
    346 width: -5 width64: 4294967291
    347 ##
    348 ##
    349 
    350 #SeeAlso width() height() height64() SkRect::width()
    351 
    352 ##
    353 
    354 # ------------------------------------------------------------------------------
    355 
    356 #Method int32_t height() const
    357 
    358 #In Property
    359 #Line # returns span in y ##
    360 #Populate
    361 
    362 #Example
    363     SkIRect unsorted = { 15, 25, 10, 20 };
    364     SkDebugf("unsorted height: %d\n", unsorted.height());
    365     SkIRect large = { 1, -2147483647, 2, 2147483644 };
    366     SkDebugf("large height: %d\n", large.height());
    367 #StdOut
    368 unsorted height: -5
    369 large height: -5
    370 ##
    371 ##
    372 
    373 #SeeAlso width() SkRect::height()
    374 
    375 ##
    376 
    377 # ------------------------------------------------------------------------------
    378 
    379 #Method int64_t height64() const
    380 
    381 #In Property
    382 #Line # returns span in y as int64_t ##
    383 #Populate
    384 
    385 #Example
    386 SkIRect large = { 1, -2147483647, 2, 2147483644 };
    387 SkDebugf("height: %d height64: %lld\n", large.height(), large.height64());
    388 #StdOut
    389 height: -5 height64: 4294967291
    390 ##
    391 ##
    392 
    393 #SeeAlso width() height() width64() SkRect::height()
    394 
    395 ##
    396 
    397 # ------------------------------------------------------------------------------
    398 
    399 #Method SkISize size() const
    400 
    401 #In Property
    402 #Line # returns ISize (width, height) ##
    403 #Populate
    404 
    405 #Example
    406     auto debugster = [](const char* prefix, const SkIRect& rect) -> void {
    407         SkISize size = rect.size();
    408         SkDebugf("%s ", prefix);
    409         SkDebugf("rect: %d, %d, %d, %d  ", rect.left(), rect.top(), rect.right(), rect.bottom());
    410         SkDebugf("size: %d, %d\n", size.width(), size.height());
    411     };
    412     SkIRect rect = {20, 30, 40, 50};
    413     debugster("original", rect);
    414     rect.offset(20, 20);
    415     debugster("  offset", rect);
    416     rect.outset(20, 20);
    417     debugster("  outset", rect);
    418 #StdOut
    419 original rect: 20, 30, 40, 50  size: 20, 20
    420   offset rect: 40, 50, 60, 70  size: 20, 20
    421   outset rect: 20, 30, 80, 90  size: 60, 60
    422 ##
    423 ##
    424 
    425 #SeeAlso height() width() MakeSize
    426 
    427 ##
    428 
    429 # ------------------------------------------------------------------------------
    430 
    431 #Method bool isEmpty() const
    432 
    433 #In Property
    434 #Line # returns true if width or height are zero or negative or they exceed int32_t ##
    435 #Populate
    436 
    437 #Example
    438     SkIRect tests[] = {{20, 40, 10, 50}, {20, 40, 20, 50}};
    439     for (auto rect : tests) {
    440         SkDebugf("rect: {%d, %d, %d, %d} is" "%s empty\n", rect.left(), rect.top(), rect.right(),
    441                  rect.bottom(), rect.isEmpty() ? "" : " not");
    442         rect.sort();
    443         SkDebugf("sorted: {%d, %d, %d, %d} is" "%s empty\n", rect.left(), rect.top(), rect.right(),
    444                  rect.bottom(), rect.isEmpty() ? "" : " not");
    445     }
    446 #StdOut
    447 rect: {20, 40, 10, 50} is empty
    448 sorted: {10, 40, 20, 50} is not empty
    449 rect: {20, 40, 20, 50} is empty
    450 sorted: {20, 40, 20, 50} is empty
    451 ##
    452 ##
    453 
    454 #SeeAlso EmptyIRect MakeEmpty sort SkRect::isEmpty
    455 
    456 ##
    457 
    458 # ------------------------------------------------------------------------------
    459 
    460 #Method bool isEmpty64() const
    461 
    462 #In Property
    463 #Line # returns true if width or height are zero or negative ##
    464 #Populate
    465 
    466 #Example
    467 SkIRect tests[] = {{20, 40, 10, 50}, {20, 40, 20, 50}};
    468 for (auto rect : tests) {
    469     SkDebugf("rect: {%d, %d, %d, %d} is" "%s empty\n", rect.left(), rect.top(), rect.right(),
    470             rect.bottom(), rect.isEmpty64() ? "" : " not");
    471     rect.sort();
    472     SkDebugf("sorted: {%d, %d, %d, %d} is" "%s empty\n", rect.left(), rect.top(), rect.right(),
    473             rect.bottom(), rect.isEmpty64() ? "" : " not");
    474 }
    475 #StdOut
    476 rect: {20, 40, 10, 50} is empty
    477 sorted: {10, 40, 20, 50} is not empty
    478 rect: {20, 40, 20, 50} is empty
    479 sorted: {20, 40, 20, 50} is empty
    480 ##
    481 ##
    482 
    483 #SeeAlso EmptyIRect MakeEmpty sort SkRect::isEmpty
    484 
    485 ##
    486 
    487 #Subtopic Operators
    488 
    489 # ------------------------------------------------------------------------------
    490 
    491 #Method bool operator==(const SkIRect& a, const SkIRect& b)
    492 
    493 #In Operators
    494 #Line # returns true if members are equal ##
    495 #Populate
    496 
    497 #Example
    498     SkIRect test = {0, 0, 2, 2};
    499     SkIRect sorted = test.makeSorted();
    500     SkDebugf("test %c= sorted\n", test == sorted ? '=' : '!');
    501 #StdOut
    502 test == sorted
    503 ##
    504 ##
    505 
    506 #SeeAlso operator!=(const SkIRect& a, const SkIRect& b)
    507 
    508 ##
    509 
    510 # ------------------------------------------------------------------------------
    511 
    512 #Method bool operator!=(const SkIRect& a, const SkIRect& b)
    513 
    514 #In Operators
    515 #Line # returns true if members are unequal ##
    516 #Populate
    517 
    518 #Example
    519     SkIRect test = {2, 2, 0, 0};
    520     SkIRect sorted = test.makeSorted();
    521     SkDebugf("test %c= sorted\n", test != sorted ? '!' : '=');
    522 #StdOut
    523 test != sorted
    524 ##
    525 ##
    526 
    527 #SeeAlso operator==(const SkIRect& a, const SkIRect& b)
    528 
    529 ##
    530 
    531 #Subtopic Operators ##
    532 
    533 # ------------------------------------------------------------------------------
    534 
    535 #Subtopic Set
    536 #Line # replaces all values ##
    537 ##
    538 
    539 #Method void setEmpty()
    540 
    541 #In Set
    542 #Line # sets to (0, 0, 0, 0) ##
    543 #Populate
    544 
    545 #Example
    546     SkIRect rect = {3, 4, 1, 2};
    547     for (int i = 0; i < 2; ++i) {
    548     SkDebugf("rect: {%d, %d, %d, %d} is %s" "empty\n", rect.fLeft, rect.fTop,
    549              rect.fRight, rect.fBottom, rect.isEmpty() ? "" : "not ");
    550     rect.setEmpty();
    551     }
    552 #StdOut
    553 rect: {3, 4, 1, 2} is empty
    554 rect: {0, 0, 0, 0} is empty
    555 ##
    556 ##
    557 
    558 #SeeAlso MakeEmpty SkRect::setEmpty
    559 
    560 ##
    561 
    562 # ------------------------------------------------------------------------------
    563 
    564 #Method void set(int32_t left, int32_t top, int32_t right, int32_t bottom)
    565 
    566 #In Set
    567 #Line # sets to (left, top, right, bottom) ##
    568 #Populate
    569 
    570 #Example
    571     SkIRect rect1 = {3, 4, 1, 2};
    572     SkDebugf("rect1: {%d, %d, %d, %d}\n", rect1.fLeft, rect1.fTop, rect1.fRight, rect1.fBottom);
    573     SkIRect rect2;
    574     rect2.set(3, 4, 1, 2);
    575     SkDebugf("rect2: {%d, %d, %d, %d}\n", rect2.fLeft, rect2.fTop, rect2.fRight, rect2.fBottom);
    576 #StdOut
    577 rect1: {3, 4, 1, 2}
    578 rect2: {3, 4, 1, 2}
    579 ##
    580 ##
    581 
    582 #SeeAlso setLTRB setXYWH SkRect::set
    583 
    584 ##
    585 
    586 # ------------------------------------------------------------------------------
    587 
    588 #Method void setLTRB(int32_t left, int32_t top, int32_t right, int32_t bottom)
    589 
    590 #In Set
    591 #Line # sets to SkScalar input (left, top, right, bottom) ##
    592 #Populate
    593 
    594 #Example
    595     SkIRect rect1 = {3, 4, 1, 2};
    596     SkDebugf("rect1: {%d, %d, %d, %d}\n", rect1.fLeft, rect1.fTop, rect1.fRight, rect1.fBottom);
    597     SkIRect rect2;
    598     rect2.setLTRB(3, 4, 1, 2);
    599     SkDebugf("rect2: {%d, %d, %d, %d}\n", rect2.fLeft, rect2.fTop, rect2.fRight, rect2.fBottom);
    600 #StdOut
    601 rect1: {3, 4, 1, 2}
    602 rect2: {3, 4, 1, 2}
    603 ##
    604 ##
    605 
    606 #SeeAlso set setXYWH SkRect::setLTRB
    607 
    608 ##
    609 
    610 # ------------------------------------------------------------------------------
    611 
    612 #Method void setXYWH(int32_t x, int32_t y, int32_t width, int32_t height)
    613 
    614 #In Set
    615 #Line # sets to (x, y, width, height) ##
    616 Sets IRect to: #Formula # (x, y, x + width, y + height) ##.
    617 Does not validate input; width or height may be negative.
    618 
    619 #Param x  stored in fLeft ##
    620 #Param y  stored in fTop ##
    621 #Param width  added to x and stored in fRight ##
    622 #Param height  added to y and stored in fBottom ##
    623 
    624 #Example
    625     SkIRect rect;
    626     rect.setXYWH(5, 35, -15, 25);
    627     SkDebugf("rect: %d, %d, %d, %d  isEmpty: %s\n", rect.left(), rect.top(), rect.right(),
    628               rect.bottom(), rect.isEmpty() ? "true" : "false");
    629     rect.sort();
    630     SkDebugf("rect: %d, %d, %d, %d  isEmpty: %s\n", rect.left(), rect.top(), rect.right(),
    631               rect.bottom(), rect.isEmpty() ? "true" : "false");
    632 #StdOut
    633 rect: 5, 35, -10, 60  isEmpty: true
    634 rect: -10, 35, 5, 60  isEmpty: false
    635 ##
    636 ##
    637 
    638 #SeeAlso MakeXYWH setLTRB set SkRect::setXYWH
    639 
    640 ##
    641 
    642 #Subtopic Inset_Outset_Offset
    643 #Line # moves sides ##
    644 
    645 # ------------------------------------------------------------------------------
    646 
    647 #Method SkIRect makeOffset(int32_t dx, int32_t dy) const
    648 
    649 #In Inset_Outset_Offset
    650 #Line # constructs from translated sides ##
    651 #Populate
    652 
    653 #Example
    654     SkIRect rect = { 10, 50, 20, 60 };
    655     SkDebugf("rect: %d, %d, %d, %d  isEmpty: %s\n", rect.left(), rect.top(), rect.right(),
    656               rect.bottom(), rect.isEmpty() ? "true" : "false");
    657     rect = rect.makeOffset(15, 32);
    658     SkDebugf("rect: %d, %d, %d, %d  isEmpty: %s\n", rect.left(), rect.top(), rect.right(),
    659               rect.bottom(), rect.isEmpty() ? "true" : "false");
    660 #StdOut
    661 rect: 10, 50, 20, 60  isEmpty: false
    662 rect: 25, 82, 35, 92  isEmpty: false
    663 ##
    664 ##
    665 
    666 #SeeAlso offset() makeInset makeOutset SkRect::makeOffset
    667 
    668 ##
    669 
    670 # ------------------------------------------------------------------------------
    671 
    672 #Method SkIRect makeInset(int32_t dx, int32_t dy) const
    673 
    674 #In Inset_Outset_Offset
    675 #Line # constructs from sides moved symmetrically about the center ##
    676 #Populate
    677 
    678 #Example
    679     SkIRect rect = { 10, 50, 20, 60 };
    680     SkDebugf("rect: %d, %d, %d, %d  isEmpty: %s\n", rect.left(), rect.top(), rect.right(),
    681               rect.bottom(), rect.isEmpty() ? "true" : "false");
    682     rect = rect.makeInset(15, 32);
    683     SkDebugf("rect: %d, %d, %d, %d  isEmpty: %s\n", rect.left(), rect.top(), rect.right(),
    684               rect.bottom(), rect.isEmpty() ? "true" : "false");
    685 #StdOut
    686 rect: 10, 50, 20, 60  isEmpty: false
    687 rect: 25, 82, 5, 28  isEmpty: true
    688 ##
    689 ##
    690 
    691 #SeeAlso inset() makeOffset makeOutset SkRect::makeInset
    692 
    693 ##
    694 
    695 # ------------------------------------------------------------------------------
    696 
    697 #Method SkIRect makeOutset(int32_t dx, int32_t dy) const
    698 
    699 #In Inset_Outset_Offset
    700 #Line # constructs from sides moved symmetrically about the center ##
    701 #Populate
    702 
    703 #Example
    704     SkIRect rect = { 10, 50, 20, 60 };
    705     SkDebugf("rect: %d, %d, %d, %d  isEmpty: %s\n", rect.left(), rect.top(), rect.right(),
    706               rect.bottom(), rect.isEmpty() ? "true" : "false");
    707     rect = rect.makeOutset(15, 32);
    708     SkDebugf("rect: %d, %d, %d, %d  isEmpty: %s\n", rect.left(), rect.top(), rect.right(),
    709               rect.bottom(), rect.isEmpty() ? "true" : "false");
    710 #StdOut
    711 rect: 10, 50, 20, 60  isEmpty: false
    712 rect: -5, 18, 35, 92  isEmpty: false
    713 ##
    714 ##
    715 
    716 #SeeAlso outset() makeOffset makeInset SkRect::makeOutset
    717 
    718 ##
    719 
    720 # ------------------------------------------------------------------------------
    721 
    722 #Method void offset(int32_t dx, int32_t dy)
    723 
    724 #In Inset_Outset_Offset
    725 #Line # translates sides without changing width and height ##
    726 #Populate
    727 
    728 #Example
    729     SkIRect rect = { 10, 14, 50, 73 };
    730     rect.offset(5, 13);
    731     SkDebugf("rect: %d, %d, %d, %d\n", rect.fLeft, rect.fTop, rect.fRight, rect.fBottom);
    732 #StdOut
    733 rect: 15, 27, 55, 86
    734 ##
    735 ##
    736 
    737 #SeeAlso offsetTo makeOffset SkRect::offset
    738 
    739 ##
    740 
    741 # ------------------------------------------------------------------------------
    742 
    743 #Method void offset(const SkIPoint& delta)
    744 
    745 #In Inset_Outset_Offset
    746 #Populate
    747 
    748 #Example
    749     SkIRect rect = { 10, 14, 50, 73 };
    750     rect.offset({5, 13});
    751     SkDebugf("rect: %d, %d, %d, %d\n", rect.fLeft, rect.fTop, rect.fRight, rect.fBottom);
    752 #StdOut
    753 rect: 15, 27, 55, 86
    754 ##
    755 ##
    756 
    757 #SeeAlso offsetTo makeOffset SkRect::offset
    758 
    759 ##
    760 
    761 # ------------------------------------------------------------------------------
    762 
    763 #Method void offsetTo(int32_t newX, int32_t newY)
    764 
    765 #In Inset_Outset_Offset
    766 #Line # translates to (x, y) without changing width and height ##
    767 #Populate
    768 
    769 #Example
    770     SkIRect rect = { 10, 14, 50, 73 };
    771     rect.offsetTo(15, 27);
    772     SkDebugf("rect: %d, %d, %d, %d\n", rect.fLeft, rect.fTop, rect.fRight, rect.fBottom);
    773 #StdOut
    774 rect: 15, 27, 55, 86
    775 ##
    776 ##
    777 
    778 #SeeAlso offset makeOffset setXYWH SkRect::offsetTo
    779 
    780 ##
    781 
    782 # ------------------------------------------------------------------------------
    783 
    784 #Method void inset(int32_t dx, int32_t dy)
    785 
    786 #In Inset_Outset_Offset
    787 #Line # moves the sides symmetrically about the center ##
    788 #Populate
    789 
    790 #Example
    791     SkIRect rect = { 10, 14, 50, 73 };
    792     rect.inset(5, 13);
    793     SkDebugf("rect: %d, %d, %d, %d\n", rect.fLeft, rect.fTop, rect.fRight, rect.fBottom);
    794 #StdOut
    795 rect: 15, 27, 45, 60
    796 ##
    797 ##
    798 
    799 #SeeAlso outset makeInset SkRect::inset
    800 
    801 ##
    802 
    803 # ------------------------------------------------------------------------------
    804 
    805 #Method void outset(int32_t dx, int32_t dy)
    806 
    807 #In Inset_Outset_Offset
    808 #Line # moves the sides symmetrically about the center ##
    809 #Populate
    810 
    811 #Example
    812     SkIRect rect = { 10, 14, 50, 73 };
    813     rect.outset(5, 13);
    814     SkDebugf("rect: %d, %d, %d, %d\n", rect.fLeft, rect.fTop, rect.fRight, rect.fBottom);
    815 #StdOut
    816 rect: 5, 1, 55, 86
    817 ##
    818 ##
    819 
    820 #SeeAlso inset makeOutset SkRect::outset
    821 
    822 ##
    823 
    824 #Subtopic Inset_Outset_Offset ##
    825 
    826 #Subtopic Intersection
    827 #Line # sets to shared bounds ##
    828 
    829 IRects intersect when they enclose a common area. To intersect, each of the pair
    830 must describe area; fLeft is less than fRight, and fTop is less than fBottom;
    831 SkIRect::isEmpty() returns false. The intersection of IRect pair can be described by:
    832 #Formula # (max(a.fLeft, b.fLeft), max(a.fTop, b.fTop),
    833             min(a.fRight, b.fRight), min(a.fBottom, b.fBottom)) ##.
    834 
    835 The intersection is only meaningful if the resulting IRect is not empty and
    836 describes an area: fLeft is less than fRight, and fTop is less than fBottom.
    837 
    838 # ------------------------------------------------------------------------------
    839 
    840 #Method void adjust(int32_t dL, int32_t dT, int32_t dR, int32_t dB)
    841 
    842 #In Inset_Outset_Offset
    843 #Line # moves the sides independently relative to their original locations ##
    844 #Populate
    845 
    846 #Example
    847     SkIRect rect = { 8, 11, 19, 22 };
    848     rect.adjust(2, -1, 1, -2);
    849     SkDebugf("rect: %d, %d, %d, %d\n", rect.fLeft, rect.fTop, rect.fRight, rect.fBottom);
    850 #StdOut
    851 rect: 10, 10, 20, 20
    852 ##
    853 ##
    854 
    855 #SeeAlso inset outset
    856 
    857 ##
    858 
    859 # ------------------------------------------------------------------------------
    860 
    861 #Method bool contains(int32_t x, int32_t y) const
    862 
    863 #In Intersection
    864 #Line # returns true if IPoint (x, y) is equal or inside ##
    865 Returns true if: #Formula # fLeft <= x < fRight && fTop <= y < fBottom ##.
    866 Returns false if IRect is empty.
    867 
    868 Considers input to describe constructed IRect: #Formula # (x, y, x + 1, y + 1) ## and 
    869 returns true if constructed area is completely enclosed by IRect area.
    870 
    871 #Param x  test IPoint x-coordinate ##
    872 #Param y  test IPoint y-coordinate ##
    873 
    874 #Return true if (x, y) is inside IRect ##
    875 
    876 #Example
    877     SkIRect rect = { 30, 50, 40, 60 };
    878     SkIPoint pts[] = { { 30, 50}, { 40, 50}, { 30, 60} };
    879     for (auto pt : pts) {
    880         SkDebugf("rect: (%d, %d, %d, %d) %s (%d, %d)\n",
    881                  rect.left(), rect.top(), rect.right(), rect.bottom(),
    882                  rect.contains(pt.x(), pt.y()) ? "contains" : "does not contain", pt.x(), pt.y());
    883     }
    884 #StdOut
    885 rect: (30, 50, 40, 60) contains (30, 50)
    886 rect: (30, 50, 40, 60) does not contain (40, 50)
    887 rect: (30, 50, 40, 60) does not contain (30, 60)
    888 ##
    889 ##
    890 
    891 #SeeAlso containsNoEmptyCheck SkRect::contains
    892 
    893 ##
    894 
    895 # ------------------------------------------------------------------------------
    896 
    897 #Method bool contains(int32_t left, int32_t top, int32_t right, int32_t bottom) const
    898 
    899 #In Intersection
    900 #Populate
    901 
    902 #Example
    903     SkIRect rect = { 30, 50, 40, 60 };
    904     SkIRect tests[] = { { 30, 50, 31, 51}, { 39, 49, 40, 50}, { 29, 59, 30, 60} };
    905     for (auto contained : tests) {
    906         bool success = rect.contains(
    907                        contained.left(), contained.top(), contained.right(), contained.bottom());
    908         SkDebugf("rect: (%d, %d, %d, %d) %s (%d, %d, %d, %d)\n",
    909                  rect.left(), rect.top(), rect.right(), rect.bottom(),
    910                  success ? "contains" : "does not contain",
    911                  contained.left(), contained.top(), contained.right(), contained.bottom());
    912     }
    913 #StdOut
    914 rect: (30, 50, 40, 60) contains (30, 50, 31, 51)
    915 rect: (30, 50, 40, 60) does not contain (39, 49, 40, 50)
    916 rect: (30, 50, 40, 60) does not contain (29, 59, 30, 60)
    917 ##
    918 ##
    919 
    920 #SeeAlso containsNoEmptyCheck SkRect::contains
    921 
    922 ##
    923 
    924 # ------------------------------------------------------------------------------
    925 
    926 #Method bool contains(const SkIRect& r) const
    927 
    928 #In Intersection
    929 #Populate
    930 
    931 #Example
    932     SkIRect rect = { 30, 50, 40, 60 };
    933     SkIRect tests[] = { { 30, 50, 31, 51}, { 39, 49, 40, 50}, { 29, 59, 30, 60} };
    934     for (auto contained : tests) {
    935         SkDebugf("rect: (%d, %d, %d, %d) %s (%d, %d, %d, %d)\n",
    936                  rect.left(), rect.top(), rect.right(), rect.bottom(),
    937                  rect.contains(contained) ? "contains" : "does not contain",
    938                  contained.left(), contained.top(), contained.right(), contained.bottom());
    939     }
    940 #StdOut
    941 rect: (30, 50, 40, 60) contains (30, 50, 31, 51)
    942 rect: (30, 50, 40, 60) does not contain (39, 49, 40, 50)
    943 rect: (30, 50, 40, 60) does not contain (29, 59, 30, 60)
    944 ##
    945 ##
    946 
    947 #SeeAlso containsNoEmptyCheck SkRect::contains
    948 
    949 ##
    950 
    951 # ------------------------------------------------------------------------------
    952 
    953 #Method bool contains(const SkRect& r) const
    954 
    955 #In Intersection
    956 #Populate
    957 
    958 #Example
    959     SkIRect rect = { 30, 50, 40, 60 };
    960     SkRect tests[] = { { 30, 50, 31, 51}, { 39, 49, 40, 50}, { 29, 59, 30, 60} };
    961     for (auto contained : tests) {
    962         SkDebugf("rect: (%d, %d, %d, %d) %s (%g, %g, %g, %g)\n",
    963                  rect.left(), rect.top(), rect.right(), rect.bottom(),
    964                  rect.contains(contained) ? "contains" : "does not contain",
    965                  contained.left(), contained.top(), contained.right(), contained.bottom());
    966     }
    967 #StdOut
    968 rect: (30, 50, 40, 60) contains (30, 50, 31, 51)
    969 rect: (30, 50, 40, 60) does not contain (39, 49, 40, 50)
    970 rect: (30, 50, 40, 60) does not contain (29, 59, 30, 60)
    971 ##
    972 ##
    973 
    974 #SeeAlso containsNoEmptyCheck SkRect::contains
    975 
    976 ##
    977 
    978 # ------------------------------------------------------------------------------
    979 
    980 #Method bool containsNoEmptyCheck(int32_t left, int32_t top,
    981                               int32_t right, int32_t bottom) const
    982 #In Intersection
    983 #Line # returns true if contains unsorted IRect ##
    984 #Populate
    985 
    986 #Example
    987     SkIRect rect = { 30, 50, 40, 60 };
    988     SkIRect tests[] = { { 30, 50, 31, 51}, { 39, 49, 40, 50}, { 29, 59, 30, 60} };
    989     for (auto contained : tests) {
    990         bool success = rect.containsNoEmptyCheck(
    991                  contained.left(), contained.top(), contained.right(), contained.bottom());
    992         SkDebugf("rect: (%d, %d, %d, %d) %s (%d, %d, %d, %d)\n",
    993                  rect.left(), rect.top(), rect.right(), rect.bottom(),
    994                  success ? "contains" : "does not contain",
    995                  contained.left(), contained.top(), contained.right(), contained.bottom());
    996     }
    997 #StdOut
    998 rect: (30, 50, 40, 60) contains (30, 50, 31, 51)
    999 rect: (30, 50, 40, 60) does not contain (39, 49, 40, 50)
   1000 rect: (30, 50, 40, 60) does not contain (29, 59, 30, 60)
   1001 ##
   1002 ##
   1003 
   1004 #SeeAlso contains SkRect::contains
   1005 
   1006 ##
   1007 
   1008 # ------------------------------------------------------------------------------
   1009 
   1010 #Method bool containsNoEmptyCheck(const SkIRect& r) const
   1011 
   1012 #In Intersection
   1013 #Populate
   1014 
   1015 #Example
   1016     SkIRect rect = { 30, 50, 40, 60 };
   1017     SkIRect tests[] = { { 30, 50, 31, 51}, { 39, 49, 40, 50}, { 29, 59, 30, 60} };
   1018     for (auto contained : tests) {
   1019         SkDebugf("rect: (%d, %d, %d, %d) %s (%d, %d, %d, %d)\n",
   1020                  rect.left(), rect.top(), rect.right(), rect.bottom(),
   1021                  rect.containsNoEmptyCheck(contained) ? "contains" : "does not contain",
   1022                  contained.left(), contained.top(), contained.right(), contained.bottom());
   1023     }
   1024 #StdOut
   1025 rect: (30, 50, 40, 60) contains (30, 50, 31, 51)
   1026 rect: (30, 50, 40, 60) does not contain (39, 49, 40, 50)
   1027 rect: (30, 50, 40, 60) does not contain (29, 59, 30, 60)
   1028 ##
   1029 ##
   1030 
   1031 #SeeAlso contains SkRect::contains
   1032 
   1033 ##
   1034 
   1035 # ------------------------------------------------------------------------------
   1036 
   1037 #Method bool intersect(const SkIRect& r)
   1038 
   1039 #In Intersection
   1040 #Line # sets to shared area; returns true if not empty ##
   1041 #Populate
   1042 
   1043 #Example
   1044 #Description
   1045 Two SkDebugf calls are required. If the calls are combined, their arguments
   1046 may not be evaluated in left to right order: the printed intersection may
   1047 be before or after the call to intersect.
   1048 ##
   1049     SkIRect leftRect =  { 10, 40, 50, 80 };
   1050     SkIRect rightRect = { 30, 60, 70, 90 };
   1051     SkDebugf("%s intersection: ", leftRect.intersect(rightRect) ? "" : "no ");
   1052     SkDebugf("%d, %d, %d, %d\n", leftRect.left(), leftRect.top(),
   1053                                  leftRect.right(), leftRect.bottom());
   1054 #StdOut
   1055  intersection: 30, 60, 50, 80
   1056 ##
   1057 ##
   1058 
   1059 #SeeAlso Intersects intersectNoEmptyCheck join SkRect::intersect
   1060 
   1061 ##
   1062 
   1063 # ------------------------------------------------------------------------------
   1064 
   1065 #Method bool intersect(const SkIRect& a, const SkIRect& b)
   1066 
   1067 #In Intersection
   1068 #Populate
   1069 
   1070 #Example
   1071     SkIRect result;
   1072     bool intersected = result.intersect({ 10, 40, 50, 80 }, { 30, 60, 70, 90 });
   1073     SkDebugf("%s intersection: %d, %d, %d, %d\n", intersected ? "" : "no ",
   1074              result.left(), result.top(), result.right(), result.bottom());
   1075 #StdOut
   1076  intersection: 30, 60, 50, 80
   1077 ##
   1078 ##
   1079 
   1080 #SeeAlso Intersects intersectNoEmptyCheck join SkRect::intersect
   1081 
   1082 ##
   1083 
   1084 # ------------------------------------------------------------------------------
   1085 
   1086 #Method bool intersectNoEmptyCheck(const SkIRect& a, const SkIRect& b)
   1087 
   1088 #In Intersection
   1089 #Line # sets to shared area; returns true if not empty skips empty check ##
   1090 #Populate
   1091 
   1092 #Example
   1093     SkIRect result;
   1094     if (result.intersectNoEmptyCheck({ 10, 40, 50, 80 }, { 30, 60, 70, 90 })) {
   1095         SkDebugf("intersection: %d, %d, %d, %d\n",
   1096                  result.left(), result.top(), result.right(), result.bottom());
   1097     }
   1098 #StdOut
   1099  intersection: 30, 60, 50, 80
   1100 ##
   1101 ##
   1102 
   1103 #SeeAlso Intersects intersect join SkRect::intersect
   1104 
   1105 ##
   1106 
   1107 # ------------------------------------------------------------------------------
   1108 
   1109 #Method bool intersect(int32_t left, int32_t top, int32_t right, int32_t bottom)
   1110 
   1111 #In Intersection
   1112 #Populate
   1113 
   1114 #Example
   1115 #Description
   1116 Two SkDebugf calls are required. If the calls are combined, their arguments
   1117 may not be evaluated in left to right order: the printed intersection may
   1118 be before or after the call to intersect.
   1119 ##
   1120     SkIRect leftRect =  { 10, 40, 50, 80 };
   1121     SkDebugf("%s intersection: ", leftRect.intersect(30, 60, 70, 90) ? "" : "no ");
   1122     SkDebugf("%d, %d, %d, %d\n", leftRect.left(), leftRect.top(),
   1123                                  leftRect.right(), leftRect.bottom());
   1124 #StdOut
   1125  intersection: 30, 60, 50, 80
   1126 ##
   1127 ##
   1128 
   1129 #SeeAlso intersectNoEmptyCheck Intersects join SkRect::intersect
   1130 
   1131 ##
   1132 
   1133 # ------------------------------------------------------------------------------
   1134 
   1135 #Method static bool Intersects(const SkIRect& a, const SkIRect& b)
   1136 
   1137 #In Intersection
   1138 #Line # returns true if areas overlap ##
   1139 #Populate
   1140 
   1141 #Example
   1142     SkDebugf("%s intersection", SkIRect::Intersects({10, 40, 50, 80}, {30, 60, 70, 90}) ? "" : "no ");
   1143 #StdOut
   1144  intersection
   1145 ##
   1146 ##
   1147 
   1148 #SeeAlso IntersectsNoEmptyCheck intersect SkRect::intersect
   1149 
   1150 ##
   1151 
   1152 # ------------------------------------------------------------------------------
   1153 
   1154 #Method static bool IntersectsNoEmptyCheck(const SkIRect& a, const SkIRect& b)
   1155 
   1156 #In Intersection
   1157 #Line # returns true if areas overlap skips empty check ##
   1158 #Populate
   1159 
   1160 #Example
   1161     SkDebugf("%s intersection", SkIRect::IntersectsNoEmptyCheck(
   1162             {10, 40, 50, 80}, {30, 60, 70, 90}) ? "" : "no ");
   1163 #StdOut
   1164  intersection
   1165 ##
   1166 ##
   1167 
   1168 #SeeAlso Intersects intersect SkRect::intersect
   1169 
   1170 ##
   1171 
   1172 #Subtopic Intersection ##
   1173 
   1174 # ------------------------------------------------------------------------------
   1175 
   1176 #Subtopic Join
   1177 #Line # sets to union of bounds ##
   1178 ##
   1179 
   1180 #Method void join(int32_t left, int32_t top, int32_t right, int32_t bottom)
   1181 
   1182 #In Join
   1183 #Line # sets to union of bounds ##
   1184 #Populate
   1185 
   1186 #Example
   1187     SkIRect rect = { 10, 20, 15, 25};
   1188     rect.join(50, 60, 55, 65);
   1189     SkDebugf("join: %d, %d, %d, %d\n", rect.fLeft, rect.fTop, rect.fRight, rect.fBottom);
   1190 #StdOut
   1191  join: 10, 20, 55, 65
   1192 ##
   1193 ##
   1194 
   1195 #SeeAlso set SkRect::join
   1196 
   1197 ##
   1198 
   1199 # ------------------------------------------------------------------------------
   1200 
   1201 #Method void join(const SkIRect& r)
   1202 
   1203 #In Join
   1204 #Populate
   1205 
   1206 #Example
   1207     SkIRect rect = { 10, 20, 15, 25};
   1208     rect.join({50, 60, 55, 65});
   1209     SkDebugf("join: %d, %d, %d, %d\n", rect.fLeft, rect.fTop, rect.fRight, rect.fBottom);
   1210 #StdOut
   1211  join: 10, 20, 55, 65
   1212 ##
   1213 ##
   1214 
   1215 #SeeAlso set SkRect::join
   1216 
   1217 ##
   1218 
   1219 # ------------------------------------------------------------------------------
   1220 
   1221 #Subtopic Sorting
   1222 #Line # orders sides ##
   1223 ##
   1224 
   1225 #Method void sort()
   1226 
   1227 #In Sorting
   1228 #Line # orders sides from smaller to larger ##
   1229 #Populate
   1230 
   1231 #Example
   1232     SkIRect rect = { 30, 50, 20, 10 };
   1233     SkDebugf("rect: %d, %d, %d, %d\n", rect.fLeft, rect.fTop, rect.fRight, rect.fBottom);
   1234     rect.sort();
   1235     SkDebugf("sorted: %d, %d, %d, %d\n", rect.fLeft, rect.fTop, rect.fRight, rect.fBottom);
   1236 #StdOut
   1237 rect: 30, 50, 20, 10
   1238 sorted: 20, 10, 30, 50
   1239 ##
   1240 ##
   1241 
   1242 #SeeAlso makeSorted SkRect::sort
   1243 
   1244 ##
   1245 
   1246 # ------------------------------------------------------------------------------
   1247 
   1248 #Method SkIRect makeSorted() const
   1249 
   1250 #In Sorting
   1251 #In Constructors
   1252 #Line # constructs IRect, ordering sides from smaller to larger ##
   1253 #Populate
   1254 
   1255 #Example
   1256     SkIRect rect = { 30, 50, 20, 10 };
   1257     SkDebugf("rect: %d, %d, %d, %d\n", rect.fLeft, rect.fTop, rect.fRight, rect.fBottom);
   1258     SkIRect sort = rect.makeSorted();
   1259     SkDebugf("sorted: %d, %d, %d, %d\n", sort.fLeft, sort.fTop, sort.fRight, sort.fBottom);
   1260 #StdOut
   1261 rect: 30, 50, 20, 10
   1262 sorted: 20, 10, 30, 50
   1263 ##
   1264 ##
   1265 
   1266 #SeeAlso sort SkRect::makeSorted
   1267 
   1268 ##
   1269 
   1270 # ------------------------------------------------------------------------------
   1271 
   1272 #Method static const SkIRect& EmptyIRect()
   1273 
   1274 #In Constructors
   1275 #Line # returns immutable bounds of (0, 0, 0, 0) ##
   1276 #Populate
   1277 
   1278 #Example
   1279     const SkIRect& rect = SkIRect::EmptyIRect();
   1280     SkDebugf("rect: %d, %d, %d, %d\n", rect.fLeft, rect.fTop, rect.fRight, rect.fBottom);
   1281 #StdOut
   1282 rect: 0, 0, 0, 0
   1283 ##
   1284 ##
   1285 
   1286 #SeeAlso MakeEmpty
   1287 
   1288 ##
   1289 
   1290 #Struct SkIRect ##
   1291 
   1292 #Topic IRect ##
   1293