mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-07 23:35:03 +01:00
detect if drags appear to be vertical or horizontal as we cross the move threshold
Conflicts: gtk2_ardour/editor_drag.cc gtk2_ardour/editor_drag.h
This commit is contained in:
parent
eb45b3baaa
commit
994dff91a2
2 changed files with 24 additions and 6 deletions
|
|
@ -220,7 +220,8 @@ Drag::Drag (Editor* e, ArdourCanvas::Item* i, bool trackview_only)
|
||||||
, _pointer_frame_offset (0)
|
, _pointer_frame_offset (0)
|
||||||
, _trackview_only (trackview_only)
|
, _trackview_only (trackview_only)
|
||||||
, _move_threshold_passed (false)
|
, _move_threshold_passed (false)
|
||||||
, _starting_point_passed (false)
|
, _starting_point_passed (false)
|
||||||
|
, _initially_vertical (false)
|
||||||
, _was_double_click (false)
|
, _was_double_click (false)
|
||||||
, _raw_grab_frame (0)
|
, _raw_grab_frame (0)
|
||||||
, _grab_frame (0)
|
, _grab_frame (0)
|
||||||
|
|
@ -383,14 +384,29 @@ Drag::motion_handler (GdkEvent* event, bool from_autoscroll)
|
||||||
if (active (_editor->mouse_mode) && _move_threshold_passed) {
|
if (active (_editor->mouse_mode) && _move_threshold_passed) {
|
||||||
|
|
||||||
if (event->motion.state & Gdk::BUTTON1_MASK || event->motion.state & Gdk::BUTTON2_MASK) {
|
if (event->motion.state & Gdk::BUTTON1_MASK || event->motion.state & Gdk::BUTTON2_MASK) {
|
||||||
|
|
||||||
|
if (old_move_threshold_passed != _move_threshold_passed) {
|
||||||
|
|
||||||
|
/* just changed */
|
||||||
|
|
||||||
|
if (fabs (current_pointer_y() - _grab_y) > fabs (current_pointer_x() - _grab_x)) {
|
||||||
|
_initially_vertical = true;
|
||||||
|
} else {
|
||||||
|
_initially_vertical = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
cerr << "IV = " << _initially_vertical << endl;
|
||||||
|
}
|
||||||
|
|
||||||
if (!from_autoscroll) {
|
if (!from_autoscroll) {
|
||||||
_editor->maybe_autoscroll (true, allow_vertical_autoscroll (), false);
|
_editor->maybe_autoscroll (true, allow_vertical_autoscroll (), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!_editor->autoscroll_active() || from_autoscroll) {
|
if (!_editor->autoscroll_active() || from_autoscroll) {
|
||||||
|
|
||||||
bool first_move = (_move_threshold_passed != old_move_threshold_passed) ||
|
|
||||||
from_autoscroll;
|
bool first_move = (_move_threshold_passed != old_move_threshold_passed) || from_autoscroll;
|
||||||
|
|
||||||
motion (event, first_move && !_starting_point_passed);
|
motion (event, first_move && !_starting_point_passed);
|
||||||
|
|
||||||
if (first_move && !_starting_point_passed) {
|
if (first_move && !_starting_point_passed) {
|
||||||
|
|
@ -1470,8 +1486,8 @@ RegionMotionDrag::aborted (bool)
|
||||||
* @param c true to make copies of the regions being moved, otherwise false.
|
* @param c true to make copies of the regions being moved, otherwise false.
|
||||||
*/
|
*/
|
||||||
RegionMoveDrag::RegionMoveDrag (Editor* e, ArdourCanvas::Item* i, RegionView* p, list<RegionView*> const & v, bool b, bool c)
|
RegionMoveDrag::RegionMoveDrag (Editor* e, ArdourCanvas::Item* i, RegionView* p, list<RegionView*> const & v, bool b, bool c)
|
||||||
: RegionMotionDrag (e, i, p, v, b),
|
: RegionMotionDrag (e, i, p, v, b)
|
||||||
_copy (c)
|
, _copy (c)
|
||||||
{
|
{
|
||||||
DEBUG_TRACE (DEBUG::Drags, "New RegionMoveDrag\n");
|
DEBUG_TRACE (DEBUG::Drags, "New RegionMoveDrag\n");
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -236,6 +236,8 @@ private:
|
||||||
bool _move_threshold_passed; ///< true if the move threshold has been passed, otherwise false
|
bool _move_threshold_passed; ///< true if the move threshold has been passed, otherwise false
|
||||||
bool _starting_point_passed; ///< true if we called move () with first_move flag, otherwise false
|
bool _starting_point_passed; ///< true if we called move () with first_move flag, otherwise false
|
||||||
bool _was_double_click; ///< true if drag initiated by a double click event
|
bool _was_double_click; ///< true if drag initiated by a double click event
|
||||||
|
bool _initially_vertical; ///< true if after move threshold is passed we appear to be moving vertically; undefined before that
|
||||||
|
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_x; ///< trackview x of the grab start position
|
||||||
double _grab_y; ///< y of the grab start position, possibly adjusted if _trackview_only is true
|
double _grab_y; ///< y of the grab start position, possibly adjusted if _trackview_only is true
|
||||||
double _last_pointer_x; ///< trackview x of the pointer last time a motion occurred
|
double _last_pointer_x; ///< trackview x of the pointer last time a motion occurred
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue