summaryrefslogtreecommitdiff
path: root/gtk2_ardour/editor_drag.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2010-09-13 19:46:28 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2010-09-13 19:46:28 +0000
commitbc8aeb04259ef711498abfe66ff28ba623477350 (patch)
treeb04af170f8f08fafc8eb66d0bd68679d984788f2 /gtk2_ardour/editor_drag.cc
parent00438c9c7ffab85c899352de6c6017798aca6074 (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.cc46
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