[Goodies-commits] r3422 - ristretto/trunk/src

Stephan Arts stephan at xfce.org
Sun Oct 21 09:41:14 CEST 2007


Author: stephan
Date: 2007-10-21 07:41:14 +0000 (Sun, 21 Oct 2007)
New Revision: 3422

Modified:
   ristretto/trunk/src/picture_viewer.c
Log:
Improve motion of image a bit



Modified: ristretto/trunk/src/picture_viewer.c
===================================================================
--- ristretto/trunk/src/picture_viewer.c	2007-10-20 23:14:26 UTC (rev 3421)
+++ ristretto/trunk/src/picture_viewer.c	2007-10-21 07:41:14 UTC (rev 3422)
@@ -46,10 +46,17 @@
     {
         gdouble x;
         gdouble y;
+        gdouble current_x;
+        gdouble current_y;
         gint h_val;
         gint v_val;
         gint32 time;
+        gint idle_id;
     } motion;
+    struct
+    {
+        gint idle_id;
+    } zoom;
     GtkMenu          *menu;
 };
 
@@ -60,6 +67,9 @@
 static void
 rstto_picture_viewer_destroy(GtkObject *object);
 
+static gboolean 
+cb_rstto_picture_viewer_queued_redraw (RsttoPictureViewer *viewer);
+
 static void
 rstto_picture_viewer_size_request(GtkWidget *, GtkRequisition *);
 static void
@@ -506,11 +516,11 @@
         gtk_adjustment_changed(viewer->vadjustment);
 
         viewer->hadjustment->value = (((viewer->hadjustment->value +
-                                      (viewer->hadjustment->page_size / 2)) /
-                                       old_scale) * scale) - (viewer->hadjustment->page_size / 2);
+                                      (viewer->hadjustment->page_size / 2)) *
+                                       scale) / old_scale) - (viewer->hadjustment->page_size / 2);
         viewer->vadjustment->value = (((viewer->vadjustment->value +
-                                      (viewer->vadjustment->page_size / 2)) /
-                                       old_scale) * scale) - (viewer->vadjustment->page_size / 2);
+                                      (viewer->vadjustment->page_size / 2)) *
+                                       scale) / old_scale) - (viewer->vadjustment->page_size / 2);
 
         if((viewer->hadjustment->value + viewer->hadjustment->page_size) > viewer->hadjustment->upper)
         {
@@ -860,18 +870,21 @@
         case GDK_SCROLL_LEFT:
             if (scale <= 0.05)
                 return;
+            if (viewer->priv->motion.idle_id > 0)
+            {
+                g_source_remove(viewer->priv->motion.idle_id);
+            }
             break;
         case GDK_SCROLL_DOWN:
         case GDK_SCROLL_RIGHT:
             if (scale >= 16)
                 return;
+            if (viewer->priv->motion.idle_id > 0)
+            {
+                g_source_remove(viewer->priv->motion.idle_id);
+            }
             break;
     }
-
-    if(rstto_picture_viewer_refresh(viewer))
-    {
-        rstto_picture_viewer_paint(GTK_WIDGET(viewer));
-    }
 }
 
 void
@@ -1047,43 +1060,54 @@
         if (viewer->priv->motion.time == 0)
             viewer->priv->motion.time = gtk_get_current_event_time();
 
+        viewer->priv->motion.current_x = event->x;
+        viewer->priv->motion.current_y = event->y;
 
-        if (((event->time - viewer->priv->motion.time) > RSTTO_PICTURE_VIEWER_DRAG_MOTION_TIMEOUT))
+        if (viewer->priv->motion.idle_id > 0)
         {
-            if (viewer->priv->motion.x != event->x)
-            {
-                gint val = viewer->hadjustment->value;
-                viewer->hadjustment->value = viewer->priv->motion.h_val + (viewer->priv->motion.x - event->x);
-                if((viewer->hadjustment->value + viewer->hadjustment->page_size) > viewer->hadjustment->upper)
-                {
-                    viewer->hadjustment->value = viewer->hadjustment->upper - viewer->hadjustment->page_size;
-                }
-                if((viewer->hadjustment->value) < viewer->hadjustment->lower)
-                {
-                    viewer->hadjustment->value = viewer->hadjustment->lower;
-                }
-                if (val != viewer->hadjustment->value)
-                    gtk_adjustment_value_changed(viewer->hadjustment);
-            }
+            g_source_remove(viewer->priv->motion.idle_id);
+        }
 
-            if (viewer->priv->motion.y != event->y)
-            {
-                gint val = viewer->vadjustment->value;
-                viewer->vadjustment->value = viewer->priv->motion.v_val + (viewer->priv->motion.y - event->y);
-                if((viewer->vadjustment->value + viewer->vadjustment->page_size) > viewer->vadjustment->upper)
-                {
-                    viewer->vadjustment->value = viewer->vadjustment->upper - viewer->vadjustment->page_size;
-                }
-                if((viewer->vadjustment->value) < viewer->vadjustment->lower)
-                {
-                    viewer->vadjustment->value = viewer->vadjustment->lower;
-                }
-                if (val != viewer->vadjustment->value)
-                    gtk_adjustment_value_changed(viewer->vadjustment);
-            }
-            viewer->priv->motion.time = event->time;
+        viewer->priv->motion.idle_id = g_idle_add((GSourceFunc)cb_rstto_picture_viewer_queued_redraw, viewer);
+    }
+    return FALSE;
+}
+
+static gboolean 
+cb_rstto_picture_viewer_queued_redraw (RsttoPictureViewer *viewer)
+{
+    if (viewer->priv->motion.x != viewer->priv->motion.current_x)
+    {
+        gint val = viewer->hadjustment->value;
+        viewer->hadjustment->value = viewer->priv->motion.h_val + (viewer->priv->motion.x - viewer->priv->motion.current_x);
+        if((viewer->hadjustment->value + viewer->hadjustment->page_size) > viewer->hadjustment->upper)
+        {
+            viewer->hadjustment->value = viewer->hadjustment->upper - viewer->hadjustment->page_size;
         }
+        if((viewer->hadjustment->value) < viewer->hadjustment->lower)
+        {
+            viewer->hadjustment->value = viewer->hadjustment->lower;
+        }
+        if (val != viewer->hadjustment->value)
+            gtk_adjustment_value_changed(viewer->hadjustment);
     }
+
+    if (viewer->priv->motion.y != viewer->priv->motion.current_y)
+    {
+        gint val = viewer->vadjustment->value;
+        viewer->vadjustment->value = viewer->priv->motion.v_val + (viewer->priv->motion.y - viewer->priv->motion.current_y);
+        if((viewer->vadjustment->value + viewer->vadjustment->page_size) > viewer->vadjustment->upper)
+        {
+            viewer->vadjustment->value = viewer->vadjustment->upper - viewer->vadjustment->page_size;
+        }
+        if((viewer->vadjustment->value) < viewer->vadjustment->lower)
+        {
+            viewer->vadjustment->value = viewer->vadjustment->lower;
+        }
+        if (val != viewer->vadjustment->value)
+            gtk_adjustment_value_changed(viewer->vadjustment);
+    }
+    viewer->priv->motion.idle_id = -1;
     return FALSE;
 }
 




More information about the Goodies-commits mailing list