summaryrefslogtreecommitdiff
path: root/gtk2_ardour/editor_drag.cc
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2010-08-20 12:01:13 +0000
committerCarl Hetherington <carl@carlh.net>2010-08-20 12:01:13 +0000
commit812e95da016e334b8856b24aba14db809da3f774 (patch)
treed23003eb133c335bcb7e4de78adc82be58050e54 /gtk2_ardour/editor_drag.cc
parent70597dbc0e6fe7222d51c9d40f59510171c8e2f0 (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.cc43
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)