~DragManager ();
bool motion_handler (GdkEvent *, bool);
+ bool window_motion_handler (GdkEvent *, bool);
void abort ();
void add (Drag *);
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;
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;
}
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
};
class Drag
{
public:
- Drag (Editor *, ArdourCanvas::Item *);
+ Drag (Editor *, ArdourCanvas::Item *);
virtual ~Drag () {}
void set_manager (DragManager* m) {
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.
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
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;
};
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;
double _cumulative_dx;
};
-#ifdef WITH_VIDEOTIMELINE
/** Container for details about audio regions being dragged along with video */
class AVDraggingView
{
/** Drag of video offset */
class VideoTimeLineDrag : public Drag
- //TODO , public sigc::trackable
{
public:
VideoTimeLineDrag (Editor *e, ArdourCanvas::Item *i);
ARDOUR::frameoffset_t _startdrag_video_offset;
ARDOUR::frameoffset_t _max_backwards_drag;
};
-#endif
/** Drag to trim region(s) */
class TrimDrag : public RegionDrag
Operation _operation;
bool _preserve_fade_anchor;
+ bool _jump_position_when_done;
};
/** Meter marker drag */
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);
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
};
class MarkerDrag : public Drag
{
public:
- MarkerDrag (Editor *, ArdourCanvas::Item *);
+ MarkerDrag (Editor *, ArdourCanvas::Item *);
~MarkerDrag ();
void start_grab (GdkEvent *, Gdk::Cursor* c = 0);