#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;
DrawingContext::DrawingContext()
{
- transform.draw_effect = NONE_EFFECT;
- transform.zoom = 1;
- transform.alpha = 255;
}
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);
DrawingRequest request;
request.type = SURFACE;
- request.layer = layer;
- request.request_data = const_cast<Surface*> (surface);
request.pos = transform.apply(position);
if(request.pos.x >= screen->w || request.pos.y >= screen->h
|| request.pos.x + surface->w < 0 || request.pos.y + surface->h < 0)
return;
-
- request.drawing_effect = drawing_effect;
- request.drawing_effect = transform.draw_effect | drawing_effect;
+
+ request.layer = layer;
+ request.drawing_effect = transform.drawing_effect | drawing_effect;
request.zoom = transform.zoom;
request.alpha = transform.alpha;
+ request.request_data = const_cast<Surface*> (surface);
drawingrequests.push_back(request);
}
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);
DrawingRequest request;
request.type = SURFACE_PART;
- request.layer = layer;
request.pos = transform.apply(dest);
- request.drawing_effect = drawing_effect;
+ request.layer = layer;
+ request.drawing_effect = transform.drawing_effect | drawing_effect;
request.alpha = transform.alpha;
SurfacePartRequest* surfacepartrequest = new SurfacePartRequest();
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;
request.type = TEXT;
- request.layer = layer;
request.pos = transform.apply(position);
- request.drawing_effect = drawing_effect;
+ request.layer = layer;
+ request.drawing_effect = transform.drawing_effect | drawing_effect;
+ request.zoom = transform.zoom;
request.alpha = transform.alpha;
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
DrawingRequest request;
request.type = GRADIENT;
- request.layer = layer;
request.pos = Vector(0,0);
+ request.layer = layer;
+
+ request.drawing_effect = transform.drawing_effect;
+ request.zoom = transform.zoom;
+ request.alpha = transform.alpha;
GradientRequest* gradientrequest = new GradientRequest;
gradientrequest->top = top;
DrawingRequest request;
request.type = FILLRECT;
- request.layer = layer;
request.pos = transform.apply(topleft);
+ request.layer = layer;
+
+ request.drawing_effect = transform.drawing_effect;
+ request.zoom = transform.zoom;
+ request.alpha = transform.alpha;
FillRectRequest* fillrectrequest = new FillRectRequest;
fillrectrequest->size = size;
{
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;
}
void
DrawingContext::set_drawing_effect(int effect)
{
- transform.draw_effect = effect;
+ transform.drawing_effect = effect;
}
void