disable snap fades to 'other' region (for now)
[ardour.git] / gtk2_ardour / editor_drag.h
index 3cfb38d02029d38e6e4569a9298be8b822f90a35..259dc50778c697a040e6ea8b2c8bdd2b87f4b4f1 100644 (file)
@@ -54,6 +54,7 @@ public:
        ~DragManager ();
 
        bool motion_handler (GdkEvent *, bool);
+       bool window_motion_handler (GdkEvent *, bool);
 
        void abort ();
        void add (Drag *);
@@ -62,6 +63,8 @@ public:
        bool end_grab (GdkEvent *);
        bool have_item (ArdourCanvas::Item *) const;
 
+        void mark_double_click ();
+
        /** @return true if an end drag or abort is in progress */
        bool ending () const {
                return _ending;
@@ -71,12 +74,12 @@ public:
                return !_drags.empty ();
        }
 
-       /** @return current pointer x position in trackview coordinates */
+       /** @return current pointer x position in canvas coordinates */
        double current_pointer_x () const {
                return _current_pointer_x;
        }
 
-       /** @return current pointer y position in trackview coordinates */
+       /** @return current pointer y position in canvas coordinates */
        double current_pointer_y () const {
                return _current_pointer_y;
        }
@@ -90,8 +93,8 @@ private:
        Editor* _editor;
        std::list<Drag*> _drags;
        bool _ending; ///< true if end_grab or abort is in progress, otherwise false
-       double _current_pointer_x; ///< trackview x of the current pointer
-       double _current_pointer_y; ///< trackview y of the current pointer
+       double _current_pointer_x; ///< canvas-coordinate space x of the current pointer
+       double _current_pointer_y; ///< canvas-coordinate space y of the current pointer
        ARDOUR::framepos_t _current_pointer_frame; ///< frame that the pointer is now at
        bool _old_follow_playhead; ///< state of Editor::follow_playhead() before the drags started
 };
@@ -100,7 +103,7 @@ private:
 class Drag
 {
 public:
-       Drag (Editor *, ArdourCanvas::Item *);
+        Drag (Editor *, ArdourCanvas::Item *);
        virtual ~Drag () {}
 
        void set_manager (DragManager* m) {
@@ -119,6 +122,9 @@ public:
        ARDOUR::framepos_t adjusted_frame (ARDOUR::framepos_t, GdkEvent const *, bool snap = true) const;
        ARDOUR::framepos_t adjusted_current_frame (GdkEvent const *, bool snap = true) const;
 
+        bool was_double_click() const { return _was_double_click; }
+        void set_double_click (bool yn) { _was_double_click = yn; }
+
        /** Called to start a grab of an item.
         *  @param e Event that caused the grab to start.
         *  @param c Cursor to use, or 0.
@@ -224,6 +230,7 @@ protected:
 private:
 
        bool _move_threshold_passed; ///< true if the move threshold has been passed, otherwise false
+        bool _was_double_click; ///< true if drag initiated by a double click event
        double _grab_x; ///< trackview x of the grab start position
        double _grab_y; ///< trackview y of the grab start position
        double _last_pointer_x; ///< trackview x of the pointer last time a motion occurred
@@ -254,6 +261,7 @@ public:
        double initial_y; ///< the initial y position of the view before any reparenting
        framepos_t initial_position; ///< initial position of the region
        framepos_t initial_end; ///< initial end position of the region
+       framepos_t anchored_fade_length; ///< fade_length when anchored during drag
        boost::shared_ptr<ARDOUR::Playlist> initial_playlist;
 };
 
@@ -371,6 +379,7 @@ private:
        void add_stateful_diff_commands_for_playlists (PlaylistSet const &);
 
        void collect_new_region_view (RegionView *);
+       RouteTimeAxisView* create_destination_time_axis (boost::shared_ptr<ARDOUR::Region>);
 
        bool _copy;
        RegionView* _new_region_view;
@@ -499,7 +508,6 @@ private:
        double _cumulative_dx;
 };
 
-#ifdef WITH_VIDEOTIMELINE
 /** Container for details about audio regions being dragged along with video */
 class AVDraggingView
 {
@@ -512,7 +520,6 @@ public:
 
 /** Drag of video offset */
 class VideoTimeLineDrag : public Drag
-       //TODO , public sigc::trackable
 {
 public:
        VideoTimeLineDrag (Editor *e, ArdourCanvas::Item *i);
@@ -538,7 +545,6 @@ private:
        ARDOUR::frameoffset_t _startdrag_video_offset;
        ARDOUR::frameoffset_t _max_backwards_drag;
 };
-#endif
 
 /** Drag to trim region(s) */
 class TrimDrag : public RegionDrag
@@ -568,6 +574,7 @@ private:
        Operation _operation;
        
        bool _preserve_fade_anchor;
+       bool _jump_position_when_done;
 };
 
 /** Meter marker drag */
@@ -629,7 +636,7 @@ private:
 class CursorDrag : public Drag
 {
 public:
-       CursorDrag (Editor *, ArdourCanvas::Item *, bool);
+       CursorDrag (Editor *, EditorCursor&, bool);
 
        void start_grab (GdkEvent *, Gdk::Cursor* c = 0);
        void motion (GdkEvent *, bool);
@@ -651,6 +658,7 @@ public:
 private:
        void fake_locate (framepos_t);
 
+        EditorCursor& _cursor;
        bool _stop; ///< true to stop the transport on starting the drag, otherwise false
        double _grab_zoom; ///< editor frames per unit when our grab started
 };
@@ -695,7 +703,7 @@ public:
 class MarkerDrag : public Drag
 {
 public:
-       MarkerDrag (Editor *, ArdourCanvas::Item *);
+        MarkerDrag (Editor *, ArdourCanvas::Item *);
        ~MarkerDrag ();
 
        void start_grab (GdkEvent *, Gdk::Cursor* c = 0);