when dragging on the canvas, use x,y pointer coordinates to decide if motion has occured.

Using _last_pointer_frame breaks when dragging to the left of the canvas, because we clamp
the value of the frame to >= 0. Motion would step once the pointer crossed the left edge
of the canvas because the frame value would always be zero.

This is not a problem when using the pointer x,y values which end up appropriately negative
under all conditions.
This commit is contained in:
Paul Davis 2014-11-24 21:58:56 +02:00
parent 78218e8c07
commit d953f1ce0e
2 changed files with 9 additions and 1 deletions

View File

@ -338,6 +338,12 @@ Drag::adjusted_current_frame (GdkEvent const * event, bool snap) const
return adjusted_frame (_drags->current_pointer_frame (), event, snap);
}
double
Drag::current_pointer_x() const
{
return _drags->current_pointer_x ();
}
double
Drag::current_pointer_y () const
{
@ -353,7 +359,7 @@ Drag::motion_handler (GdkEvent* event, bool from_autoscroll)
{
/* check to see if we have moved in any way that matters since the last motion event */
if (_move_threshold_passed &&
(!x_movement_matters() || _last_pointer_frame == adjusted_current_frame (event)) &&
(!x_movement_matters() || _last_pointer_x == current_pointer_x ()) &&
(!y_movement_matters() || _last_pointer_y == current_pointer_y ()) ) {
return false;
}
@ -2604,6 +2610,7 @@ MeterMarkerDrag::motion (GdkEvent* event, bool first_move)
}
framepos_t const pf = adjusted_current_frame (event);
_marker->set_position (pf);
show_verbose_cursor_time (pf);
}

View File

@ -211,6 +211,7 @@ protected:
return _last_pointer_frame;
}
double current_pointer_x () const;
double current_pointer_y () const;
boost::shared_ptr<ARDOUR::Region> add_midi_region (MidiTimeAxisView*);