diff src/image.c @ 129:89fc00ffbce2

started relative scroll, keep scroll position
author nadvornik
date Wed, 11 Jul 2007 20:00:07 +0000
parents 98e2632b5d3d
children b1acdfc7271b
line wrap: on
line diff
--- a/src/image.c	Tue Jul 10 21:25:51 2007 +0000
+++ b/src/image.c	Wed Jul 11 20:00:07 2007 +0000
@@ -67,12 +67,16 @@
 static void image_drag_cb(PixbufRenderer *pr, GdkEventButton *event, gpointer data)
 {
 	ImageWindow *imd = data;
+	gint width, height;
 
+	printf("drag_cb %p\n", imd->func_drag);
+	pixbuf_renderer_get_scaled_size(pr, &width, &height);
+	
 	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,
+				 (gfloat)(pr->drag_last_x - event->x) / width, (gfloat)(pr->drag_last_y - event->y) / height,
 				 imd->data_button);
 		}
 }
@@ -1298,31 +1302,37 @@
 	pixbuf_renderer_move(PIXBUF_RENDERER(imd->pr), PIXBUF_RENDERER(source->pr));
 }
 
-void image_sync_scroll_from_image_absolute(ImageWindow *imd, ImageWindow *source)
+void image_get_scroll_center(ImageWindow *imd, gfloat *x, gfloat *y)
 {
-	gint src_width, src_height, dst_width, dst_height;
+	gint src_width, src_height;
 	gint src_x, src_y;
-	gfloat dst_x, dst_y;
 	GdkRectangle src_rect;
-	GdkRectangle dst_rect;
-	gfloat dst_scale = pixbuf_renderer_zoom_get_scale(PIXBUF_RENDERER(imd->pr));
 	
-	pixbuf_renderer_get_virtual_rect(PIXBUF_RENDERER(source->pr), &src_rect);
-	pixbuf_renderer_get_scaled_size(PIXBUF_RENDERER(source->pr), &src_width, &src_height);
-	pixbuf_renderer_get_virtual_rect(PIXBUF_RENDERER(imd->pr), &dst_rect);
-	pixbuf_renderer_get_scaled_size(PIXBUF_RENDERER(imd->pr), &dst_width, &dst_height);
+	pixbuf_renderer_get_virtual_rect(PIXBUF_RENDERER(imd->pr), &src_rect);
+	pixbuf_renderer_get_scaled_size(PIXBUF_RENDERER(imd->pr), &src_width, &src_height);
 
 	src_x = src_rect.x + src_rect.width / 2;
 	src_y = src_rect.y + src_rect.height / 2;
 
-	dst_x = (gfloat)src_x * dst_width / src_width - dst_rect.width / 2;
-	dst_y = (gfloat)src_y * dst_height / src_height - dst_rect.height / 2;
+	*x = (gfloat)src_x / src_width;
+	*y = (gfloat)src_y / src_height;
+}
 
+void image_set_scroll_center(ImageWindow *imd, gfloat x, gfloat y)
+{
+	gint dst_width, dst_height;
+	gfloat dst_x, dst_y;
+	gfloat dst_scale = pixbuf_renderer_zoom_get_scale(PIXBUF_RENDERER(imd->pr));
 	
+	pixbuf_renderer_get_scaled_size(PIXBUF_RENDERER(imd->pr), &dst_width, &dst_height);
 
-	image_scroll_to_point(imd, dst_x / dst_scale, dst_y / dst_scale, 0, 0);
+	dst_x = x * dst_width;
+	dst_y = y * dst_height;
+
+	image_scroll_to_point(imd, dst_x / dst_scale, dst_y / dst_scale, 0.5, 0.5);
 }
 
+
 void image_sync_zoom_from_image(ImageWindow *imd, ImageWindow *source)
 {
 	image_zoom_set(imd, image_zoom_get(source));