// 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 <functional>
#include <algorithm>
-#include <cassert>
-#include <iostream>
-#include <SDL_image.h>
-#include <sstream>
-#include <iomanip>
-#include <physfs.h>
#include "drawing_context.hpp"
+
#include "drawing_request.hpp"
#include "video_systems.hpp"
#include "renderer.hpp"
void
DrawingContext::draw_text(const Font* font, const std::string& text,
- const Vector& position, FontAlignment alignment, int layer)
+ const Vector& position, FontAlignment alignment, int layer, Color color)
{
DrawingRequest* request = new(obst) DrawingRequest();
request->layer = layer;
request->drawing_effect = transform.drawing_effect;
request->alpha = transform.alpha;
+ request->color = color;
TextRequest* textrequest = new(obst) TextRequest();
textrequest->font = font;
void
DrawingContext::draw_center_text(const Font* font, const std::string& text,
- const Vector& position, int layer)
+ const Vector& position, int layer, Color color)
{
draw_text(font, text, Vector(position.x + SCREEN_WIDTH/2, position.y),
- ALIGN_CENTER, layer);
+ ALIGN_CENTER, layer, color);
}
void
}
void
+DrawingContext::draw_inverse_ellipse(const Vector& pos, const Vector& size, const Color& color, int layer)
+{
+ DrawingRequest* request = new(obst) DrawingRequest();
+
+ request->target = target;
+ request->type = INVERSEELLIPSE;
+ request->pos = transform.apply(pos);
+ request->layer = layer;
+
+ request->drawing_effect = transform.drawing_effect;
+ request->alpha = transform.alpha;
+
+ InverseEllipseRequest* ellipse = new(obst)InverseEllipseRequest;
+
+ ellipse->color = color;
+ ellipse->color.alpha = color.alpha * transform.alpha;
+ ellipse->size = size;
+ request->request_data = ellipse;
+
+ requests->push_back(request);
+}
+
+void
DrawingContext::get_light(const Vector& position, Color* color)
{
if( ambient_color.red == 1.0f && ambient_color.green == 1.0f
lightmap->start_draw(ambient_color);
handle_drawing_requests(lightmap_requests);
lightmap->end_draw();
+
+ DrawingRequest* request = new(obst) DrawingRequest();
+ request->target = NORMAL;
+ request->type = DRAW_LIGHTMAP;
+ request->layer = LAYER_HUD - 1;
+ drawing_requests.push_back(request);
}
lightmap_requests.clear();
handle_drawing_requests(drawing_requests);
drawing_requests.clear();
- if(use_lightmap) {
- lightmap->do_draw();
- }
obstack_free(&obst, NULL);
obstack_init(&obst);
{
const TextRequest* textrequest = (TextRequest*) request.request_data;
textrequest->font->draw(renderer, textrequest->text, request.pos,
- textrequest->alignment, request.drawing_effect, request.alpha);
+ textrequest->alignment, request.drawing_effect, request.color, request.alpha);
}
break;
case FILLRECT:
renderer->draw_filled_rect(request);
break;
+ case INVERSEELLIPSE:
+ renderer->draw_inverse_ellipse(request);
+ break;
+ case DRAW_LIGHTMAP:
+ lightmap->do_draw();
+ break;
case GETLIGHT:
lightmap->get_light(request);
break;
{
const TextRequest* textrequest = (TextRequest*) request.request_data;
textrequest->font->draw(renderer, textrequest->text, request.pos,
- textrequest->alignment, request.drawing_effect, request.alpha);
+ textrequest->alignment, request.drawing_effect, request.color, request.alpha);
}
break;
case FILLRECT:
lightmap->draw_filled_rect(request);
break;
+ case INVERSEELLIPSE:
+ assert(!"InverseEllipse doesn't make sense on the lightmap");
+ break;
+ case DRAW_LIGHTMAP:
+ lightmap->do_draw();
+ break;
case GETLIGHT:
lightmap->get_light(request);
break;