- Reworked Surface class and drawing stuff:
[supertux.git] / src / gui / menu.cpp
index d70b16a..5993bf4 100644 (file)
 #include <cassert>
 #include <stdexcept>
 
-#include "menu.h"
-#include "video/screen.h"
-#include "video/drawing_context.h"
-#include "gettext.h"
-#include "math/vector.h"
-#include "main.h"
-#include "resources.h"
-#include "control/joystickkeyboardcontroller.h"
+#include "menu.hpp"
+#include "video/screen.hpp"
+#include "video/drawing_context.hpp"
+#include "gettext.hpp"
+#include "math/vector.hpp"
+#include "main.hpp"
+#include "resources.hpp"
+#include "control/joystickkeyboardcontroller.hpp"
 
 static const int MENU_REPEAT_INITIAL = 400;
 static const int MENU_REPEAT_RATE = 200;
@@ -76,21 +76,21 @@ bool confirm_dialog(Surface *background, std::string text)
   while(true)
     {
       SDL_Event event;
-
-      if(event.type == SDL_QUIT)
-        throw std::runtime_error("received window close event");
-      
       while (SDL_PollEvent(&event)) {
+        if(event.type == SDL_QUIT)
+          throw std::runtime_error("received window close event");
+        main_controller->process_event(event);
         dialog->event(event);
       }
 
       if(background == NULL)
-        context.draw_gradient(Color(200,240,220), Color(200,200,220), LAYER_BACKGROUND0);
+        context.draw_gradient(Color(0.8, 0.95, 0.85), Color(0.8, 0.8, 0.8),
+                              LAYER_BACKGROUND0);
       else
         context.draw_surface(background, Vector(0,0), LAYER_BACKGROUND0);
 
       dialog->draw(context);
-      dialog->action();
+      dialog->update();
 
       switch (dialog->check())
         {
@@ -315,7 +315,7 @@ Menu::clear()
 
 /* Process actions done on the menu */
 void
-Menu::action()
+Menu::update()
 {
   /** check main input controller... */
   Uint32 ticks = SDL_GetTicks();
@@ -420,7 +420,7 @@ Menu::action()
         case MN_TEXTFIELD:
         case MN_NUMFIELD:
           menuaction = MENU_ACTION_DOWN;
-          action();
+          update();
           break;
           
         case MN_BACK:
@@ -538,9 +538,11 @@ Menu::draw_item(DrawingContext& context, int index)
         int y = y_pos - 12 - effect_offset;
         /* Draw a horizontal line with a little 3d effect */
         context.draw_filled_rect(Vector(x, y + 6),
-                                 Vector(menu_width, 4), Color(150,200,255,225), LAYER_GUI);
+                                 Vector(menu_width, 4),
+                                 Color(0.6f, 0.7f, 1.0f, 1.0f), LAYER_GUI);
         context.draw_filled_rect(Vector(x, y + 6),
-                                 Vector(menu_width, 2), Color(255,255,255,255), LAYER_GUI);
+                                 Vector(menu_width, 2),
+                                 Color(1.0f, 1.0f, 1.0f, 1.0f), LAYER_GUI);
         break;
       }
     case MN_LABEL:
@@ -561,11 +563,11 @@ Menu::draw_item(DrawingContext& context, int index)
         context.draw_filled_rect(
           Vector(input_pos - 5, y_pos - 10),
           Vector(input_width + 10, 20),
-          Color(255,255,255,255), LAYER_GUI-5);
+          Color(1.0f, 1.0f, 1.0f, 1.0f), LAYER_GUI-5);
         context.draw_filled_rect(
           Vector(input_pos - 4, y_pos - 9),
           Vector(input_width + 8, 18),
-          Color(0,0,0,128), LAYER_GUI-4);
+          Color(0, 0, 0, 0.5f), LAYER_GUI-4);
 
         if(pitem.kind == MN_TEXTFIELD || pitem.kind == MN_NUMFIELD)
           {
@@ -608,11 +610,11 @@ Menu::draw_item(DrawingContext& context, int index)
         context.draw_filled_rect(
           Vector(x_pos - list_pos + text_pos - 1, y_pos - 10),
           Vector(list_pos_2 + 2, 20),
-          Color(255,255,255,255), LAYER_GUI - 4);
+          Color(1.0f, 1.0f, 1.0f, 1.0f), LAYER_GUI - 4);
         context.draw_filled_rect(
           Vector(x_pos - list_pos + text_pos, y_pos - 9),
           Vector(list_pos_2, 18),
-          Color(0,0,0,128), LAYER_GUI - 5);
+          Color(0, 0, 0, 0.5f), LAYER_GUI - 5);
 
         context.draw_text(text_font, pitem.list[pitem.selected],
                                  Vector(SCREEN_WIDTH/2 + text_pos, y_pos - int(text_font->get_height()/2)),
@@ -691,6 +693,10 @@ int Menu::get_height() const
 void
 Menu::draw(DrawingContext& context)
 {
+  if(MouseCursor::current()) {
+    MouseCursor::current()->draw(context);
+  }
+  
   int menu_height = get_height();
   int menu_width = get_width();  
 
@@ -698,7 +704,7 @@ Menu::draw(DrawingContext& context)
   context.draw_filled_rect(
     Vector(pos_x - menu_width/2, pos_y - 24*items.size()/2 - 10),
     Vector(menu_width,menu_height + 20),
-    Color(150,180,200,125), LAYER_GUI-10);
+    Color(0.6f, 0.7f, 0.8f, 0.5f), LAYER_GUI-10);
 
   for(unsigned int i = 0; i < items.size(); ++i)
     {