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:
parent
78218e8c07
commit
d953f1ce0e
@ -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);
|
||||
}
|
||||
|
@ -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*);
|
||||
|
Loading…
Reference in New Issue
Block a user