X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fbutton.cpp;h=27697c90236f049068c07cf3eb2619d57c2b30ef;hb=157cef71aeb9ae25b7bb90f37dda11bc09329d11;hp=b46b8e5129f1f431cdaea2268a9da9bb96abdbc5;hpb=c824e19caa62118f59abbd2a53f7d91261b12af8;p=supertux.git diff --git a/src/button.cpp b/src/button.cpp index b46b8e512..27697c902 100644 --- a/src/button.cpp +++ b/src/button.cpp @@ -24,6 +24,7 @@ #include "screen.h" #include "globals.h" #include "button.h" +#include "camera.h" Timer Button::popup_timer; @@ -44,7 +45,7 @@ Button::Button(std::string icon_file, std::string ninfo, SDLKey nshortcut, int x tag = -1; state = BUTTON_NONE; show_info = false; - game_object = NULL; + drawable = NULL; } void Button::add_icon(std::string icon_file, int mw, int mh) @@ -69,7 +70,7 @@ void Button::add_icon(std::string icon_file, int mw, int mh) } else icon.push_back(new Surface(filename,USE_ALPHA)); - + } void Button::draw() @@ -82,11 +83,13 @@ void Button::draw() fillrect(rect.x+1,rect.y+1,rect.w-2,rect.h-2,175,175,175,200); for(std::vector::iterator it = icon.begin(); it != icon.end(); ++it) - (*it)->draw(rect.x,rect.y); - - if(game_object != NULL) + (*it)->draw(rect.x,rect.y); + + if(drawable) { - game_object->draw_on_screen(rect.x,rect.y); + Camera viewport; + viewport.set_translation(Vector(rect.x, rect.y)); + drawable->draw(viewport, 0); } if(show_info) @@ -111,15 +114,15 @@ void Button::draw() Button::~Button() { for(std::vector::iterator it = icon.begin(); it != icon.end(); ++it) - delete (*it); + delete (*it); icon.clear(); - delete game_object; + delete drawable; } void Button::event(SDL_Event &event) { -if(state == BUTTON_DEACTIVE) -return; + if(state == BUTTON_DEACTIVE) + return; SDLKey key = event.key.keysym.sym; @@ -146,20 +149,24 @@ return; } if(event.button.button == SDL_BUTTON_LEFT) - if(event.type == SDL_MOUSEBUTTONDOWN) - state = BUTTON_PRESSED; - else - state = BUTTON_CLICKED; + if(event.type == SDL_MOUSEBUTTONDOWN) + state = BUTTON_PRESSED; + else + state = BUTTON_CLICKED; } else if(event.type == SDL_MOUSEMOTION) { if(event.motion.x < rect.x || event.motion.x >= rect.x + rect.w || event.motion.y < rect.y || event.motion.y >= rect.y + rect.h) + { state = BUTTON_NONE; + } else + { state = BUTTON_HOVER; + popup_timer.start(1500); + } - popup_timer.start(1500); if(show_info) { show_info = false; @@ -209,17 +216,18 @@ Button* ButtonPanel::event(SDL_Event& event) { if(!hidden) { + Button* ret = NULL; for(std::vector::iterator it = item.begin(); it != item.end(); ++it) { (*it)->event(event); if((*it)->state != BUTTON_NONE) { if(hlast && (*it)->state == BUTTON_CLICKED) - last_clicked = it; - return (*it); - } + last_clicked = it; + ret = (*it); + } } - return NULL; + return ret; } else { @@ -247,7 +255,7 @@ void ButtonPanel::draw() (*it)->draw(); if(hlast && it == last_clicked) { - fillrect((*it)->get_pos().x,(*it)->get_pos().y,(*it)->get_pos().w,(*it)->get_pos().h,100,100,100,128); + fillrect((*it)->get_pos().x,(*it)->get_pos().y,(*it)->get_pos().w,(*it)->get_pos().h,100,100,100,128); } } } @@ -288,7 +296,7 @@ Button* ButtonPanel::manipulate_button(int i) void ButtonPanel::highlight_last(bool b) { -hlast = b; + hlast = b; }