|
|
|
@ -1,10 +1,10 @@
|
|
|
|
|
// [DEAR IMGUI]
|
|
|
|
|
// This is a slightly modified version of stb_rect_pack.h 0.99.
|
|
|
|
|
// This is a slightly modified version of stb_rect_pack.h 1.00.
|
|
|
|
|
// Those changes would need to be pushed into nothings/stb:
|
|
|
|
|
// - Added STBRP__CDECL
|
|
|
|
|
// Grep for [DEAR IMGUI] to find the changes.
|
|
|
|
|
|
|
|
|
|
// stb_rect_pack.h - v0.99 - public domain - rectangle packing
|
|
|
|
|
// stb_rect_pack.h - v1.00 - public domain - rectangle packing
|
|
|
|
|
// Sean Barrett 2014
|
|
|
|
|
//
|
|
|
|
|
// Useful for e.g. packing rectangular textures into an atlas.
|
|
|
|
@ -37,9 +37,11 @@
|
|
|
|
|
//
|
|
|
|
|
// Bugfixes / warning fixes
|
|
|
|
|
// Jeremy Jaussaud
|
|
|
|
|
// Fabian Giesen
|
|
|
|
|
//
|
|
|
|
|
// Version history:
|
|
|
|
|
//
|
|
|
|
|
// 1.00 (2019-02-25) avoid small space waste; gracefully fail too-wide rectangles
|
|
|
|
|
// 0.99 (2019-02-07) warning fixes
|
|
|
|
|
// 0.11 (2017-03-03) return packing success/fail result
|
|
|
|
|
// 0.10 (2016-10-25) remove cast-away-const to avoid warnings
|
|
|
|
@ -357,6 +359,13 @@ static stbrp__findresult stbrp__skyline_find_best_pos(stbrp_context *c, int widt
|
|
|
|
|
width -= width % c->align;
|
|
|
|
|
STBRP_ASSERT(width % c->align == 0);
|
|
|
|
|
|
|
|
|
|
// if it can't possibly fit, bail immediately
|
|
|
|
|
if (width > c->width || height > c->height) {
|
|
|
|
|
fr.prev_link = NULL;
|
|
|
|
|
fr.x = fr.y = 0;
|
|
|
|
|
return fr;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
node = c->active_head;
|
|
|
|
|
prev = &c->active_head;
|
|
|
|
|
while (node->x + width <= c->width) {
|
|
|
|
@ -420,7 +429,7 @@ static stbrp__findresult stbrp__skyline_find_best_pos(stbrp_context *c, int widt
|
|
|
|
|
}
|
|
|
|
|
STBRP_ASSERT(node->next->x > xpos && node->x <= xpos);
|
|
|
|
|
y = stbrp__skyline_find_min_y(c, node, xpos, width, &waste);
|
|
|
|
|
if (y + height < c->height) {
|
|
|
|
|
if (y + height <= c->height) {
|
|
|
|
|
if (y <= best_y) {
|
|
|
|
|
if (y < best_y || waste < best_waste || (waste==best_waste && xpos < best_x)) {
|
|
|
|
|
best_x = xpos;
|
|
|
|
|