Tweaks.
authorRicardo Cruz <rick2@aeiou.pt>
Fri, 24 Sep 2004 15:07:22 +0000 (15:07 +0000)
committerRicardo Cruz <rick2@aeiou.pt>
Fri, 24 Sep 2004 15:07:22 +0000 (15:07 +0000)
SVN-Revision: 1962

lib/video/drawing_context.cpp
lib/video/drawing_context.h

index 693191c..80e4b8d 100644 (file)
@@ -30,6 +30,7 @@ using namespace SuperTux;
 DrawingContext::DrawingContext()
 {
 transform.draw_effect = NONE_EFFECT;
+transform.zoom = 1;
 }
 
 DrawingContext::~DrawingContext()
@@ -50,6 +51,7 @@ DrawingContext::draw_surface(const Surface* surface, const Vector& position,
   request.pos = transform.apply(position);
   request.drawing_effect = drawing_effect;
   request.drawing_effect = transform.draw_effect | drawing_effect;
+  request.zoom = transform.zoom;
 
   drawingrequests.push_back(request);
 }
@@ -289,7 +291,13 @@ DrawingContext::do_drawing()
       case SURFACE:
       {
         const Surface* surface = (const Surface*) i->request_data;
-        surface->impl->draw(i->pos.x, i->pos.y, 255, i->drawing_effect);
+
+        if(i->zoom != 1.0)
+          surface->impl->draw_stretched(i->pos.x * i->zoom, i->pos.y * i->zoom,
+                         (int)(surface->w * i->zoom), (int)(surface->h * i->zoom),
+                         255, i->drawing_effect);
+        else
+          surface->impl->draw(i->pos.x, i->pos.y, 255, i->drawing_effect);
         break;
       }
       case SURFACE_PART:
@@ -336,3 +344,9 @@ DrawingContext::set_drawing_effect(int effect)
 {
   transform.draw_effect = effect;
 }
+
+void
+DrawingContext::set_zooming(float zoom)
+{
+  transform.zoom = zoom;
+}
index be8cdfd..a927b67 100644 (file)
@@ -79,19 +79,20 @@ namespace SuperTux
       void do_drawing();
 
       const Vector& get_translation() const
-        {
-          return transform.translation;
-        }
+        {  return transform.translation;  }
+      Uint32 get_drawing_effect() const
+        {  return transform.draw_effect;  }
+
       void set_translation(const Vector& newtranslation)
-      {
-        transform.translation = newtranslation;
-      }
+        {  transform.translation = newtranslation;  }
 
       void push_transform();
       void pop_transform();
 
       /// Apply that effect in the next draws (effects are listed on surface.h).
       void set_drawing_effect(int effect);
+      /// apply that zoom in the next draws */
+      void set_zooming(float zoom);
 
     private:
       class Transform
@@ -104,7 +105,8 @@ namespace SuperTux
               return v - translation;
             }
 
-          int draw_effect;
+          Uint32 draw_effect;
+          float zoom;
         };
 
       /// the transform stack
@@ -147,6 +149,7 @@ namespace SuperTux
         {
           int layer;
           Uint32 drawing_effect;
+          float zoom;
 
           RequestType type;
           Vector pos;