diff options
author | Carl Hetherington <carl@carlh.net> | 2010-08-20 12:01:13 +0000 |
---|---|---|
committer | Carl Hetherington <carl@carlh.net> | 2010-08-20 12:01:13 +0000 |
commit | 812e95da016e334b8856b24aba14db809da3f774 (patch) | |
tree | d23003eb133c335bcb7e4de78adc82be58050e54 /gtk2_ardour/editor_drag.cc | |
parent | 70597dbc0e6fe7222d51c9d40f59510171c8e2f0 (diff) |
Allow drag when creating a MIDI region. Fixes #3363.
git-svn-id: svn://localhost/ardour2/branches/3.0@7657 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/editor_drag.cc')
-rw-r--r-- | gtk2_ardour/editor_drag.cc | 43 |
1 files changed, 16 insertions, 27 deletions
diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc index 09d43fe300..d4b918adf2 100644 --- a/gtk2_ardour/editor_drag.cc +++ b/gtk2_ardour/editor_drag.cc @@ -1523,51 +1523,40 @@ RegionSpliceDrag::aborted () RegionCreateDrag::RegionCreateDrag (Editor* e, ArdourCanvas::Item* i, TimeAxisView* v) : Drag (e, i), - _view (v) + _view (dynamic_cast<MidiTimeAxisView*> (v)) { - + assert (_view); } void -RegionCreateDrag::start_grab (GdkEvent* event, Gdk::Cursor *) -{ - _dest_trackview = _view; - - Drag::start_grab (event); -} - - -void -RegionCreateDrag::motion (GdkEvent* /*event*/, bool first_move) +RegionCreateDrag::motion (GdkEvent *, bool first_move) { if (first_move) { - // TODO: create region-create-drag region view here - } + /* 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); + } else { + if (_drags->current_pointer_frame() < grab_frame()) { + _region->set_position (_drags->current_pointer_frame(), this); + } - // TODO: resize region-create-drag region view here + /* again, don't use a zero-length region (see above) */ + framecnt_t const len = abs (_drags->current_pointer_frame() - grab_frame ()); + _region->set_length (len < 1 ? 1 : len, this); + } } void RegionCreateDrag::finished (GdkEvent* event, bool movement_occurred) { - MidiTimeAxisView* mtv = dynamic_cast<MidiTimeAxisView*> (_dest_trackview); - - if (!mtv) { - return; - } - - if (!movement_occurred) { - mtv->add_region (grab_frame ()); - } else { - motion (event, false); - // TODO: create region-create-drag region here + if (movement_occurred) { + _editor->commit_reversible_command (); } } void RegionCreateDrag::aborted () { - /* XXX: TODO */ + /* XXX */ } NoteResizeDrag::NoteResizeDrag (Editor* e, ArdourCanvas::Item* i) |