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

Stephan Arts stephan at xfce.org
Mon Oct 15 00:48:01 CEST 2007


Author: stephan
Date: 2007-10-14 22:48:01 +0000 (Sun, 14 Oct 2007)
New Revision: 3379

Modified:
   ristretto/trunk/src/picture_viewer.c
Log:
Add dragging to move focus of zoomed image



Modified: ristretto/trunk/src/picture_viewer.c
===================================================================
--- ristretto/trunk/src/picture_viewer.c	2007-10-14 08:51:46 UTC (rev 3378)
+++ ristretto/trunk/src/picture_viewer.c	2007-10-14 22:48:01 UTC (rev 3379)
@@ -38,6 +38,11 @@
     GTimer           *timer;
     gint              timeout_id;
     gboolean          timeout;
+    struct
+    {
+        gdouble x;
+        gdouble y;
+    } motion;
 };
 
 static void
@@ -70,6 +75,15 @@
 cb_rstto_picture_viewer_value_changed(GtkAdjustment *, RsttoPictureViewer *);
 static void
 cb_rstto_picture_viewer_scroll_event (RsttoPictureViewer *, GdkEventScroll *);
+static gboolean 
+cb_rstto_picture_viewer_motion_notify_event (RsttoPictureViewer *viewer,
+                                             GdkEventMotion *event,
+                                             gpointer user_data);
+static void
+cb_rstto_picture_viewer_button_press_event (RsttoPictureViewer *viewer, GdkEventButton *event);
+static void
+cb_rstto_picture_viewer_button_release_event (RsttoPictureViewer *viewer, GdkEventButton *event);
+
 static gboolean
 cb_rstto_picture_viewer_update_image(RsttoPictureViewer *viewer);
 
@@ -121,12 +135,19 @@
     viewer->priv->src_pixbuf = NULL;
     viewer->priv->dst_pixbuf = NULL;
     gtk_widget_set_redraw_on_allocate(GTK_WIDGET(viewer), TRUE);
+    gtk_widget_set_events (GTK_WIDGET(viewer),
+                           GDK_BUTTON_PRESS_MASK |
+                           GDK_BUTTON_RELEASE_MASK |
+                           GDK_BUTTON1_MOTION_MASK);
 
     viewer->priv->show_border = TRUE;
     viewer->priv->timer = g_timer_new();
     viewer->priv->timeout = TRUE;
 
     g_signal_connect(G_OBJECT(viewer), "scroll_event", G_CALLBACK(cb_rstto_picture_viewer_scroll_event), NULL);
+    g_signal_connect(G_OBJECT(viewer), "button_press_event", G_CALLBACK(cb_rstto_picture_viewer_button_press_event), NULL);
+    g_signal_connect(G_OBJECT(viewer), "button_release_event", G_CALLBACK(cb_rstto_picture_viewer_button_release_event), NULL);
+    g_signal_connect(G_OBJECT(viewer), "motion_notify_event", G_CALLBACK(cb_rstto_picture_viewer_motion_notify_event), NULL);
 }
 
 static void
@@ -588,7 +609,7 @@
                 viewer->vadjustment->page_increment = 100;
                 if((viewer->vadjustment->value + viewer->vadjustment->page_size) > viewer->vadjustment->upper)
                 {
-                    viewer->vadjustment->value = viewer->vadjustment->upper - viewer->vadjustment->page_size - 1;
+                    viewer->vadjustment->value = viewer->vadjustment->upper - viewer->vadjustment->page_size;
                     vadjustment_changed = TRUE;
                 }
             }
@@ -942,3 +963,61 @@
         gdk_window_set_cursor(widget->window, NULL);
     }
 }
+
+static gboolean 
+cb_rstto_picture_viewer_motion_notify_event (RsttoPictureViewer *viewer,
+                                             GdkEventMotion *event,
+                                             gpointer user_data)
+{
+    if (event->state & GDK_BUTTON1_MASK)
+    {
+    }
+    return TRUE;
+}
+
+static void
+cb_rstto_picture_viewer_button_press_event (RsttoPictureViewer *viewer, GdkEventButton *event)
+{
+    if(event->button == 1)
+    {
+        GtkWidget *widget = GTK_WIDGET(viewer);
+        GdkCursor *cursor = gdk_cursor_new(GDK_FLEUR);
+        gdk_window_set_cursor(widget->window, cursor);
+        gdk_cursor_unref(cursor);
+        
+        viewer->priv->motion.x = event->x;
+        viewer->priv->motion.y = event->y;
+    }
+}
+
+static void
+cb_rstto_picture_viewer_button_release_event (RsttoPictureViewer *viewer, GdkEventButton *event)
+{
+    if(event->button == 1)
+    {
+        GtkWidget *widget = GTK_WIDGET(viewer);
+        GdkCursor *cursor = gdk_cursor_new(GDK_WATCH);
+        gdk_window_set_cursor(widget->window, cursor);
+        gdk_cursor_unref(cursor);
+
+        viewer->hadjustment->value -= event->x - viewer->priv->motion.x;
+        if((viewer->hadjustment->value + viewer->hadjustment->page_size) > viewer->hadjustment->upper)
+        {
+            viewer->hadjustment->value = viewer->hadjustment->upper - viewer->hadjustment->page_size;
+        }
+        gtk_adjustment_value_changed(viewer->hadjustment);
+
+        viewer->vadjustment->value -= event->y - viewer->priv->motion.y;
+        if((viewer->vadjustment->value + viewer->vadjustment->page_size) > viewer->vadjustment->upper)
+        {
+            viewer->vadjustment->value = viewer->vadjustment->upper - viewer->vadjustment->page_size;
+        }
+        gtk_adjustment_value_changed(viewer->vadjustment);
+
+        viewer->priv->motion.x = -1;
+        viewer->priv->motion.y = -1;
+
+        gdk_window_set_cursor(widget->window, NULL);
+    }
+}
+




More information about the Goodies-commits mailing list