fix lightmap-in-front-of-menu bug
[supertux.git] / src / video / drawing_context.cpp
index 7ca3e26..f1fecb7 100644 (file)
@@ -219,6 +219,7 @@ DrawingContext::draw_filled_rect(const Vector& topleft, const Vector& size,
   fillrectrequest->size = size;
   fillrectrequest->color = color;
   fillrectrequest->color.alpha = color.alpha * transform.alpha;
+  fillrectrequest->radius = 0.0f;
   request->request_data = fillrectrequest;
 
   requests->push_back(request);
@@ -228,12 +229,18 @@ void
 DrawingContext::draw_filled_rect(const Rect& rect, const Color& color,
                                  int layer)
 {
+  draw_filled_rect(rect, color, 0.0f, layer);
+}
+
+void
+DrawingContext::draw_filled_rect(const Rect& rect, const Color& color, float radius, int layer)
+{
   DrawingRequest* request = new(obst) DrawingRequest();
 
   request->target = target;
-  request->type = FILLRECT;
-  request->pos = transform.apply(rect.p1);
-  request->layer = layer;
+  request->type   = FILLRECT;
+  request->pos    = transform.apply(rect.p1);
+  request->layer  = layer;
 
   request->drawing_effect = transform.drawing_effect;
   request->alpha = transform.alpha;
@@ -242,9 +249,33 @@ DrawingContext::draw_filled_rect(const Rect& rect, const Color& color,
   fillrectrequest->size = Vector(rect.get_width(), rect.get_height());
   fillrectrequest->color = color;
   fillrectrequest->color.alpha = color.alpha * transform.alpha;
+  fillrectrequest->radius = radius;
   request->request_data = fillrectrequest;
 
-  requests->push_back(request);
+  requests->push_back(request); 
+}
+
+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
@@ -294,12 +325,17 @@ DrawingContext::do_drawing()
     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);
-  if(use_lightmap) {
-    lightmap->do_draw();
-  }
+  drawing_requests.clear();
   obstack_free(&obst, NULL);
   obstack_init(&obst);
 
@@ -355,6 +391,12 @@ DrawingContext::handle_drawing_requests(DrawingRequests& requests)
           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;
@@ -381,6 +423,12 @@ DrawingContext::handle_drawing_requests(DrawingRequests& requests)
           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;
@@ -388,7 +436,6 @@ DrawingContext::handle_drawing_requests(DrawingRequests& requests)
         break;
     }
   }
-  requests.clear();
 }
 
 void