diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2010-09-13 19:46:28 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2010-09-13 19:46:28 +0000 |
commit | bc8aeb04259ef711498abfe66ff28ba623477350 (patch) | |
tree | b04af170f8f08fafc8eb66d0bd68679d984788f2 /gtk2_ardour/editor_drag.cc | |
parent | 00438c9c7ffab85c899352de6c6017798aca6074 (diff) |
restore "add MIDI region on click in MIDI track" functionality
git-svn-id: svn://localhost/ardour2/branches/3.0@7768 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/editor_drag.cc')
-rw-r--r-- | gtk2_ardour/editor_drag.cc | 46 |
1 files changed, 33 insertions, 13 deletions
diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc index ae04ad3224..e3e2f3a519 100644 --- a/gtk2_ardour/editor_drag.cc +++ b/gtk2_ardour/editor_drag.cc @@ -1336,26 +1336,46 @@ void RegionCreateDrag::motion (GdkEvent* event, bool first_move) { if (first_move) { - /* don't use a zero-length region otherwise its region view will be hidden when it is created */ - _region = _view->add_region (grab_frame(), 1, false); + add_region(); } else { - framepos_t const f = adjusted_current_frame (event); - if (f < grab_frame()) { - _region->set_position (f, this); - } - - /* again, don't use a zero-length region (see above) */ - framecnt_t const len = abs (f - grab_frame ()); - _region->set_length (len < 1 ? 1 : len, this); - } + if (_region) { + framepos_t const f = adjusted_current_frame (event); + if (f < grab_frame()) { + _region->set_position (f, this); + } + + /* again, don't use a zero-length region (see above) */ + framecnt_t const len = abs (f - grab_frame ()); + _region->set_length (len < 1 ? 1 : len, this); + } + } } void RegionCreateDrag::finished (GdkEvent* event, bool movement_occurred) { - if (movement_occurred) { - _editor->commit_reversible_command (); + if (!movement_occurred) { + add_region (); } + + if (_region) { + _editor->commit_reversible_command (); + } +} + +void +RegionCreateDrag::add_region () +{ + if (_editor->session()) { + const TempoMap& map (_editor->session()->tempo_map()); + framecnt_t pos = grab_frame(); + const Meter& m = map.meter_at (pos); + /* not that the frame rate used here can be affected by pull up/down which + might be wrong. + */ + framecnt_t len = m.frames_per_bar (map.tempo_at (pos), _editor->session()->frame_rate()); + _region = _view->add_region (grab_frame(), len, false); + } } void |