[gtk+/gtk-3-14] zoom scrolling: avoid 'jumping back'



commit 1c395c900e262b413426fd18d6fdd7f5942f12e3
Author: Matthias Clasen <mclasen redhat com>
Date:   Mon Feb 23 06:42:17 2015 -0500

    zoom scrolling: avoid 'jumping back'
    
    We record the starting position on button press, but only
    start the zoom mode when the long press timeout kicks in.
    Depending on circumstances, this can cause a noticable jump.
    
    Avoid this by resetting the recorded starting position after
    the long press timeout. Suggested by Sebastian Keller.

 gtk/gtkrange.c |   20 ++++++++++++++++++--
 1 files changed, 18 insertions(+), 2 deletions(-)
---
diff --git a/gtk/gtkrange.c b/gtk/gtkrange.c
index 496f9c1..fbb869c 100644
--- a/gtk/gtkrange.c
+++ b/gtk/gtkrange.c
@@ -2453,8 +2453,24 @@ gtk_range_long_press_gesture_pressed (GtkGestureLongPress *gesture,
                                       gdouble              y,
                                       GtkRange            *range)
 {
-  update_zoom_state (range, TRUE);
-  range->priv->zoom_set = TRUE;
+  GtkRangePrivate *priv = range->priv;
+
+  if (!priv->zoom)
+    {
+      if (priv->orientation == GTK_ORIENTATION_VERTICAL)
+        {
+          priv->slide_initial_slider_position = priv->slider.y;
+          priv->slide_initial_coordinate_delta = y - priv->slider.y;
+        }
+      else
+        {
+          priv->slide_initial_slider_position = priv->slider.x;
+          priv->slide_initial_coordinate_delta = x - priv->slider.x;
+        }
+
+      update_zoom_state (range, TRUE);
+      range->priv->zoom_set = TRUE;
+    }
 }
 
 static void


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]