meterbridge: handle shift+scroll
authorRobin Gareus <robin@gareus.org>
Fri, 5 Jul 2013 18:58:23 +0000 (20:58 +0200)
committerRobin Gareus <robin@gareus.org>
Wed, 10 Jul 2013 13:27:10 +0000 (15:27 +0200)
gtk2_ardour/meterbridge.cc
gtk2_ardour/meterbridge.h

index 4731d39b61d7f2f9bcaee7fb0418084f27919cfe..99b80fb668fe93e4204f126cf64f43fe94a6e4e5 100644 (file)
@@ -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)
 {
index 2e231861c7594eb74a67b2bc65be67391e13021b..56ace71aa959ddcbb3b62c3285ea14752ba2a225 100644 (file)
@@ -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*);