pingus-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Pingus-CVS] r3691 - in trunk/pingus/src: . screen


From: grumbel at BerliOS
Subject: [Pingus-CVS] r3691 - in trunk/pingus/src: . screen
Date: Sat, 5 Jul 2008 09:22:13 +0200

Author: grumbel
Date: 2008-07-05 09:22:11 +0200 (Sat, 05 Jul 2008)
New Revision: 3691

Modified:
   trunk/pingus/src/pingus_main.cpp
   trunk/pingus/src/screen/screen_manager.cpp
   trunk/pingus/src/screen/screen_manager.hpp
Log:
Removed singleton from ScreenManager

Modified: trunk/pingus/src/pingus_main.cpp
===================================================================
--- trunk/pingus/src/pingus_main.cpp    2008-07-05 07:11:08 UTC (rev 3690)
+++ trunk/pingus/src/pingus_main.cpp    2008-07-05 07:22:11 UTC (rev 3691)
@@ -649,6 +649,8 @@
 void
 PingusMain::start_game ()
 {
+  ScreenManager screen_manager;
+
   if (cmd_options.save.is_set())
     { // Load a level and save it again, useful to convert it in a new format
       if (!cmd_options.rest.is_set())
@@ -667,7 +669,7 @@
     }
   else if (cmd_options.credits.is_set() && cmd_options.credits.get())
     { // just show the credits screen
-      ScreenManager::instance()->push_screen(new Credits());
+      screen_manager.push_screen(new Credits());
     }
   else if (cmd_options.font.is_set() && cmd_options.font.get())
     { // run the Font Test
@@ -678,7 +680,7 @@
       else
         {
           Pathname file(cmd_options.rest.get(), Pathname::SYSTEM_PATH);
-          ScreenManager::instance()->push_screen(new FontTestScreen(file)); 
+          screen_manager.push_screen(new FontTestScreen(file)); 
         }
     }
   else if (cmd_options.editor.is_set() && cmd_options.editor.get())
@@ -688,18 +690,18 @@
       if (cmd_options.rest.is_set())
         editor->load(Pathname(cmd_options.rest.get(), Pathname::SYSTEM_PATH));
 
-      ScreenManager::instance()->push_screen(editor);
+      screen_manager.push_screen(editor);
     }
   else if (cmd_options.rest.is_set())
     { // just start the map that was passed on the command line
       if (StringUtil::has_suffix(cmd_options.rest.get(), ".pingus-demo"))
         { // Demo file
-          ScreenManager::instance()->push_screen
+          screen_manager.push_screen
             (new DemoSession(Pathname(cmd_options.rest.get(), 
Pathname::SYSTEM_PATH)));
         }
       else
         { // Level file
-          ScreenManager::instance()->push_screen
+          screen_manager.push_screen
             (new 
StartScreen(PLFResMgr::load_plf_from_filename(Pathname(cmd_options.rest.get(),
                                                                         
Pathname::SYSTEM_PATH))));
         }
@@ -707,11 +709,11 @@
   else // start a normal game
     {
       pout(PINGUS_DEBUG_LOADING) << "starting normal game" << std::endl;
-      ScreenManager::instance()->push_screen(new PingusMenuManager());
+      screen_manager.push_screen(new PingusMenuManager());
       pout(PINGUS_DEBUG_LOADING) << "done: starting normal game" << std::endl;
     }
 
-  ScreenManager::instance()->display();
+  screen_manager.display();
 }
 
 int
@@ -802,7 +804,6 @@
   StatManager::init();
   Resource::init();
   Fonts::init();
-  ScreenManager::init();
   Sound::PingusSound::init();
   PinguActionFactory::init();
   
@@ -820,7 +821,6 @@
   PinguActionFactory::deinit();
   Sound::PingusSound::deinit();
   WorldObjFactory::deinit();
-  ScreenManager::deinit();
   StatManager::deinit();
   SavegameManager::deinit();
   Resource::deinit();

Modified: trunk/pingus/src/screen/screen_manager.cpp
===================================================================
--- trunk/pingus/src/screen/screen_manager.cpp  2008-07-05 07:11:08 UTC (rev 
3690)
+++ trunk/pingus/src/screen/screen_manager.cpp  2008-07-05 07:22:11 UTC (rev 
3691)
@@ -30,19 +30,21 @@
 #include "../input/manager.hpp"
 
 ScreenManager* ScreenManager::instance_ = 0;
-
+
 ScreenManager::ScreenManager()
-  : cursor(0)
-{
-  display_gc = new DrawingContext();
-
+  : display_gc(new DrawingContext()),
+    cursor(0)
+    
+{  
+  assert(instance_ == 0);
+  instance_ = this;
   cached_action = CA_NONE;
 }
 
 ScreenManager::~ScreenManager ()
 {
-  delete display_gc;
   delete cursor;
+  instance_ = 0;
 }
 
 void
@@ -134,7 +136,7 @@
          if (get_current_screen()->draw(*display_gc))
             {
               display_gc->render(Display::get_screen(), Rect(Vector2i(0,0), 
Size(Display::get_width(),
-                                                                               
      Display::get_height())));
+                                                                               
  Display::get_height())));
               Display::flip_display();
               display_gc->clear();
             }
@@ -302,9 +304,11 @@
 {
   display_gc->set_rect(Rect(Vector2i(0, 0), size));
 
-  // FIXME: Calling this causes horrible flicker, any better way to resize the 
screen?
+  // FIXME: Calling this causes horrible flicker, since the screen
+  // goes black on a size change. Seems to be an SDL issue.
   Display::set_video_mode(size.width, size.height);
 
+  // FIXME: We need to resize the other screens too
   get_current_screen()->resize(size);
 }
 
@@ -336,18 +340,5 @@
 {
   return cursor;
 }
-
-void
-ScreenManager::init()
-{
-  instance_ = 0;
-}
-
-void
-ScreenManager::deinit()
-{
-  delete instance_;
-  instance_ = 0;
-}
-
+
 /* EOF */

Modified: trunk/pingus/src/screen/screen_manager.hpp
===================================================================
--- trunk/pingus/src/screen/screen_manager.hpp  2008-07-05 07:11:08 UTC (rev 
3690)
+++ trunk/pingus/src/screen/screen_manager.hpp  2008-07-05 07:22:11 UTC (rev 
3691)
@@ -18,6 +18,7 @@
 #define HEADER_PINGUS_SCREEN_MANAGER_HPP
 
 #include "../pingus.hpp"
+#include <memory>
 #include "SDL.h"
 #include <boost/smart_ptr.hpp>
 #include <vector>
@@ -35,7 +36,8 @@
   static ScreenManager* instance_;
 
   SDL_Surface* screen;
-  DrawingContext* display_gc;
+  std::auto_ptr<DrawingContext> display_gc;
+  Cursor* cursor;
 
   /** Screen stack (first is the screen, second is delete_screen,
       which tells if the screen should be deleted onces it got poped
@@ -48,10 +50,8 @@
   enum { CA_NONE, CA_POP, CA_POP_ALL, CA_REPLACE, CA_CLEAR } cached_action;
   ScreenPtr replace_screen_arg;
 
-  Cursor* cursor;
-protected:
-  ScreenManager ();
 public:
+  ScreenManager ();
   ~ScreenManager();
 
   void resize(const Size& size);
@@ -98,8 +98,7 @@
 
 public:
   static ScreenManager* instance ();
-  static void init();
-  static void deinit();
+
 private:
   ScreenManager (const ScreenManager&);
   ScreenManager& operator= (const ScreenManager&);





reply via email to

[Prev in Thread] Current Thread [Next in Thread]