From bb91aaa5ecdf1ab4f5c4779db1ce5a6ee3cacbc9 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Wed, 7 Sep 2011 14:11:33 +0000 Subject: [PATCH] Increase threshold for zoom-by-horizontal movement; ignore movements to y positions outside the scroomer; round page size and value to prevent 'quivering' during drags. Should fix #4299. git-svn-id: svn://localhost/ardour2/branches/3.0@10063 d708f5d6-7413-0410-9779-e7cbd77b26cf --- libs/gtkmm2ext/scroomer.cc | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/libs/gtkmm2ext/scroomer.cc b/libs/gtkmm2ext/scroomer.cc index 85092379f4..dcef6eae33 100644 --- a/libs/gtkmm2ext/scroomer.cc +++ b/libs/gtkmm2ext/scroomer.cc @@ -74,6 +74,10 @@ Scroomer::on_motion_notify_event (GdkEventMotion* ev) return true; } + if (ev->y < 0 || ev->y > get_height ()) { + return true; + } + grab_y = ev->y; if (ev->state & Keyboard::PrimaryModifier) { @@ -138,10 +142,11 @@ Scroomer::on_motion_notify_event (GdkEventMotion* ev) /* Then we handle zoom, which is dragging horizontally. We zoom around the area that is * the current y pointer value, not from the area that was the start of the drag. - * the point of zoom must have the same + * We don't start doing zoom until we are at least one scroomer width outside the scroomer's + * area. */ - if (ev->x > get_width()) { + if (ev->x > (get_width() * 2)) { zoom = ev->x - get_width(); double higher = unzoomed_val + unzoomed_page - half_min_page - val_at_pointer; @@ -194,9 +199,10 @@ Scroomer::on_motion_notify_event (GdkEventMotion* ev) val = unzoomed_val; page = unzoomed_page; } - - adj.set_page_size(page); - adj.set_value(val); + + /* Round these values to stop the scroomer handlers quivering about during drags */ + adj.set_page_size (rint (page)); + adj.set_value (rint (val)); adj.value_changed(); return true;