meterbridge: handle shift+scroll

This commit is contained in:
Robin Gareus 2013-07-05 20:58:23 +02:00
parent da08f8b1c5
commit eb0f1d3123
2 changed files with 50 additions and 0 deletions

View 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)
{

View 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*);