- std::stable_sort(requests.begin(), requests.end());
-
- for(DrawingRequests::iterator i = requests.begin();
- i != requests.end(); ++i) {
- switch(i->type) {
- case SURFACE:
- {
- const Surface* surface = (const Surface*) i->request_data;
- if (i->angle == 0.0f)
- surface->draw(i->pos.x, i->pos.y, i->alpha, i->drawing_effect);
- else
- surface->draw(i->pos.x, i->pos.y, i->alpha, i->angle, i->drawing_effect);
- break;
- }
- case SURFACE_PART:
- draw_surface_part(*i);
- break;
- case GRADIENT:
- draw_gradient(*i);
- break;
- case TEXT:
- draw_text(*i);
+ std::stable_sort(requests.begin(), requests.end(), RequestPtrCompare());
+
+ DrawingRequests::const_iterator i;
+ for(i = requests.begin(); i != requests.end(); ++i) {
+ const DrawingRequest& request = **i;
+
+ switch(request.target) {
+ case NORMAL:
+ switch(request.type) {
+ case SURFACE:
+ renderer->draw_surface(request);
+ break;
+ case SURFACE_PART:
+ renderer->draw_surface_part(request);
+ break;
+ case GRADIENT:
+ renderer->draw_gradient(request);
+ break;
+ case TEXT:
+ {
+ const TextRequest* textrequest = (TextRequest*) request.request_data;
+ textrequest->font->draw(renderer, textrequest->text, request.pos,
+ 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;
+ }