X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=lib%2Fvideo%2Fdrawing_context.cpp;h=6257b9fbcbb185b34863c763144fab4ecd983c63;hb=8e0bad9f82ccbc811a18edd7ce6c6f69c5bca082;hp=5c98f134d79b70d9201acdc68844a5a5872dca33;hpb=00fb759c2385ff08caf38e916c2d0ba8cafc8a41;p=supertux.git diff --git a/lib/video/drawing_context.cpp b/lib/video/drawing_context.cpp index 5c98f134d..6257b9fbc 100644 --- a/lib/video/drawing_context.cpp +++ b/lib/video/drawing_context.cpp @@ -22,10 +22,10 @@ #include #include -#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; }