diff options
Diffstat (limited to 'src/menu/container.cpp')
-rw-r--r-- | src/menu/container.cpp | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/src/menu/container.cpp b/src/menu/container.cpp index 65b85aec..31155e3c 100644 --- a/src/menu/container.cpp +++ b/src/menu/container.cpp @@ -34,17 +34,19 @@ namespace usdx Container::Container(Container* owner) : DrawableControl(owner), frame(NULL), window_coords(0, 0) { - set_clipping_required(true); + init(owner); } Container::Container(Container* owner, const ContainerHelper& add) : DrawableControl(owner, add), frame(NULL), window_coords(0, 0) { - set_clipping_required(true); + init(owner); } Container::~Container() { + window_coords_connection.disconnect(); + for (std::list<DrawableControl*>::iterator next = controls.begin(), it = next++; it != controls.end(); it = next++) { (*it)->remove_parent(); @@ -53,6 +55,16 @@ namespace usdx controls.clear(); } + void Container::init(Container* parent) + { + set_clipping_required(true); + + if (parent) { + window_coords_connection = parent->window_coords_change.connect( + boost::bind(&Container::recalculate_window_coords, this)); + } + } + void Container::draw(void) { DrawableControl::draw(); @@ -104,6 +116,8 @@ namespace usdx window_coords.set_y(parent->get_window_coords().get_y() + get_parent()->get_height() - (get_top() + get_height())); + + window_coords_change(); } } |