~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 _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
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);