X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Feditor_drag.h;h=ae4191909ea9f03056bdad52e7082b9529cfcd1f;hb=b637c2223f0d2bbe5eff1f10ad7b1ba0c5ccc86a;hp=c7c2f23b1a6f36c142bba9b1c1226a65019a3866;hpb=d39d4c1c118960fe482caab9a2c10ca06d1aafa6;p=ardour.git diff --git a/gtk2_ardour/editor_drag.h b/gtk2_ardour/editor_drag.h index c7c2f23b1a..ae4191909e 100644 --- a/gtk2_ardour/editor_drag.h +++ b/gtk2_ardour/editor_drag.h @@ -29,6 +29,7 @@ #include "cursor_context.h" #include "editor_items.h" +#include "mouse_cursors.h" namespace ARDOUR { class Location; @@ -58,8 +59,8 @@ public: void abort (); void add (Drag *); - void set (Drag *, GdkEvent *, Gdk::Cursor* c = 0); - void start_grab (GdkEvent *, Gdk::Cursor* c = 0); + void set (Drag *, GdkEvent *, Gdk::Cursor* c = MouseCursors::invalid_cursor()); + void start_grab (GdkEvent *, Gdk::Cursor* c = MouseCursors::invalid_cursor()); bool end_grab (GdkEvent *); bool have_item (ArdourCanvas::Item *) const; @@ -177,6 +178,10 @@ public: return true; } + bool initially_vertical() const { + return _initially_vertical; + } + /** Set up the _pointer_frame_offset */ virtual void setup_pointer_frame_offset () { _pointer_frame_offset = 0; @@ -233,6 +238,8 @@ protected: private: bool _trackview_only; ///< true if pointer y value should always be relative to the top of the trackview group bool _move_threshold_passed; ///< true if the move threshold has been passed, otherwise false + bool _starting_point_passed; ///< true if we called move () with first_move flag, otherwise false + bool _initially_vertical; ///< true if after move threshold is passed we appear to be moving vertically; undefined before that 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; ///< y of the grab start position, possibly adjusted if _trackview_only is true @@ -285,6 +292,7 @@ protected: /** a list of the non-hidden TimeAxisViews sorted by editor order key */ std::vector _time_axis_views; int find_time_axis_view (TimeAxisView *) const; + int apply_track_delta (const int start, const int delta, const int skip) const; int _visible_y_low; int _visible_y_high; @@ -319,13 +327,14 @@ public: protected: double compute_x_delta (GdkEvent const *, ARDOUR::framepos_t *); - virtual bool y_movement_allowed (int, double) const; + virtual bool y_movement_allowed (int, double, int skip_invisible = 0) const; bool _brushing; ARDOUR::framepos_t _last_frame_position; ///< last position of the thing being dragged double _total_x_delta; int _last_pointer_time_axis_view; double _last_pointer_layer; + bool _single_axis; }; @@ -428,7 +437,7 @@ public: void finished (GdkEvent *, bool); void aborted (bool); protected: - bool y_movement_allowed (int delta_track, double delta_layer) const; + bool y_movement_allowed (int delta_track, double delta_layer, int skip_invisible = 0) const; private: TimeAxisView *prev_tav; // where regions were most recently dragged from @@ -993,7 +1002,8 @@ public: }; RangeMarkerBarDrag (Editor *, ArdourCanvas::Item *, Operation); - + ~RangeMarkerBarDrag (); + void start_grab (GdkEvent *, Gdk::Cursor* c = 0); void motion (GdkEvent *, bool); void finished (GdkEvent *, bool);