if(!style)
return;
- geom.w = 0;
- geom.h = 0;
+ Geometry ageom;
+ ageom.x = geom.x;
+ ageom.y = geom.y;
const Style::PartSeq &parts = style->get_parts();
for(Style::PartSeq::const_iterator i=parts.begin(); i!=parts.end(); ++i)
+ {
if(i->get_name().empty())
{
const Geometry &pgeom = i->get_geometry();
const Sides &pmargin = i->get_margin();
- geom.w = max(geom.w, pgeom.w+pmargin.left+pmargin.right);
- geom.h = max(geom.h, pgeom.h+pmargin.top+pmargin.bottom);
+ ageom.w = max(ageom.w, pgeom.w+pmargin.left+pmargin.right);
+ ageom.h = max(ageom.h, pgeom.h+pmargin.top+pmargin.bottom);
}
+ else
+ autosize_special(*i, ageom);
+ }
+
+ set_geometry(ageom);
}
void Widget::set_geometry(const Geometry &g)
{
+ bool size_changed = (g.w!=geom.w || g.h!=geom.h);
geom = g;
- on_geometry_change();
- rebuild();
+ if(size_changed)
+ {
+ // TODO maybe rename this to on_size_change
+ on_geometry_change();
+ rebuild();
+ }
}
void Widget::set_parent(Container *p)