return;
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)
{
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::map_coords_to_ancestor(int &x, int &y, const Widget &ancestor) const
+{
+ for(const Widget *w=this; w; w=w->get_parent())
+ {
+ if(w==&ancestor)
+ return;
+
+ const Geometry &wgeom = w->get_geometry();
+ x += wgeom.x;
+ y += wgeom.y;
+ }
+
+ throw hierarchy_error("not an ancestor");
}
void Widget::set_parent(Container *p)