-#include <assert.h>
-#include "drawing_context.h"
-
-#include <iostream>
+// $Id$
+//
+// SuperTux - A Jump'n Run
+// Copyright (C) 2004 Matthias Braun <matze@braunis.de
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// 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 <algorithm>
+#include <cassert>
+#include <iostream>
+
+#include "drawing_context.h"
#include "texture.h"
#include "globals.h"
#include "font.h"
void
DrawingContext::draw_surface(const Surface* surface, const Vector& position,
- int layer)
+ int layer, Uint32 drawing_effect)
{
assert(surface != 0);
request.layer = layer;
request.request_data = const_cast<Surface*> (surface);
request.pos = transform.apply(position);
+ request.drawing_effect = drawing_effect;
drawingrequests.push_back(request);
}
void
DrawingContext::draw_surface_part(const Surface* surface, const Vector& source,
- const Vector& size, const Vector& dest, int layer)
+ const Vector& size, const Vector& dest, int layer, Uint32 drawing_effect)
{
assert(surface != 0);
request.type = SURFACE_PART;
request.layer = layer;
request.pos = transform.apply(dest);
+ request.drawing_effect = drawing_effect;
SurfacePartRequest* surfacepartrequest = new SurfacePartRequest();
surfacepartrequest->size = size;
request.type = FILLRECT;
request.layer = layer;
- request.pos = topleft;
+ request.pos = transform.apply(topleft);
FillRectRequest* fillrectrequest = new FillRectRequest;
fillrectrequest->size = size;
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, 255,
+ request.drawing_effect);
delete surfacepartrequest;
}
else
{
#endif
- float redstep = (float(bottom.red)-float(top.red)) / float(screen->h);
- float greenstep = (float(bottom.green)-float(top.green)) / float(screen->h);
- float bluestep = (float(bottom.blue) - float(top.blue)) / float(screen->h);
-
- for(float y = 0; y < screen->h; y += 2)
- fillrect(0, (int)y, screen->w, 2,
- int(float(top.red) + redstep * y),
- int(float(top.green) + greenstep * y),
- int(float(top.blue) + bluestep * y), 255);
+ if(&top == &bottom)
+ {
+ fillrect(0, 0, screen->w, screen->h, top.red, top.green, top.blue);
+ }
+ else
+ {
+ float redstep = (float(bottom.red)-float(top.red)) / float(screen->h);
+ float greenstep = (float(bottom.green)-float(top.green)) / float(screen->h);
+ float bluestep = (float(bottom.blue) - float(top.blue)) / float(screen->h);
+
+ for(float y = 0; y < screen->h; y += 2)
+ fillrect(0, (int)y, screen->w, 2,
+ int(float(top.red) + redstep * y),
+ int(float(top.green) + greenstep * y),
+ int(float(top.blue) + bluestep * y), 255);
+ }
#ifndef NOOPENGL
}
case SURFACE:
{
const Surface* surface = (const Surface*) i->request_data;
- surface->impl->draw(i->pos.x, i->pos.y, 255);
+ surface->impl->draw(i->pos.x, i->pos.y, 255, i->drawing_effect);
break;
}
case SURFACE_PART: