Skip to content

Commit

Permalink
GUI: Make container widget a bit more container like.
Browse files Browse the repository at this point in the history
Now it is possible to add sub widgets to a ContainerWidget and allow for these
to get events too.
  • Loading branch information
Johannes Schickel committed Jul 9, 2012
1 parent 049e61b commit 0cf00dd
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 0 deletions.
20 changes: 20 additions & 0 deletions gui/widget.cpp
Expand Up @@ -711,6 +711,26 @@ ContainerWidget::ContainerWidget(GuiObject *boss, const Common::String &name) :
_type = kContainerWidget;
}

ContainerWidget::~ContainerWidget() {
// We also remove the widget from the boss to avoid segfaults, when the
// deleted widget is an active widget in the boss.
for (Widget *w = _firstWidget; w; w = w->next()) {
_boss->removeWidget(w);
}
}

Widget *ContainerWidget::findWidget(int x, int y) {
return findWidgetInChain(_firstWidget, x, y);
}

void ContainerWidget::removeWidget(Widget *widget) {
// We also remove the widget from the boss to avoid a reference to a
// widget not in the widget chain anymore.
_boss->removeWidget(widget);

Widget::removeWidget(widget);
}

void ContainerWidget::drawWidget() {
g_gui.theme()->drawWidgetBackground(Common::Rect(_x, _y, _x + _w, _y + _h), 0, ThemeEngine::kWidgetBackgroundBorder);
}
Expand Down
3 changes: 3 additions & 0 deletions gui/widget.h
Expand Up @@ -368,7 +368,10 @@ class ContainerWidget : public Widget {
public:
ContainerWidget(GuiObject *boss, int x, int y, int w, int h);
ContainerWidget(GuiObject *boss, const Common::String &name);
~ContainerWidget();

virtual Widget *findWidget(int x, int y);
virtual void removeWidget(Widget *widget);
protected:
void drawWidget();
};
Expand Down

0 comments on commit 0cf00dd

Please sign in to comment.