Fixed menu position on resize
authorIngo Ruhnke <grumbel@gmx.de>
Sun, 25 May 2008 15:59:10 +0000 (15:59 +0000)
committerIngo Ruhnke <grumbel@gmx.de>
Sun, 25 May 2008 15:59:10 +0000 (15:59 +0000)
SVN-Revision: 5517

src/gui/menu.cpp
src/gui/menu.hpp

index 3db3746..97f7086 100644 (file)
@@ -48,6 +48,7 @@ static const float FLICK_CURSOR_TIME   = 0.5f;
 extern SDL_Surface* screen;
 
 std::vector<Menu*> Menu::last_menus;
+std::list<Menu*> Menu::all_menus;
 Menu* Menu::current_ = 0;
 Menu* Menu::previous = 0;
 Font* Menu::default_font;
@@ -168,7 +169,7 @@ Menu::recalc_pos()
   if (current_)
     current_->set_pos(SCREEN_WIDTH/2, SCREEN_HEIGHT/2);
 
-  for(std::vector<Menu*>::iterator i = last_menus.begin(); i != last_menus.end(); ++i)
+  for(std::list<Menu*>::iterator i = all_menus.begin(); i != all_menus.end(); ++i)
     {
       // FIXME: This is of course not quite right, since it ignores any previous set_pos() calls
       (*i)->set_pos(SCREEN_WIDTH/2, SCREEN_HEIGHT/2);
@@ -228,6 +229,8 @@ std::string MenuItem::get_input_with_symbol(bool active_item)
 \f
 Menu::~Menu()
 {
+  all_menus.remove(this);
+
   for(std::vector<MenuItem*>::iterator i = items.begin();
       i != items.end(); ++i)
     delete *i;
@@ -241,6 +244,8 @@ Menu::~Menu()
 
 Menu::Menu()
 {
+  all_menus.push_back(this);
+
   hit_item = -1;
   menuaction = MENU_ACTION_NONE;
   delete_character = 0;
index 6eea51d..0fa35fc 100644 (file)
@@ -21,6 +21,7 @@
 #define SUPERTUX_MENU_H
 
 #include <vector>
+#include <list>
 #include <memory>
 #include <set>
 #include <string>
@@ -92,6 +93,10 @@ class Menu
 {
 private:
   static std::vector<Menu*> last_menus;
+
+  /** Pointers to all currently available menus, used to handle repositioning on window resize */
+  static std::list<Menu*>   all_menus;
+
   static Menu* previous;
   static Menu* current_;