Implemented padding in uiStack.
This commit is contained in:
parent
1b5de5f096
commit
1575a0dc7c
28
stack.c
28
stack.c
|
@ -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
7
test.c
|
@ -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
2
ui.h
|
@ -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 *);
|
||||||
|
|
6
uipriv.h
6
uipriv.h
|
@ -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 *);
|
||||||
|
|
Loading…
Reference in New Issue