summaryrefslogtreecommitdiff
path: root/gtk2_ardour/editor_drag.h
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2010-12-20 03:42:59 +0000
committerCarl Hetherington <carl@carlh.net>2010-12-20 03:42:59 +0000
commit570ed69d2a791486a907b62ee2336a3953a7a1c0 (patch)
treeca759d0dfc198a81fbd4bb544febffe7b2039138 /gtk2_ardour/editor_drag.h
parented0deee74775ff2b7830f7461c90fc6423b8520e (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.h45
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;