summaryrefslogtreecommitdiff
path: root/new
diff options
context:
space:
mode:
authorPietro Gagliardi <[email protected]>2015-04-11 14:30:07 -0400
committerPietro Gagliardi <[email protected]>2015-04-11 14:30:07 -0400
commit0430ca9102b54fd9127d8b998d45f1941c1a278a (patch)
tree3f13950b7d6268716d737df52e60e0d8dc3e670f /new
parentb57c885505e7d5f53fef5c28934bbe43908d04e5 (diff)
Implemented making invisible children of uiStacks not count when drawing or calculating preferred size. Need to implement the new methods on uiStack itself before we can test.
Diffstat (limited to 'new')
-rw-r--r--new/newcontrol_unix.c10
-rw-r--r--new/stack.c11
2 files changed, 18 insertions, 3 deletions
diff --git a/new/newcontrol_unix.c b/new/newcontrol_unix.c
index db7652b..c3fad42 100644
--- a/new/newcontrol_unix.c
+++ b/new/newcontrol_unix.c
@@ -87,8 +87,10 @@ static void singleShow(uiControl *c)
singleWidget *s = (singleWidget *) (c->internal);
s->userHid = FALSE;
- if (!s->containerHid)
+ if (!s->containerHid) {
gtk_widget_show_all(s->immediate);
+ updateParent(s->parent);
+ }
}
static void singleHide(uiControl *c)
@@ -97,6 +99,7 @@ static void singleHide(uiControl *c)
s->userHid = TRUE;
gtk_widget_hide(s->immediate);
+ updateParent(s->parent);
}
static void singleContainerShow(uiControl *c)
@@ -104,8 +107,10 @@ static void singleContainerShow(uiControl *c)
singleWidget *s = (singleWidget *) (c->internal);
s->containerHid = FALSE;
- if (!s->userHid)
+ if (!s->userHid) {
gtk_widget_show_all(s->immediate);
+ updateParent(s->parent);
+ }
}
static void singleContainerHide(uiControl *c)
@@ -114,6 +119,7 @@ static void singleContainerHide(uiControl *c)
s->containerHid = TRUE;
gtk_widget_hide(s->immediate);
+ updateParent(s->parent);
}
static void singleEnable(uiControl *c)
diff --git a/new/stack.c b/new/stack.c
index 4c817d2..3899f83 100644
--- a/new/stack.c
+++ b/new/stack.c
@@ -97,6 +97,8 @@ static void stackPreferredSize(uiControl *c, uiSizing *d, intmax_t *width, intma
maxStretchyWidth = 0;
maxStretchyHeight = 0;
for (i = 0; i < s->len; i++) {
+ if (!uiControlVisible(s->controls[i].c))
+ continue;
uiControlPreferredSize(s->controls[i].c, d, &preferredWidth, &preferredHeight);
if (s->controls[i].stretchy) {
nStretchy++;
@@ -157,6 +159,8 @@ static void stackResize(uiControl *c, intmax_t x, intmax_t y, intmax_t width, in
stretchyht = height;
nStretchy = 0;
for (i = 0; i < s->len; i++) {
+ if (!uiControlVisible(s->controls[i].c))
+ continue;
if (s->controls[i].stretchy) {
nStretchy++;
continue;
@@ -180,14 +184,19 @@ static void stackResize(uiControl *c, intmax_t x, intmax_t y, intmax_t width, in
stretchyht /= nStretchy;
else
stretchywid /= nStretchy;
- for (i = 0; i < s->len; i++)
+ for (i = 0; i < s->len; i++) {
+ if (!uiControlVisible(s->controls[i].c))
+ continue;
if (s->controls[i].stretchy) {
s->controls[i].width = stretchywid;
s->controls[i].height = stretchyht;
}
+ }
// 3) now we can position controls
for (i = 0; i < s->len; i++) {
+ if (!uiControlVisible(s->controls[i].c))
+ continue;
uiControlResize(s->controls[i].c, x, y, s->controls[i].width, s->controls[i].height, d);
if (s->vertical)
y += s->controls[i].height + ypadding;