From bc8aeb04259ef711498abfe66ff28ba623477350 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Mon, 13 Sep 2010 19:46:28 +0000 Subject: [PATCH] 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 --- gtk2_ardour/editor_drag.cc | 46 ++++++++++++++++++++++++++----------- gtk2_ardour/editor_drag.h | 1 + gtk2_ardour/editor_mouse.cc | 3 +++ 3 files changed, 37 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 diff --git a/gtk2_ardour/editor_drag.h b/gtk2_ardour/editor_drag.h index 80ffbb927c..4e8a703c2d 100644 --- a/gtk2_ardour/editor_drag.h +++ b/gtk2_ardour/editor_drag.h @@ -398,6 +398,7 @@ public: private: MidiTimeAxisView* _view; boost::shared_ptr _region; + void add_region (); }; /** Drags to resize MIDI notes */ diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc index 85235ace4d..486b1af5e8 100644 --- a/gtk2_ardour/editor_mouse.cc +++ b/gtk2_ardour/editor_mouse.cc @@ -682,6 +682,9 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT return true; case StreamItem: + cerr << "press on stream item, internal? " << internal_editing() << " MIDI ? " + << dynamic_cast(clicked_axisview) + << endl; if (internal_editing()) { if (dynamic_cast (clicked_axisview)) { _drags->set (new RegionCreateDrag (this, item, clicked_axisview), event); -- 2.30.2