bool button::handle_event(const SDL_Event& event, bool claimed) { #if SDL_VERSION_ATLEAST(2, 0, 0) if((event.type == SDL_MOUSEWHEEL) #else if((event.type == SDL_MOUSEBUTTONDOWN || event.type == SDL_MOUSEBUTTONUP) && (event.button.button == SDL_BUTTON_WHEELUP || event.button.button == SDL_BUTTON_WHEELDOWN) #endif && in_widget(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_widget(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_widget(e.x,e.y)) { std::cerr << "ZZZ: Widget: " << e.x << ", " << e.y << ": "; if(clip_area()) { std::cerr << *clip_area() << "\n"; } else { std::cerr << "(null)\n"; } current_button_image_set_ = depressed_button_image_set_; down_ = true; claimed = claim_mouse_events(); } } 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_widget(e.x,e.y)) { current_button_image_set_ = focus_button_image_set_; onclick_(); claimed = claim_mouse_events(); } else { current_button_image_set_ = normal_button_image_set_; } } } return claimed; }
variant label::handle_write() { variant_builder res; res.add("type", "label"); res.add("text", text()); if(color_.r != 255 || color_.g != 255 || color_.b != 255 || color_.a != 255) { res.add("color", graphics::color(color_).write()); } if(size() != default_font_size) { res.add("size", size()); } if(font().empty() == false) { res.add("font", font()); } if(border_color_) { res.add("border_color", graphics::color(*border_color_).write()); if(border_size_ != 2) { res.add("border_size", border_size_); } } if(highlight_on_mouseover_) { res.add("highlight_on_mouseover", true); } if(claim_mouse_events()) { res.add("claim_mouse_events", true); } return res.build(); }
bool dropdown_widget::handle_mouseup(const SDL_MouseButtonEvent& event, bool claimed) { point p(event.x, event.y); //int button_state = SDL_GetMouseState(&p.x, &p.y); if(point_in_rect(p, rect(x(), y(), width()+height(), height()))) { claimed = claim_mouse_events(); } return claimed; }
bool label::handle_event(const SDL_Event& event, bool claimed) { if(!on_click_ && !highlight_on_mouseover_) { return claimed; } #if SDL_VERSION_ATLEAST(2, 0, 0) if((event.type == SDL_MOUSEWHEEL) #else if((event.type == SDL_MOUSEBUTTONDOWN || event.type == SDL_MOUSEBUTTONUP) && (event.button.button == SDL_BUTTON_WHEELUP || event.button.button == SDL_BUTTON_WHEELDOWN) #endif && in_label(event.button.x, event.button.y)) { // skip processing if mousewheel event return claimed; } if(event.type == SDL_MOUSEMOTION) { const SDL_MouseMotionEvent& e = event.motion; if(highlight_on_mouseover_) { if(in_label(e.x,e.y)) { draw_highlight_ = true; } else { draw_highlight_ = false; } claimed = claim_mouse_events(); } } else if(event.type == SDL_MOUSEBUTTONDOWN) { const SDL_MouseButtonEvent& e = event.button; if(in_label(e.x,e.y)) { down_ = true; claimed = claim_mouse_events(); } } else if(event.type == SDL_MOUSEBUTTONUP) { down_ = false; const SDL_MouseButtonEvent& e = event.button; if(in_label(e.x,e.y)) { if(on_click_) { on_click_(); } claimed = claim_mouse_events(); } } return claimed; }
bool dropdown_widget::handle_mousedown(const SDL_MouseButtonEvent& event, bool claimed) { point p(event.x, event.y); //int button_state = input::sdl_get_mouse_state(&p.x, &p.y); if(point_in_rect(p, rect(x(), y(), width()+height(), height()))) { claimed = claim_mouse_events(); if(dropdown_menu_) { dropdown_menu_->set_visible(!dropdown_menu_->visible()); } } 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 = claim_mouse_events(); } 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; }