Implemented padding in uiStack.

This commit is contained in:
Pietro Gagliardi 2015-04-09 15:59:40 -04:00
parent 1b5de5f096
commit 1575a0dc7c
4 changed files with 39 additions and 4 deletions

28
stack.c
View File

@ -13,6 +13,7 @@ struct stack {
uintmax_t cap; uintmax_t cap;
int vertical; int vertical;
uintptr_t parent; uintptr_t parent;
int padded;
}; };
#define S(c) ((stack *) (c)) #define S(c) ((stack *) (c))
@ -58,16 +59,22 @@ static uiSize stackPreferredSize(uiControl *c, uiSizing *d)
intmax_t maxswid, maxsht; intmax_t maxswid, maxsht;
uintmax_t i; uintmax_t i;
uiSize size, preferred; uiSize size, preferred;
uiSizingComm *dd = (uiSizingComm *) d;
size.width = 0; size.width = 0;
size.height = 0; size.height = 0;
if (s->len == 0) if (s->len == 0)
return size; return size;
// 1) add in padding // 0) get this Stack's padding
// TODO padding
xpadding = 0; xpadding = 0;
ypadding = 0; ypadding = 0;
if (s->padded) {
xpadding = dd->xPadding;
ypadding = dd->yPadding;
}
// 1) initialize the desired rect with the needed padding
if (s->vertical) if (s->vertical)
size.height = (s->len - 1) * ypadding; size.height = (s->len - 1) * ypadding;
else else
@ -117,13 +124,18 @@ static void stackResize(uiControl *c, intmax_t x, intmax_t y, intmax_t width, in
intmax_t stretchywid, stretchyht; intmax_t stretchywid, stretchyht;
uintmax_t i; uintmax_t i;
uiSize preferred; uiSize preferred;
uiSizingComm *dd = (uiSizingComm *) d;
if (s->len == 0) if (s->len == 0)
return; return;
// TODO padding // -1) get this Stack's padding
xpadding = 0; xpadding = 0;
ypadding = 0; ypadding = 0;
if (s->padded) {
xpadding = dd->xPadding;
ypadding = dd->yPadding;
}
// 0) inset the available rect by the needed padding // 0) inset the available rect by the needed padding
if (s->vertical) if (s->vertical)
@ -220,3 +232,13 @@ void uiStackAdd(uiControl *st, uiControl *c, int stretchy)
s->len++; s->len++;
updateParent(s->parent); updateParent(s->parent);
} }
// TODO get padded
void uiStackSetPadded(uiControl *st, int padded)
{
stack *s = S(st);
s->padded = padded;
updateParent(s->parent);
}

7
test.c
View File

@ -66,12 +66,17 @@ static void setCheckboxText(uiControl *b, void *data)
} }
uiWindow *w; uiWindow *w;
uiControl *stacks[5]; #define nStacks 5
uiControl *stacks[nStacks];
uiControl *spaced; uiControl *spaced;
static void setSpaced(int spaced) static void setSpaced(int spaced)
{ {
int i;
uiWindowSetMargined(w, spaced); uiWindowSetMargined(w, spaced);
for (i = 0; i < nStacks; i++)
uiStackSetPadded(stacks[i], spaced);
} }
static void toggleSpaced(uiControl *c, void *data) static void toggleSpaced(uiControl *c, void *data)

2
ui.h
View File

@ -42,6 +42,8 @@ void uiButtonOnClicked(uiControl *, void (*)(uiControl *, void *), void *);
uiControl *uiNewHorizontalStack(void); uiControl *uiNewHorizontalStack(void);
uiControl *uiNewVerticalStack(void); uiControl *uiNewVerticalStack(void);
void uiStackAdd(uiControl *, uiControl *, int); void uiStackAdd(uiControl *, uiControl *, int);
// TODO get padded
void uiStackSetPadded(uiControl *, int);
uiControl *uiNewEntry(void); uiControl *uiNewEntry(void);
char *uiEntryText(uiControl *); char *uiEntryText(uiControl *);

View File

@ -4,16 +4,22 @@
typedef struct uiSize uiSize; typedef struct uiSize uiSize;
typedef struct uiSizing uiSizing; typedef struct uiSizing uiSizing;
typedef struct uiSizingComm uiSizingComm;
struct uiSize { struct uiSize {
intmax_t width; intmax_t width;
intmax_t height; intmax_t height;
}; };
// TODO this is a bit iffy; clean it up
#define uiSizingCommon \ #define uiSizingCommon \
intmax_t xPadding; \ intmax_t xPadding; \
intmax_t yPadding; intmax_t yPadding;
struct uiSizingComm {
uiSizingCommon
};
struct uiControl { struct uiControl {
void (*destroy)(uiControl *); void (*destroy)(uiControl *);
uintptr_t (*handle)(uiControl *); uintptr_t (*handle)(uiControl *);