diff options
author | Robin Gareus <robin@gareus.org> | 2013-07-05 20:58:23 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2013-07-10 15:27:10 +0200 |
commit | eb0f1d312370357bd798a4e1c5b2e62c09dcb659 (patch) | |
tree | d6294794bec42a33d6c79353545b19936a1d7a9e | |
parent | da08f8b1c5fed5f936d85aa4605eb202e7063cb3 (diff) |
meterbridge: handle shift+scroll
-rw-r--r-- | gtk2_ardour/meterbridge.cc | 46 | ||||
-rw-r--r-- | gtk2_ardour/meterbridge.h | 4 |
2 files changed, 50 insertions, 0 deletions
diff --git a/gtk2_ardour/meterbridge.cc b/gtk2_ardour/meterbridge.cc index 4731d39b61..99b80fb668 100644 --- a/gtk2_ardour/meterbridge.cc +++ b/gtk2_ardour/meterbridge.cc @@ -43,6 +43,7 @@ #include "meterbridge.h" +#include "keyboard.h" #include "monitor_section.h" #include "public_editor.h" #include "ardour_ui.h" @@ -288,6 +289,51 @@ Meterbridge::on_key_release_event (GdkEventKey* ev) return true; } +bool +Meterbridge::on_scroll_event (GdkEventScroll* ev) +{ + switch (ev->direction) { + case GDK_SCROLL_LEFT: + scroll_left (); + return true; + case GDK_SCROLL_UP: + if (ev->state & Keyboard::TertiaryModifier) { + scroll_left (); + return true; + } + return false; + + case GDK_SCROLL_RIGHT: + scroll_right (); + return true; + + case GDK_SCROLL_DOWN: + if (ev->state & Keyboard::TertiaryModifier) { + scroll_right (); + return true; + } + return false; + } + + return false; +} + +void +Meterbridge::scroll_left () +{ + Adjustment* adj = scroller.get_hscrollbar()->get_adjustment(); + /* stupid GTK: can't rely on clamping across versions */ + scroller.get_hscrollbar()->set_value (max (adj->get_lower(), adj->get_value() - adj->get_step_increment())); +} + +void +Meterbridge::scroll_right () +{ + Adjustment* adj = scroller.get_hscrollbar()->get_adjustment(); + /* stupid GTK: can't rely on clamping across versions */ + scroller.get_hscrollbar()->set_value (min (adj->get_upper(), adj->get_value() + adj->get_step_increment())); +} + void Meterbridge::on_size_request (Gtk::Requisition* r) { diff --git a/gtk2_ardour/meterbridge.h b/gtk2_ardour/meterbridge.h index 2e231861c7..56ace71aa9 100644 --- a/gtk2_ardour/meterbridge.h +++ b/gtk2_ardour/meterbridge.h @@ -107,6 +107,10 @@ class Meterbridge : bool on_key_press_event (GdkEventKey*); bool on_key_release_event (GdkEventKey*); + bool on_scroll_event (GdkEventScroll*); + + void scroll_left (); + void scroll_right (); void on_size_allocate (Gtk::Allocation&); void on_size_request (Gtk::Requisition*); |