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.