new editor image for infoblock
[supertux.git] / lib / video / drawing_context.cpp
index 5c98f13..6257b9f 100644 (file)
 #include <cassert>
 #include <iostream>
 
-#include "../video/drawing_context.h"
-#include "../video/surface.h"
-#include "../app/globals.h"
-#include "../video/font.h"
+#include "drawing_context.h"
+#include "surface.h"
+#include "app/globals.h"
+#include "font.h"
 
 using namespace SuperTux;
 
@@ -39,7 +39,7 @@ DrawingContext::~DrawingContext()
 
 void
 DrawingContext::draw_surface(const Surface* surface, const Vector& position,
-    int layer, Uint32 drawing_effect)
+    int layer, uint32_t drawing_effect)
 {
   assert(surface != 0);
   
@@ -63,7 +63,7 @@ DrawingContext::draw_surface(const Surface* surface, const Vector& position,
 
 void
 DrawingContext::draw_surface_part(const Surface* surface, const Vector& source,
-    const Vector& size, const Vector& dest, int layer, Uint32 drawing_effect)
+    const Vector& size, const Vector& dest, int layer, uint32_t drawing_effect)
 {
   assert(surface != 0);
 
@@ -79,15 +79,31 @@ DrawingContext::draw_surface_part(const Surface* surface, const Vector& source,
   surfacepartrequest->size = size;
   surfacepartrequest->source = source;
   surfacepartrequest->surface = surface;
+
+  // clip on screen borders
+  if(request.pos.x < 0) {
+    surfacepartrequest->size.x += request.pos.x;
+    if(surfacepartrequest->size.x <= 0)
+      return;
+    surfacepartrequest->source.x -= request.pos.x;
+    request.pos.x = 0;
+  }
+  if(request.pos.y < 0) {
+    surfacepartrequest->size.y += request.pos.y;
+    if(surfacepartrequest->size.y <= 0)
+      return;
+    surfacepartrequest->source.y -= request.pos.y;
+    request.pos.y = 0;
+  }
   request.request_data = surfacepartrequest;
 
   drawingrequests.push_back(request);
 }
 
 void
-DrawingContext::draw_text(Font* font, const std::string& text,
-    const Vector& position, int allignment, int layer,
-    Uint32 drawing_effect)
+DrawingContext::draw_text(const Font* font, const std::string& text,
+    const Vector& position, FontAlignment alignment, int layer,
+    uint32_t drawing_effect)
 {
   DrawingRequest request;
 
@@ -101,18 +117,18 @@ DrawingContext::draw_text(Font* font, const std::string& text,
   TextRequest* textrequest = new TextRequest;
   textrequest->font = font;
   textrequest->text = text;
-  textrequest->allignment = allignment;
+  textrequest->alignment = alignment;
   request.request_data = textrequest;
 
   drawingrequests.push_back(request);
 }
 
 void
-DrawingContext::draw_center_text(Font* font, const std::string& text,
-    const Vector& position, int layer, Uint32 drawing_effect)
+DrawingContext::draw_center_text(const Font* font, const std::string& text,
+    const Vector& position, int layer, uint32_t drawing_effect)
 {
-draw_text(font, text, Vector(position.x + screen->w/2, position.y),
-          CENTER_ALLIGN, layer, drawing_effect);
+  draw_text(font, text, Vector(position.x + screen->w/2, position.y),
+      CENTER_ALLIGN, layer, drawing_effect);
 }
 
 void
@@ -224,7 +240,8 @@ DrawingContext::draw_text(DrawingRequest& request)
 {
   TextRequest* textrequest = (TextRequest*) request.request_data;
 
-  textrequest->font->draw(textrequest->text, request.pos, textrequest->allignment, request.drawing_effect, request.alpha);
+  textrequest->font->draw(textrequest->text, request.pos,
+      textrequest->alignment, request.drawing_effect, request.alpha);
 
   delete textrequest;
 }