bool button::handle_event(const SDL_Event& event, bool claimed) { if(claimed) { current_texture_ = &normal_texture_; } if(event.type == SDL_MOUSEMOTION) { const SDL_MouseMotionEvent& e = event.motion; if(current_texture_ == &depressed_texture_) { //pass } else if(in_button(e.x,e.y)) { current_texture_ = &focus_texture_; } else { current_texture_ = &normal_texture_; } } else if(event.type == SDL_MOUSEBUTTONDOWN) { const SDL_MouseButtonEvent& e = event.button; if(in_button(e.x,e.y)) { current_texture_ = &depressed_texture_; } } else if(event.type == SDL_MOUSEBUTTONUP) { const SDL_MouseButtonEvent& e = event.button; if(current_texture_ == &depressed_texture_) { if(in_button(e.x,e.y)) { current_texture_ = &focus_texture_; onclick_(); claimed = true; } else { current_texture_ = &normal_texture_; } } } return claimed; }
bool key_button::handle_event(const SDL_Event& event, bool claimed) { if(claimed) { current_button_image_set_ = normal_button_image_set_; } if(event.type == SDL_MOUSEMOTION && !grab_keys_) { const SDL_MouseMotionEvent& e = event.motion; if(current_button_image_set_ == depressed_button_image_set_) { //pass } else if(in_button(e.x,e.y)) { current_button_image_set_ = focus_button_image_set_; } else { current_button_image_set_ = normal_button_image_set_; } } else if(event.type == SDL_MOUSEBUTTONDOWN) { const SDL_MouseButtonEvent& e = event.button; if(in_button(e.x,e.y)) { current_button_image_set_ = depressed_button_image_set_; } } else if(event.type == SDL_MOUSEBUTTONUP) { const SDL_MouseButtonEvent& e = event.button; if(current_button_image_set_ == depressed_button_image_set_) { if(in_button(e.x,e.y)) { current_button_image_set_ = focus_button_image_set_; grab_keys_ = true; dynamic_cast<graphical_font_label*>(label_.get())->set_text("..."); claimed = true; } else { current_button_image_set_ = normal_button_image_set_; } } else if (grab_keys_) { dynamic_cast<graphical_font_label*>(label_.get())->set_text(get_key_name(key_)); current_button_image_set_ = normal_button_image_set_; grab_keys_ = false; } } if(event.type == SDL_KEYDOWN && grab_keys_) { key_ = event.key.keysym.sym; if(key_ != SDLK_RETURN && key_ != SDLK_ESCAPE) { dynamic_cast<graphical_font_label*>(label_.get())->set_text(get_key_name(key_)); claimed = true; current_button_image_set_ = normal_button_image_set_; grab_keys_ = false; } } return claimed; }
bool button::handle_event(const SDL_Event& event, bool claimed) { if((event.type == SDL_MOUSEBUTTONDOWN || event.type == SDL_MOUSEBUTTONUP) && (event.button.button == SDL_BUTTON_WHEELUP || event.button.button == SDL_BUTTON_WHEELDOWN) && in_button(event.button.x, event.button.y)) { // skip processing if mousewheel event return claimed; } if(claimed) { current_button_image_set_ = normal_button_image_set_; down_ = false; } if(event.type == SDL_MOUSEMOTION) { const SDL_MouseMotionEvent& e = event.motion; if(in_button(e.x,e.y)) { current_button_image_set_ = down_ ? depressed_button_image_set_ : focus_button_image_set_; } else { current_button_image_set_ = normal_button_image_set_; } } else if(event.type == SDL_MOUSEBUTTONDOWN) { const SDL_MouseButtonEvent& e = event.button; if(in_button(e.x,e.y)) { current_button_image_set_ = depressed_button_image_set_; down_ = true; claimed = true; } } else if(event.type == SDL_MOUSEBUTTONUP) { down_ = false; const SDL_MouseButtonEvent& e = event.button; if(current_button_image_set_ == depressed_button_image_set_) { if(in_button(e.x,e.y)) { current_button_image_set_ = focus_button_image_set_; onclick_(); claimed = true; } else { current_button_image_set_ = normal_button_image_set_; } } } return claimed; }