summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2011-07-07 16:49:10 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2011-07-07 16:49:10 +0000
commite6a515578ef78bb5ff21ae83dc78613aa1bc739c (patch)
treec5c61a76409dfd7e992e9e5d47abd97799eb8ad8
parent5946e84fc50e506e7b203a80051d6413184107af (diff)
shuttle control: make scroll events step by precisely 1 of the current units
git-svn-id: svn://localhost/ardour2/branches/3.0@9801 d708f5d6-7413-0410-9779-e7cbd77b26cf
-rw-r--r--gtk2_ardour/shuttle_control.cc30
1 files changed, 26 insertions, 4 deletions
diff --git a/gtk2_ardour/shuttle_control.cc b/gtk2_ardour/shuttle_control.cc
index 24f7090498..dd7cd753e6 100644
--- a/gtk2_ardour/shuttle_control.cc
+++ b/gtk2_ardour/shuttle_control.cc
@@ -304,20 +304,42 @@ ShuttleControl::on_scroll_event (GdkEventScroll* ev)
return true;
}
+ bool semis = (Config->get_shuttle_units() == Semitones);
+
switch (ev->direction) {
case GDK_SCROLL_UP:
case GDK_SCROLL_RIGHT:
- shuttle_fract += 0.005;
+ if (semis) {
+ if (shuttle_fract == 0) {
+ shuttle_fract = semitones_as_fract (1, false);
+ } else {
+ bool rev;
+ int st = fract_as_semitones (shuttle_fract, rev);
+ shuttle_fract = semitones_as_fract (st + 1, rev);
+ }
+ } else {
+ shuttle_fract += 0.00125;
+ }
break;
case GDK_SCROLL_DOWN:
case GDK_SCROLL_LEFT:
- shuttle_fract -= 0.005;
+ if (semis) {
+ if (shuttle_fract == 0) {
+ shuttle_fract = semitones_as_fract (1, true);
+ } else {
+ bool rev;
+ int st = fract_as_semitones (shuttle_fract, rev);
+ shuttle_fract = semitones_as_fract (st - 1, rev);
+ }
+ } else {
+ shuttle_fract -= 0.00125;
+ }
break;
default:
return false;
}
-
- if (Config->get_shuttle_units() == Semitones) {
+
+ if (semis) {
float lower_side_of_dead_zone = semitones_as_fract (-24, true);
float upper_side_of_dead_zone = semitones_as_fract (-24, false);