From c88716665a62399efa6278b5eaa254434a77a305 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Sat, 2 Jan 2010 02:10:49 +0000 Subject: [PATCH] Fix confusion between model and view points when dragging ranges. Clamp both top and bottom when dragging vertically. Fix some wacky formatting. git-svn-id: svn://localhost/ardour2/branches/3.0@6436 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/automation_line.cc | 12 +++++++++--- gtk2_ardour/editor_drag.cc | 11 ++++------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/gtk2_ardour/automation_line.cc b/gtk2_ardour/automation_line.cc index ac50ac44db..7286b20bdf 100644 --- a/gtk2_ardour/automation_line.cc +++ b/gtk2_ardour/automation_line.cc @@ -770,12 +770,17 @@ AutomationLine::drag_motion (nframes_t x, float fraction, bool with_push) double dy = fraction - _last_drag_fraction; _last_drag_fraction = fraction; - /* clamp y so that the "lowest" point hits the bottom but goes no further */ + /* clamp y so that the "lowest" point hits the bottom but goes no further + and similarly with the "highest" and the top + */ for (list::iterator i = _drag_points.begin(); i != _drag_points.end(); ++i) { double const y = ((_height - (*i)->get_y()) / _height) + dy; if (y < 0) { dy -= y; } + if (y > 1) { + dy -= (y - 1); + } } for (list::iterator i = _drag_points.begin(); i != _drag_points.end(); ++i) { @@ -1072,8 +1077,9 @@ AutomationLine::set_selected_points (PointSelection& points) } -void AutomationLine::set_colors() { - set_line_color( ARDOUR_UI::config()->canvasvar_AutomationLine.get() ); +void AutomationLine::set_colors() +{ + set_line_color (ARDOUR_UI::config()->canvasvar_AutomationLine.get()); for (vector::iterator i = control_points.begin(); i != control_points.end(); ++i) { (*i)->show_color (false, !points_visible); } diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc index 5920e08afa..ca2468cd2c 100644 --- a/gtk2_ardour/editor_drag.cc +++ b/gtk2_ardour/editor_drag.cc @@ -3577,21 +3577,18 @@ AutomationRangeDrag::start_grab (GdkEvent* event, Gdk::Cursor* cursor) } uint32_t const N = _line->npoints (); - AutomationList::const_iterator j = the_list->begin (); for (uint32_t i = 0; i < N; ++i) { ControlPoint* p = _line->nth (i); - list::const_iterator k = _ranges.begin (); - while (k != _ranges.end() && (k->start >= (*j)->when || k->end <= (*j)->when)) { - ++k; + list::const_iterator j = _ranges.begin (); + while (j != _ranges.end() && (j->start >= (*p->model())->when || j->end <= (*p->model())->when)) { + ++j; } - if (k != _ranges.end()) { + if (j != _ranges.end()) { points.push_back (p); } - - ++j; } }