X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fwidget.cpp;h=e5c58a25d4e3b2000c29e1a2c92f0b79cc9970b2;hb=707b59d45ae50b69c94918f8f74313283b304597;hp=2183be6623b5467b0d1431f531a2cea6cb534897;hpb=a122a209782e5b5400b5a70bd23ce4feadc6b36b;p=libs%2Fgltk.git diff --git a/source/widget.cpp b/source/widget.cpp index 2183be6..e5c58a2 100644 --- a/source/widget.cpp +++ b/source/widget.cpp @@ -39,11 +39,18 @@ void Widget::set_size(unsigned w, unsigned h) } void Widget::autosize() +{ + Geometry ageom; + autosize(ageom); + set_geometry(ageom); +} + +void Widget::autosize(Geometry &ageom) const { if(!style) return; - Geometry ageom; + ageom = Geometry(geom.x, geom.y, 0, 0); const Style::PartSeq &parts = style->get_parts(); for(Style::PartSeq::const_iterator i=parts.begin(); i!=parts.end(); ++i) { @@ -57,8 +64,6 @@ void Widget::autosize() else autosize_special(*i, ageom); } - - set_geometry(ageom); } void Widget::set_geometry(const Geometry &g) @@ -73,6 +78,21 @@ void Widget::set_geometry(const Geometry &g) } } +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) { if(parent && p) @@ -155,6 +175,11 @@ void Widget::set_focus() signal_request_focus.emit(); } +void Widget::set_enabled(bool e) +{ + set_state(DISABLED, (e ? NORMAL : DISABLED)); +} + void Widget::set_state(State mask, State bits) { state = (state&~mask)|bits;