summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2013-07-05 20:58:23 +0200
committerRobin Gareus <robin@gareus.org>2013-07-10 15:27:10 +0200
commiteb0f1d312370357bd798a4e1c5b2e62c09dcb659 (patch)
treed6294794bec42a33d6c79353545b19936a1d7a9e
parentda08f8b1c5fed5f936d85aa4605eb202e7063cb3 (diff)
meterbridge: handle shift+scroll
-rw-r--r--gtk2_ardour/meterbridge.cc46
-rw-r--r--gtk2_ardour/meterbridge.h4
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*);