Browse Source

- squeeze stack when out of space

pull/1/head
Leonard Ritter 10 years ago
parent
commit
5ed186b1ba
1 changed files with 17 additions and 4 deletions
  1. +17
    -4
      oui.h

+ 17
- 4
oui.h View File

@@ -898,6 +898,14 @@ UI_INLINE int ui_min(int a, int b) {
return (a<b)?a:b;
}

UI_INLINE float ui_maxf(float a, float b) {
return (a>b)?a:b;
}

UI_INLINE float ui_minf(float a, float b) {
return (a<b)?a:b;
}

static UIcontext *ui_context = NULL;

void uiClear() {
@@ -1403,7 +1411,8 @@ UI_INLINE void uiArrangeStacked(UIitem *pitem, int dim, bool wrap) {
while (start_kid >= 0) {
short used = 0;

int count = 0;
int count = 0; // count of fillers
int fixed_count = 0; // count of fixed elements
int total = 0;
bool hardbreak = false;
// first pass: count items that need to be expanded,
@@ -1418,6 +1427,7 @@ UI_INLINE void uiArrangeStacked(UIitem *pitem, int dim, bool wrap) {
count++;
extend += pkid->margins[dim] + pkid->margins[wdim];
} else {
fixed_count++;
extend += pkid->margins[dim] + pkid->size[dim] + pkid->margins[wdim];
}
// wrap on end of line or manual flag
@@ -1434,12 +1444,13 @@ UI_INLINE void uiArrangeStacked(UIitem *pitem, int dim, bool wrap) {
total++;
}

int extra_space = ui_max(space - used,0);
int extra_space = space - used;
float filler = 0.0f;
float spacer = 0.0f;
float extra_margin = 0.0f;
float eater = 0.0f;

if (extra_space) {
if (extra_space > 0) {
if (count) {
filler = (float)extra_space / (float)count;
} else if (total) {
@@ -1460,6 +1471,8 @@ UI_INLINE void uiArrangeStacked(UIitem *pitem, int dim, bool wrap) {
} break;
}
}
} else if (extra_space < 0) {
eater = (float)extra_space / (float)fixed_count;
}

// distribute width among items
@@ -1476,7 +1489,7 @@ UI_INLINE void uiArrangeStacked(UIitem *pitem, int dim, bool wrap) {
if ((flags & UI_HFILL) == UI_HFILL) { // grow
x1 = x+filler;
} else {
x1 = x+(float)pkid->size[dim];
x1 = x+ui_maxf(0.0f,(float)pkid->size[dim]+eater);
}
ix0 = (short)x;
ix1 = (short)x1;


Loading…
Cancel
Save