key stroke (left/right arrow) and wheel (left/right, shift-down/up) scrolling in...
authorPaul Davis <paul@linuxaudiosystems.com>
Wed, 28 Oct 2009 19:56:00 +0000 (19:56 +0000)
committerPaul Davis <paul@linuxaudiosystems.com>
Wed, 28 Oct 2009 19:56:00 +0000 (19:56 +0000)
git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@5958 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/mixer_ui.cc
gtk2_ardour/mixer_ui.h

index a024661006c740ac205e86b4a44b0d63024b8869..e2946f823b495f2b490c4cfca989315cad4b4062 100644 (file)
@@ -1478,8 +1478,66 @@ Mixer_UI::pane_allocation_handler (Allocation& alloc, Gtk::Paned* which)
        }
 }
 
+void
+Mixer_UI::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
+Mixer_UI::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()));
+}
+
 bool
 Mixer_UI::on_key_press_event (GdkEventKey* ev)
 {
+       switch (ev->keyval) {
+       case GDK_Left:
+               scroll_left ();
+               return true;
+
+       case GDK_Right:
+               scroll_right ();
+               return true;
+
+       default:
+               break;
+       }
+
        return key_press_focus_accelerator_handler (*this, ev);
 }
+
+bool
+Mixer_UI::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;
+}
index 1c5ecda8505a6e6e6924ea644a73622dbe9391b6..809e7a759c60fac1f3cd6ffaa5e556c9476891c6 100644 (file)
@@ -113,12 +113,15 @@ class Mixer_UI : public Gtk::Window
        void get_window_pos_and_size ();
 
        bool on_key_press_event (GdkEventKey*);
+       bool on_scroll_event (GdkEventScroll*);
 
        void pane_allocation_handler (Gtk::Allocation&, Gtk::Paned*);
        
        list<MixerStrip *> strips;
 
        bool strip_scroller_button_release (GdkEventButton*);
+       void scroll_left ();
+       void scroll_right ();
 
        void add_strip (ARDOUR::Session::RouteList&);
        void remove_strip (MixerStrip *);