fix bug 215 (unpausing doesn't always work)
[supertux.git] / src / mainloop.cpp
index 07d8536..314de15 100644 (file)
@@ -49,7 +49,7 @@ static const int MAX_FRAME_SKIP = 2;
 MainLoop* main_loop = NULL;
 
 MainLoop::MainLoop()
-  : speed(1.0), nextpop(false), nextpush(false), fps(0)
+  : speed(1.0), nextpop(false), nextpush(false), fps(0), screenshot_requested(false)
 {
   using namespace Scripting;
   TimeScheduler::instance = new TimeScheduler();
@@ -109,6 +109,12 @@ MainLoop::set_speed(float speed)
   this->speed = speed;
 }
 
+float
+MainLoop::get_speed() const
+{
+  return speed;
+}
+
 void
 MainLoop::draw_fps(DrawingContext& context, float fps_fps)
 {
@@ -135,6 +141,11 @@ MainLoop::draw(DrawingContext& context)
   if(config->show_fps)
     draw_fps(context, fps);
 
+  // if a screenshot was requested, pass request on to drawing_context
+  if (screenshot_requested) {
+    context.take_screenshot();
+    screenshot_requested = false;
+  }
   context.do_drawing();
 
   /* Calculate frames per second */
@@ -177,6 +188,9 @@ MainLoop::process_events()
       config->use_fullscreen = !config->use_fullscreen;
       init_video();
     }
+    else if (event.type == SDL_KEYDOWN && event.key.keysym.sym == SDLK_PRINT) {
+      take_screenshot();
+    }
   }
 }
 
@@ -262,3 +276,10 @@ MainLoop::run()
     SDL_Delay(0);
   }
 }
+
+void 
+MainLoop::take_screenshot()
+{
+  screenshot_requested = true;
+}
+