X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Feditor_drag.h;h=6267956ed7774a193c4ed3cd3ba5aa2c9a2afdb2;hb=8b5f990267622100b3a1a7ff6fa346282aca4dda;hp=c6679af065f748d3819f068167240207c90a1a46;hpb=f2e542afe7de8487eafeb38d9e5f10724840ce31;p=ardour.git diff --git a/gtk2_ardour/editor_drag.h b/gtk2_ardour/editor_drag.h index c6679af065..6267956ed7 100644 --- a/gtk2_ardour/editor_drag.h +++ b/gtk2_ardour/editor_drag.h @@ -242,8 +242,9 @@ private: class RegionDrag; /** Container for details about a region being dragged */ -struct DraggingView +class DraggingView { +public: DraggingView (RegionView *, RegionDrag *); RegionView* view; ///< the view @@ -310,7 +311,7 @@ public: protected: - double compute_x_delta (GdkEvent const *, ARDOUR::framecnt_t *); + double compute_x_delta (GdkEvent const *, ARDOUR::framepos_t *); bool y_movement_allowed (int, double) const; bool _brushing; @@ -504,19 +505,42 @@ private: double _cumulative_dx; }; -/** Drag of region gain */ -class RegionGainDrag : public Drag +/** Container for details about audio regions being dragged along with video */ +class AVDraggingView { public: - RegionGainDrag (Editor *, ArdourCanvas::Item *); + AVDraggingView (RegionView *); + + RegionView* view; ///< the view + framepos_t initial_position; ///< initial position of the region +}; + +/** Drag of video offset */ +class VideoTimeLineDrag : public Drag +{ +public: + VideoTimeLineDrag (Editor *e, ArdourCanvas::Item *i); void motion (GdkEvent *, bool); void finished (GdkEvent *, bool); - bool active (Editing::MouseMode m) { - return (m == Editing::MouseGain); + void start_grab (GdkEvent *, Gdk::Cursor* c = 0); + + bool y_movement_matters () const { + return false; + } + + bool allow_vertical_autoscroll () const { + return false; } void aborted (bool); + +protected: + std::list _views; ///< information about all audio that are being dragged along + +private: + ARDOUR::frameoffset_t _startdrag_video_offset; + ARDOUR::frameoffset_t _max_backwards_drag; }; /** Drag to trim region(s) */ @@ -529,7 +553,7 @@ public: ContentsTrim, }; - TrimDrag (Editor *, ArdourCanvas::Item *, RegionView*, std::list const &); + TrimDrag (Editor *, ArdourCanvas::Item *, RegionView*, std::list const &, bool preserve_fade_anchor = false); void start_grab (GdkEvent *, Gdk::Cursor* c = 0); void motion (GdkEvent *, bool); @@ -545,6 +569,8 @@ public: private: Operation _operation; + + bool _preserve_fade_anchor; }; /** Meter marker drag */ @@ -694,7 +720,16 @@ private: void update_item (ARDOUR::Location *); Marker* _marker; ///< marker being dragged - std::list _copied_locations; + + struct CopiedLocationMarkerInfo { + ARDOUR::Location* location; + std::vector markers; + bool move_both; + CopiedLocationMarkerInfo (ARDOUR::Location* l, Marker* m); + }; + + typedef std::list CopiedLocationInfo; + CopiedLocationInfo _copied_locations; ArdourCanvas::Points _points; }; @@ -718,6 +753,8 @@ private: double _fixed_grab_y; double _cumulative_x_drag; double _cumulative_y_drag; + bool _pushing; + uint32_t _final_index; static double _zero_gain_fraction; }; @@ -874,7 +911,8 @@ public: CreateSelection, SelectionStartTrim, SelectionEndTrim, - SelectionMove + SelectionMove, + SelectionExtend }; SelectionDrag (Editor *, ArdourCanvas::Item *, Operation); @@ -888,10 +926,14 @@ public: private: Operation _operation; - bool _copy; + bool _add; + bool _extend; int _original_pointer_time_axis; int _last_pointer_time_axis; std::list _added_time_axes; + bool _time_selection_at_start; + framepos_t start_at_start; + framepos_t end_at_start; }; /** Range marker drag */ @@ -946,11 +988,14 @@ private: bool _zoom_out; }; -/** Drag of a range of automation data, changing value but not position */ +/** Drag of a range of automation data (either on an automation track or region gain), + * changing value but not position. + */ class AutomationRangeDrag : public Drag { public: - AutomationRangeDrag (Editor *, ArdourCanvas::Item *, std::list const &); + AutomationRangeDrag (Editor *, AutomationTimeAxisView *, std::list const &); + AutomationRangeDrag (Editor *, AudioRegionView *, std::list const &); void start_grab (GdkEvent *, Gdk::Cursor* c = 0); void motion (GdkEvent *, bool); @@ -961,9 +1006,15 @@ public: return false; } + bool active (Editing::MouseMode) { + return true; + } + private: + void setup (std::list > const &); + double y_fraction (boost::shared_ptr, double global_y_position) const; + std::list _ranges; - AutomationTimeAxisView* _atav; /** A line that is part of the drag */ struct Line { @@ -971,12 +1022,38 @@ private: std::list points; ///< points to drag on the line std::pair range; ///< the range of all points on the line, in session frames XMLNode* state; ///< the XML state node before the drag + double original_fraction; ///< initial y-fraction before the drag }; std::list _lines; - + double y_origin; bool _nothing_to_drag; }; +/** Drag of one edge of an xfade + */ +class CrossfadeEdgeDrag : public Drag +{ + public: + CrossfadeEdgeDrag (Editor*, AudioRegionView*, ArdourCanvas::Item*, bool start); + + void start_grab (GdkEvent*, Gdk::Cursor* c = 0); + void motion (GdkEvent*, bool); + void finished (GdkEvent*, bool); + void aborted (bool); + + bool y_movement_matters () const { + return false; + } + + virtual std::pair move_threshold () const { + return std::make_pair (4, 4); + } + + private: + AudioRegionView* arv; + bool start; +}; + #endif /* __gtk2_ardour_editor_drag_h_ */