Skip to content
Snippets Groups Projects
Commit 018da058 authored by Cedric Roux's avatar Cedric Roux
Browse files

container deals with growable children

parent 69e2a15e
Branches
Tags
No related merge requests found
......@@ -84,6 +84,8 @@ printf("ALLOCATE container vertical %p\n", _this);
struct gui *g = _gui;
struct container_widget *this = _this;
struct widget_list *l;
int over_pixels = 0;
int i;
if (this->hints_are_valid == 1) goto hints_ok;
......@@ -96,18 +98,29 @@ hints_ok:
this->common.width = width;
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 */
l = this->common.children;
i = 0;
while (l) {
int allocated_height;
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,
//this->hint_width, cheight);
MAX(width, cwidth), cheight);
cy += cheight;
MAX(width, cwidth), allocated_height);
cy += allocated_height;
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,
......@@ -119,6 +132,8 @@ printf("ALLOCATE container horizontal %p\n", _this);
struct gui *g = _gui;
struct container_widget *this = _this;
struct widget_list *l;
int over_pixels = 0;
int i;
if (this->hints_are_valid == 1) goto hints_ok;
......@@ -131,17 +146,29 @@ hints_ok:
this->common.width = width;
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 */
l = this->common.children;
i = 0;
while (l) {
int allocated_width;
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,
cwidth, MAX(height, cheight)/* this->hint_height */);
cx += cwidth;
allocated_width, MAX(height, cheight)/* this->hint_height */);
cx += allocated_width;
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)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment