diff src/image.c @ 128:98e2632b5d3d

improved connected scroll and active image switching
author nadvornik
date Tue, 10 Jul 2007 21:25:51 +0000
parents 271afad04d07
children 89fc00ffbce2
line wrap: on
line diff
--- a/src/image.c	Fri Jun 29 15:16:46 2007 +0000
+++ b/src/image.c	Tue Jul 10 21:25:51 2007 +0000
@@ -64,6 +64,19 @@
 		}
 }
 
+static void image_drag_cb(PixbufRenderer *pr, GdkEventButton *event, gpointer data)
+{
+	ImageWindow *imd = data;
+
+	if (imd->func_drag)
+		{
+		imd->func_drag(imd, event->button, event->time,
+				 event->x, event->y, event->state,
+				 event->x - pr->drag_last_x, event->y - pr->drag_last_y,
+				 imd->data_button);
+		}
+}
+
 static void image_scroll_notify_cb(PixbufRenderer *pr, gpointer data)
 {
 	ImageWindow *imd = data;
@@ -1103,6 +1116,14 @@
 	imd->data_button = data;
 }
 
+void image_set_drag_func(ImageWindow *imd,
+			   void (*func)(ImageWindow *, gint button, guint32 time, gdouble x, gdouble y, guint state, gdouble dx, gdouble dy, gpointer),
+			   gpointer data)
+{
+	imd->func_drag = func;
+	imd->data_drag = data;
+}
+
 void image_set_scroll_func(ImageWindow *imd,
 			   void (*func)(ImageWindow *, GdkScrollDirection direction, guint32 time, gdouble x, gdouble y, guint state, gpointer),
 			   gpointer data)
@@ -1836,6 +1857,8 @@
 			 G_CALLBACK(image_zoom_cb), imd);
 	g_signal_connect(G_OBJECT(imd->pr), "render_complete",
 			 G_CALLBACK(image_render_complete_cb), imd);
+	g_signal_connect(G_OBJECT(imd->pr), "drag",
+			 G_CALLBACK(image_drag_cb), imd);
 
 	image_list = g_list_append(image_list, imd);