diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2011-07-07 16:49:10 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2011-07-07 16:49:10 +0000 |
commit | e6a515578ef78bb5ff21ae83dc78613aa1bc739c (patch) | |
tree | c5c61a76409dfd7e992e9e5d47abd97799eb8ad8 | |
parent | 5946e84fc50e506e7b203a80051d6413184107af (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.cc | 30 |
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); |