From 25655e1a6dae74a10707ebc8faa7b2bd0ab16210 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Wed, 9 May 2012 23:04:18 +0000 Subject: [PATCH] skeleton for crossfade edge dragging git-svn-id: svn://localhost/ardour2/branches/3.0@12235 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/editor_canvas_events.cc | 8 ++----- gtk2_ardour/editor_drag.cc | 37 +++++++++++++++++++++++++++++ gtk2_ardour/editor_drag.h | 22 +++++++++++++++++ gtk2_ardour/editor_mouse.cc | 8 +++++++ 4 files changed, 69 insertions(+), 6 deletions(-) diff --git a/gtk2_ardour/editor_canvas_events.cc b/gtk2_ardour/editor_canvas_events.cc index a123ea1e9c..77bc5ec27b 100644 --- a/gtk2_ardour/editor_canvas_events.cc +++ b/gtk2_ardour/editor_canvas_events.cc @@ -377,9 +377,7 @@ Editor::canvas_start_xfade_event (GdkEvent *event, ArdourCanvas::Item* item, Aud } - /* proxy for the regionview */ - - return canvas_region_view_event (event, rv->get_canvas_group(), rv); + return typed_event (item, event, StartCrossFadeItem); } bool @@ -411,9 +409,7 @@ Editor::canvas_end_xfade_event (GdkEvent *event, ArdourCanvas::Item* item, Audio } - /* proxy for the regionview */ - - return canvas_region_view_event (event, rv->get_canvas_group(), rv); + return typed_event (item, event, EndCrossFadeItem); } bool diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc index 66bb09980f..2489114982 100644 --- a/gtk2_ardour/editor_drag.cc +++ b/gtk2_ardour/editor_drag.cc @@ -4551,3 +4551,40 @@ NoteCreateDrag::aborted (bool) { } + +/*------------*/ + +CrossfadeEdgeDrag::CrossfadeEdgeDrag (Editor* e, AudioRegionView* rv, ArdourCanvas::Item* i, bool start_yn) + : Drag (e, i) + , arv (rv) + , start (start_yn) +{ + cerr << "new xfade drag\n"; +} + +CrossfadeEdgeDrag::~CrossfadeEdgeDrag () +{ + cerr << "destory xfade drag\n"; +} + +void +CrossfadeEdgeDrag::start_grab (GdkEvent* event, Gdk::Cursor *cursor) +{ + Drag::start_grab (event, cursor); +} + +void +CrossfadeEdgeDrag::motion (GdkEvent*, bool) +{ +} + +void +CrossfadeEdgeDrag::finished (GdkEvent*, bool) +{ +} + +void +CrossfadeEdgeDrag::aborted (bool) +{ +} + diff --git a/gtk2_ardour/editor_drag.h b/gtk2_ardour/editor_drag.h index 0d457a39d9..3c33e4de48 100644 --- a/gtk2_ardour/editor_drag.h +++ b/gtk2_ardour/editor_drag.h @@ -972,5 +972,27 @@ private: bool _nothing_to_drag; }; +/** Drag of one edge of an xfade + */ +class CrossfadeEdgeDrag : public Drag +{ + public: + CrossfadeEdgeDrag (Editor*, AudioRegionView*, ArdourCanvas::Item*, bool start); + ~CrossfadeEdgeDrag (); + + void start_grab (GdkEvent*, Gdk::Cursor* c = 0); + void motion (GdkEvent*, bool); + void finished (GdkEvent*, bool); + void aborted (bool); + + bool x_movement_matters () const { + return false; + } + + private: + AudioRegionView* arv; + bool start; +}; + #endif /* __gtk2_ardour_editor_drag_h_ */ diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc index 351ed82e64..a36e4a5df6 100644 --- a/gtk2_ardour/editor_mouse.cc +++ b/gtk2_ardour/editor_mouse.cc @@ -935,6 +935,14 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT return true; } + case StartCrossFadeItem: + _drags->set (new CrossfadeEdgeDrag (this, reinterpret_cast(item->get_data("regionview")), item, true), event, 0); + break; + + case EndCrossFadeItem: + _drags->set (new CrossfadeEdgeDrag (this, reinterpret_cast(item->get_data("regionview")), item, true), event, 0); + break; + case FeatureLineItem: { if (Keyboard::modifier_state_contains (event->button.state, Keyboard::TertiaryModifier)) {