Merge pull request #377 from cbeck88/fixup_sliders_1.12
Fixup sliders 1.12
This commit is contained in:
commit
e9ba369cc8
4 changed files with 40 additions and 21 deletions
|
@ -899,7 +899,7 @@ gui::button* display::find_menu_button(const std::string& id)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
gui::slider* display::find_slider(const std::string& id)
|
||||
gui::zoom_slider* display::find_slider(const std::string& id)
|
||||
{
|
||||
for (size_t i = 0; i < sliders_.size(); ++i) {
|
||||
if(sliders_[i].id() == id) {
|
||||
|
@ -913,12 +913,12 @@ void display::create_buttons()
|
|||
{
|
||||
std::vector<gui::button> menu_work;
|
||||
std::vector<gui::button> action_work;
|
||||
std::vector<gui::slider> slider_work;
|
||||
std::vector<gui::zoom_slider> slider_work;
|
||||
|
||||
DBG_DP << "creating sliders...\n";
|
||||
const std::vector<theme::slider>& sliders = theme_.sliders();
|
||||
for(std::vector<theme::slider>::const_iterator i = sliders.begin(); i != sliders.end(); ++i) {
|
||||
gui::slider s(screen_, i->image(), i->black_line());
|
||||
gui::zoom_slider s(screen_, i->image(), i->black_line());
|
||||
DBG_DP << "drawing button " << i->get_id() << "\n";
|
||||
s.set_id(i->get_id());
|
||||
const SDL_Rect& loc = i->location(screen_area());
|
||||
|
@ -934,7 +934,7 @@ void display::create_buttons()
|
|||
s.set_volatile(true);
|
||||
}
|
||||
|
||||
gui::slider* s_prev = find_slider(s.id());
|
||||
gui::zoom_slider* s_prev = find_slider(s.id());
|
||||
if(s_prev) {
|
||||
s.set_max(s_prev->max_value());
|
||||
s.set_min(s_prev->min_value());
|
||||
|
|
|
@ -374,7 +374,7 @@ public:
|
|||
*/
|
||||
gui::button* find_action_button(const std::string& id);
|
||||
gui::button* find_menu_button(const std::string& id);
|
||||
gui::slider* find_slider(const std::string& id);
|
||||
gui::zoom_slider* find_slider(const std::string& id);
|
||||
|
||||
gui::button::TYPE string_to_button_type(std::string type);
|
||||
void create_buttons();
|
||||
|
@ -765,7 +765,7 @@ protected:
|
|||
std::map<std::string, surface> reportSurfaces_;
|
||||
std::map<std::string, config> reports_;
|
||||
std::vector<gui::button> menu_buttons_, action_buttons_;
|
||||
std::vector<gui::slider> sliders_;
|
||||
std::vector<gui::zoom_slider> sliders_;
|
||||
std::set<map_location> invalidated_;
|
||||
std::set<map_location> previous_invalidated_;
|
||||
surface mouseover_hex_overlay_;
|
||||
|
|
|
@ -239,11 +239,11 @@ void slider::mouse_down(const SDL_MouseButtonEvent& event)
|
|||
return;
|
||||
|
||||
state_ = CLICKED;
|
||||
set_focus(true);
|
||||
if (point_in_rect(event.x, event.y, slider_area())) {
|
||||
sound::play_UI_sound(game_config::sounds::button_press);
|
||||
} else {
|
||||
value_change_ = false;
|
||||
set_focus(true);
|
||||
set_slider_position(event.x);
|
||||
if(value_change_) {
|
||||
sound::play_UI_sound(game_config::sounds::slider_adjust);
|
||||
|
@ -299,20 +299,19 @@ void slider::handle_event(const SDL_Event& event)
|
|||
if (!mouse_locked())
|
||||
mouse_motion(event.motion);
|
||||
break;
|
||||
//TODO enable if you know how to fix the zoom slider bug
|
||||
// case SDL_KEYDOWN:
|
||||
// if(focus(&event)) {
|
||||
// const SDL_keysym& key = reinterpret_cast<const SDL_KeyboardEvent&>(event).keysym;
|
||||
// const int c = key.sym;
|
||||
// if(c == SDLK_LEFT) {
|
||||
// sound::play_UI_sound(game_config::sounds::slider_adjust);
|
||||
// set_value(value_ - increment_);
|
||||
// } else if(c == SDLK_RIGHT) {
|
||||
// sound::play_UI_sound(game_config::sounds::slider_adjust);
|
||||
// set_value(value_ + increment_);
|
||||
// }
|
||||
// }
|
||||
// break;
|
||||
case SDL_KEYDOWN:
|
||||
if(focus(&event) && allow_key_events()) { //allow_key_events is used by zoom_sliders to disable left-right key press, which is buggy for them
|
||||
const SDL_keysym& key = reinterpret_cast<const SDL_KeyboardEvent&>(event).keysym;
|
||||
const int c = key.sym;
|
||||
if(c == SDLK_LEFT) {
|
||||
sound::play_UI_sound(game_config::sounds::slider_adjust);
|
||||
set_value(value_ - increment_);
|
||||
} else if(c == SDLK_RIGHT) {
|
||||
sound::play_UI_sound(game_config::sounds::slider_adjust);
|
||||
set_value(value_ + increment_);
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
|
@ -379,4 +378,15 @@ template class list_slider< double >;
|
|||
template class list_slider< int >;
|
||||
template class list_slider< std::string >;
|
||||
|
||||
/***
|
||||
*
|
||||
* Zoom Slider
|
||||
*
|
||||
***/
|
||||
|
||||
zoom_slider::zoom_slider(CVideo &video, const std::string& image, bool black)
|
||||
: slider(video, image, black)
|
||||
{
|
||||
}
|
||||
|
||||
} //end namespace gui
|
||||
|
|
|
@ -51,6 +51,7 @@ protected:
|
|||
bool requires_event_focus(const SDL_Event *event=NULL) const;
|
||||
virtual void handle_event(const SDL_Event& event);
|
||||
virtual void draw_contents();
|
||||
virtual bool allow_key_events() { return true; }
|
||||
|
||||
private:
|
||||
void mouse_motion(const SDL_MouseMotionEvent& event);
|
||||
|
@ -85,6 +86,14 @@ class list_slider : public slider
|
|||
std::vector<T> items_;
|
||||
};
|
||||
|
||||
// This is a different style of slider, which doesn't implement key left/right responses
|
||||
class zoom_slider : public slider
|
||||
{
|
||||
public:
|
||||
zoom_slider(CVideo &video, const std::string& image = "buttons/sliders/slider", bool black = false);
|
||||
virtual bool allow_key_events() { return false; }
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Add table
Reference in a new issue