diff options
author | Alexander Sulfrian <alexander@sulfrian.net> | 2012-11-23 20:53:35 +0100 |
---|---|---|
committer | Alexander Sulfrian <alexander@sulfrian.net> | 2013-01-18 19:34:21 +0100 |
commit | b520ccf825f5076994131c441915fbd3c812426a (patch) | |
tree | 6f09beb3ee373e2ad60de4b6ae9006384dcae71d /src/menu/container.cpp | |
parent | 05560e6e019a8e823ba1c8fe82037d305b82f4c4 (diff) | |
download | usdx-b520ccf825f5076994131c441915fbd3c812426a.tar.gz usdx-b520ccf825f5076994131c441915fbd3c812426a.tar.xz usdx-b520ccf825f5076994131c441915fbd3c812426a.zip |
menu/container: add window_coords_change
The children container of a container have to be notified if the
window coordinates of the parent changed. The children have to
recalculate their own window coordinates.
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(); } } |