[Top][All Lists]
[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&);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Pingus-CVS] r3691 - in trunk/pingus/src: . screen,
grumbel at BerliOS <=