Commit 018da058 authored by Cedric Roux's avatar Cedric Roux

container deals with growable children

parent 69e2a15e
...@@ -84,6 +84,8 @@ printf("ALLOCATE container vertical %p\n", _this); ...@@ -84,6 +84,8 @@ printf("ALLOCATE container vertical %p\n", _this);
struct gui *g = _gui; struct gui *g = _gui;
struct container_widget *this = _this; struct container_widget *this = _this;
struct widget_list *l; struct widget_list *l;
int over_pixels = 0;
int i;
if (this->hints_are_valid == 1) goto hints_ok; if (this->hints_are_valid == 1) goto hints_ok;
...@@ -96,18 +98,29 @@ hints_ok: ...@@ -96,18 +98,29 @@ hints_ok:
this->common.width = width; this->common.width = width;
this->common.height = height; this->common.height = height;
/* TODO: some pixels won't be allocated, take care of it? */
if (height > this->hint_height) {
int ngrowable = 0;
for (i = 0; i < this->nchildren; i++) if (this->growable[i]) ngrowable++;
if (ngrowable)
over_pixels = (height - this->hint_height) / ngrowable;
}
/* allocate */ /* allocate */
l = this->common.children; l = this->common.children;
i = 0;
while (l) { while (l) {
int allocated_height;
l->item->hints(g, l->item, &cwidth, &cheight); l->item->hints(g, l->item, &cwidth, &cheight);
allocated_height = cheight + (this->growable[i] ? over_pixels : 0);
l->item->allocate(g, l->item, this->common.x, this->common.y + cy, l->item->allocate(g, l->item, this->common.x, this->common.y + cy,
//this->hint_width, cheight); MAX(width, cwidth), allocated_height);
MAX(width, cwidth), cheight); cy += allocated_height;
cy += cheight;
l = l->next; l = l->next;
i++;
} }
if (cy != this->hint_height) ERR("reachable?\n"); // if (cy != this->hint_height) ERR("reachable?\n");
} }
static void horizontal_allocate(gui *_gui, widget *_this, static void horizontal_allocate(gui *_gui, widget *_this,
...@@ -119,6 +132,8 @@ printf("ALLOCATE container horizontal %p\n", _this); ...@@ -119,6 +132,8 @@ printf("ALLOCATE container horizontal %p\n", _this);
struct gui *g = _gui; struct gui *g = _gui;
struct container_widget *this = _this; struct container_widget *this = _this;
struct widget_list *l; struct widget_list *l;
int over_pixels = 0;
int i;
if (this->hints_are_valid == 1) goto hints_ok; if (this->hints_are_valid == 1) goto hints_ok;
...@@ -131,17 +146,29 @@ hints_ok: ...@@ -131,17 +146,29 @@ hints_ok:
this->common.width = width; this->common.width = width;
this->common.height = height; this->common.height = height;
/* TODO: some pixels won't be allocated, take care of it? */
if (width > this->hint_width) {
int ngrowable = 0;
for (i = 0; i < this->nchildren; i++) if (this->growable[i]) ngrowable++;
if (ngrowable)
over_pixels = (width - this->hint_width) / ngrowable;
}
/* allocate */ /* allocate */
l = this->common.children; l = this->common.children;
i = 0;
while (l) { while (l) {
int allocated_width;
l->item->hints(g, l->item, &cwidth, &cheight); l->item->hints(g, l->item, &cwidth, &cheight);
allocated_width = cwidth + (this->growable[i] ? over_pixels : 0);
l->item->allocate(g, l->item, this->common.x + cx, this->common.y, l->item->allocate(g, l->item, this->common.x + cx, this->common.y,
cwidth, MAX(height, cheight)/* this->hint_height */); allocated_width, MAX(height, cheight)/* this->hint_height */);
cx += cwidth; cx += allocated_width;
l = l->next; l = l->next;
i++;
} }
if (cx != this->hint_width) ERR("reachable?\n"); // if (cx != this->hint_width) ERR("reachable?\n");
} }
static void vertical_hints(gui *_gui, widget *_w, int *width, int *height) static void vertical_hints(gui *_gui, widget *_w, int *width, int *height)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment