| 543 | } |
| 544 | |
| 545 | STBRP_DEF int stbrp_pack_rects(stbrp_context* context, stbrp_rect* rects, int num_rects) |
| 546 | { |
| 547 | int i, all_rects_packed = 1; |
| 548 | |
| 549 | // we use the 'was_packed' field internally to allow sorting/unsorting |
| 550 | for (i = 0; i < num_rects; ++i) { |
| 551 | rects[i].was_packed = i; |
| 552 | } |
| 553 | |
| 554 | // sort according to heuristic |
| 555 | STBRP_SORT(rects, num_rects, sizeof(rects[0]), rect_height_compare); |
| 556 | |
| 557 | for (i = 0; i < num_rects; ++i) { |
| 558 | if (rects[i].w == 0 || rects[i].h == 0) { |
| 559 | rects[i].x = rects[i].y = 0; // empty rect needs no space |
| 560 | } |
| 561 | else { |
| 562 | stbrp__findresult fr = stbrp__skyline_pack_rectangle(context, rects[i].w, rects[i].h); |
| 563 | if (fr.prev_link) { |
| 564 | rects[i].x = (stbrp_coord)fr.x; |
| 565 | rects[i].y = (stbrp_coord)fr.y; |
| 566 | } |
| 567 | else { |
| 568 | rects[i].x = rects[i].y = STBRP__MAXVAL; |
| 569 | } |
| 570 | } |
| 571 | } |
| 572 | |
| 573 | // unsort |
| 574 | STBRP_SORT(rects, num_rects, sizeof(rects[0]), rect_original_order); |
| 575 | |
| 576 | // set was_packed flags and all_rects_packed status |
| 577 | for (i = 0; i < num_rects; ++i) { |
| 578 | rects[i].was_packed = !(rects[i].x == STBRP__MAXVAL && rects[i].y == STBRP__MAXVAL); |
| 579 | if (!rects[i].was_packed) |
| 580 | all_rects_packed = 0; |
| 581 | } |
| 582 | |
| 583 | // return the all_rects_packed status |
| 584 | return all_rects_packed; |
| 585 | } |
| 586 | #endif |
| 587 | |
| 588 | /* |
no test coverage detected