// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#include <config.h>
+
#include <algorithm>
#include <cassert>
#include <iostream>
DrawingContext::DrawingContext()
{
-transform.draw_effect = NONE_EFFECT;
+ transform.draw_effect = NONE_EFFECT;
+ transform.zoom = 1;
+ transform.alpha = 255;
}
DrawingContext::~DrawingContext()
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.zoom = transform.zoom;
+ request.alpha = transform.alpha;
drawingrequests.push_back(request);
}
request.layer = layer;
request.pos = transform.apply(dest);
request.drawing_effect = drawing_effect;
+ request.alpha = transform.alpha;
SurfacePartRequest* surfacepartrequest = new SurfacePartRequest();
surfacepartrequest->size = size;
void
DrawingContext::draw_text(Font* font, const std::string& text,
- const Vector& position, int layer, Uint32 drawing_effect, int alpha)
+ const Vector& position, int allignment, int layer,
+ Uint32 drawing_effect)
{
DrawingRequest request;
request.layer = layer;
request.pos = transform.apply(position);
request.drawing_effect = drawing_effect;
+ request.alpha = transform.alpha;
TextRequest* textrequest = new TextRequest;
textrequest->font = font;
textrequest->text = text;
- textrequest->center = false;
- textrequest->alpha = alpha;
+ textrequest->allignment = allignment;
request.request_data = textrequest;
drawingrequests.push_back(request);
}
void
-DrawingContext::draw_text_center(Font* font, const std::string& text,
- const Vector& position, int layer, Uint32 drawing_effect, int alpha)
+DrawingContext::draw_center_text(Font* font, const std::string& text,
+ const Vector& position, int layer, Uint32 drawing_effect)
{
- DrawingRequest request;
-
- request.type = TEXT;
- request.layer = layer;
- request.pos = transform.apply(position);
- request.drawing_effect = drawing_effect;
-
- TextRequest* textrequest = new TextRequest;
- textrequest->font = font;
- textrequest->text = text;
- textrequest->center = true;
- textrequest->alpha = alpha;
- request.request_data = textrequest;
-
- drawingrequests.push_back(request);
+draw_text(font, text, Vector(position.x + screen->w/2, position.y),
+ CENTER_ALLIGN, layer, drawing_effect);
}
void
surfacepartrequest->surface->impl->draw_part(
surfacepartrequest->source.x, surfacepartrequest->source.y,
request.pos.x, request.pos.y,
- surfacepartrequest->size.x, surfacepartrequest->size.y, 255,
+ surfacepartrequest->size.x, surfacepartrequest->size.y, request.alpha,
request.drawing_effect);
delete surfacepartrequest;
{
TextRequest* textrequest = (TextRequest*) request.request_data;
- if(textrequest->center)
- textrequest->font->draw_center(textrequest->text, request.pos, request.drawing_effect, textrequest->alpha);
- else
- textrequest->font->draw(textrequest->text, request.pos, request.drawing_effect, textrequest->alpha);
+ textrequest->font->draw(textrequest->text, request.pos, textrequest->allignment, request.drawing_effect, request.alpha);
delete textrequest;
}
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),
+ i->alpha, i->drawing_effect);
+ else
+ surface->impl->draw(i->pos.x, i->pos.y, i->alpha, i->drawing_effect);
break;
}
case SURFACE_PART:
{
transform.draw_effect = effect;
}
+
+void
+DrawingContext::set_zooming(float zoom)
+{
+ transform.zoom = zoom;
+}
+
+void
+DrawingContext::set_alpha(int alpha)
+{
+ transform.alpha = alpha;
+}