diff options
author | Carl Hetherington <carl@carlh.net> | 2010-12-20 03:42:59 +0000 |
---|---|---|
committer | Carl Hetherington <carl@carlh.net> | 2010-12-20 03:42:59 +0000 |
commit | 570ed69d2a791486a907b62ee2336a3953a7a1c0 (patch) | |
tree | ca759d0dfc198a81fbd4bb544febffe7b2039138 /gtk2_ardour/editor_drag.h | |
parent | ed0deee74775ff2b7830f7461c90fc6423b8520e (diff) |
Allow dragging of program change flags in MIDI regions.
git-svn-id: svn://localhost/ardour2/branches/3.0@8303 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/editor_drag.h')
-rw-r--r-- | gtk2_ardour/editor_drag.h | 45 |
1 files changed, 44 insertions, 1 deletions
diff --git a/gtk2_ardour/editor_drag.h b/gtk2_ardour/editor_drag.h index e0d3d91ee8..a3d3919fed 100644 --- a/gtk2_ardour/editor_drag.h +++ b/gtk2_ardour/editor_drag.h @@ -42,6 +42,7 @@ namespace PBD { namespace Gnome { namespace Canvas { class CanvasNoteEvent; + class CanvasProgramChange; } } @@ -175,6 +176,11 @@ public: return true; } + /** Set up the _pointer_frame_offset */ + virtual void setup_pointer_frame_offset () { + _pointer_frame_offset = 0; + } + protected: double grab_x () const { @@ -312,7 +318,6 @@ public: RegionMoveDrag (Editor *, ArdourCanvas::Item *, RegionView *, std::list<RegionView*> const &, bool, bool); virtual ~RegionMoveDrag () {} - virtual void start_grab (GdkEvent *, Gdk::Cursor *); void motion (GdkEvent *, bool); void finished (GdkEvent *, bool); void aborted (); @@ -325,6 +330,8 @@ public: return std::make_pair (4, 4); } + void setup_pointer_frame_offset (); + private: typedef std::set<boost::shared_ptr<ARDOUR::Playlist> > PlaylistSet; @@ -444,6 +451,28 @@ class NoteDrag : public Drag double _note_height; }; +/** Drag to move MIDI program changes */ +class ProgramChangeDrag : public Drag +{ +public: + ProgramChangeDrag (Editor *, ArdourCanvas::CanvasProgramChange *, MidiRegionView *); + + void motion (GdkEvent *, bool); + void finished (GdkEvent *, bool); + void aborted (); + + bool y_movement_matters () const { + return false; + } + + void setup_pointer_frame_offset (); + +private: + MidiRegionView* _region_view; + ArdourCanvas::CanvasProgramChange* _program_change; + double _cumulative_dx; +}; + /** Drag of region gain */ class RegionGainDrag : public Drag { @@ -504,6 +533,8 @@ public: bool y_movement_matters () const { return false; } + + void setup_pointer_frame_offset (); private: MeterMarker* _marker; @@ -529,6 +560,8 @@ public: return false; } + void setup_pointer_frame_offset (); + private: TempoMarker* _marker; bool _copy; @@ -558,6 +591,8 @@ public: return false; } + void setup_pointer_frame_offset (); + private: EditorCursor* _cursor; ///< cursor being dragged bool _stop; ///< true to stop the transport on starting the drag, otherwise false @@ -578,6 +613,8 @@ public: bool y_movement_matters () const { return false; } + + void setup_pointer_frame_offset (); }; /** Region fade-out drag */ @@ -594,6 +631,8 @@ public: bool y_movement_matters () const { return false; } + + void setup_pointer_frame_offset (); }; /** Marker drag */ @@ -615,6 +654,8 @@ public: bool y_movement_matters () const { return false; } + + void setup_pointer_frame_offset (); private: void update_item (ARDOUR::Location *); @@ -758,6 +799,8 @@ public: void finished (GdkEvent *, bool); void aborted (); + void setup_pointer_frame_offset (); + private: Operation _operation; bool _copy; |