g_slist_foreach(decor->children, decor_render, NULL);
}
+struct boundstuff {
+ Rect r;
+ Strut s;
+};
+
static void decor_bound(gpointer data, gpointer user_data)
{
- struct boundrect *br = user_data;
+ struct boundstuff *bs = user_data;
struct decor *decor = data;
struct box *box = &decor->geometry.box;
struct vector *a = &decor->space.anchor;
- Rect newrect;
+ Rect newrect, temprect;
double x1, y1, x2, y2;
x1 = expression_eval(&a->x);
y1 += expression_eval(&box->start.y);
x2 += expression_eval(&box->end.x);
y2 += expression_eval(&box->end.y);
- if (x1 < br->x1)
- br->x1 = x1;
- if (x2 < br->x1)
- br->x1 = x2;
- if (x1 > br->x2)
- br->x2 = x1;
- if (x2 > br->x2)
- br->x2 = x2;
-
- if (y1 < br->y1)
- br->y1 = y1;
- if (y2 < br->y1)
- br->y1 = y2;
- if (y1 > br->y2)
- br->y2 = y1;
- if (y2 > br->y2)
- br->y2 = y2;
+ RECT_SET(temprect, x1, y1, x2-x1, y2-y2);
+ RECT_ADD(newrect, temprect, bs->r);
+ bs->r = newrect;
+
if (decor->children)
- g_slist_foreach(decor->children, decor_bound, br);
+ g_slist_foreach(decor->children, decor_bound, bs);
}
-void obtheme_calc_bound(struct theme *thm, char *name, struct boundrect *br)
+void obtheme_calc_bound(struct theme *thm, char *name, Rect *r, Strut *s)
{
struct style *sty;
+ struct boundstuff bs;
- br->x1 = 0.0;
- br->y1 = 0.0;
- br->x2 = 0.0;
- br->y2 = 0.0;
+ RECT_SET(bs.r, 0, 0 ,0 ,0);
sty = g_hash_table_lookup(thm->styles, name);
assert(sty);
- g_slist_foreach(sty->tree, decor_bound, br);
+ g_slist_foreach(sty->tree, decor_bound, &bs);
+ *r = bs.r;
}
void obtheme_decorate_window(struct theme *thm, char *name)