comparison 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
comparison
equal deleted inserted replaced
128:98e2632b5d3d 129:89fc00ffbce2
65 } 65 }
66 66
67 static void image_drag_cb(PixbufRenderer *pr, GdkEventButton *event, gpointer data) 67 static void image_drag_cb(PixbufRenderer *pr, GdkEventButton *event, gpointer data)
68 { 68 {
69 ImageWindow *imd = data; 69 ImageWindow *imd = data;
70 70 gint width, height;
71
72 printf("drag_cb %p\n", imd->func_drag);
73 pixbuf_renderer_get_scaled_size(pr, &width, &height);
74
71 if (imd->func_drag) 75 if (imd->func_drag)
72 { 76 {
73 imd->func_drag(imd, event->button, event->time, 77 imd->func_drag(imd, event->button, event->time,
74 event->x, event->y, event->state, 78 event->x, event->y, event->state,
75 event->x - pr->drag_last_x, event->y - pr->drag_last_y, 79 (gfloat)(pr->drag_last_x - event->x) / width, (gfloat)(pr->drag_last_y - event->y) / height,
76 imd->data_button); 80 imd->data_button);
77 } 81 }
78 } 82 }
79 83
80 static void image_scroll_notify_cb(PixbufRenderer *pr, gpointer data) 84 static void image_scroll_notify_cb(PixbufRenderer *pr, gpointer data)
1296 source->state = IMAGE_STATE_NONE; 1300 source->state = IMAGE_STATE_NONE;
1297 1301
1298 pixbuf_renderer_move(PIXBUF_RENDERER(imd->pr), PIXBUF_RENDERER(source->pr)); 1302 pixbuf_renderer_move(PIXBUF_RENDERER(imd->pr), PIXBUF_RENDERER(source->pr));
1299 } 1303 }
1300 1304
1301 void image_sync_scroll_from_image_absolute(ImageWindow *imd, ImageWindow *source) 1305 void image_get_scroll_center(ImageWindow *imd, gfloat *x, gfloat *y)
1302 { 1306 {
1303 gint src_width, src_height, dst_width, dst_height; 1307 gint src_width, src_height;
1304 gint src_x, src_y; 1308 gint src_x, src_y;
1309 GdkRectangle src_rect;
1310
1311 pixbuf_renderer_get_virtual_rect(PIXBUF_RENDERER(imd->pr), &src_rect);
1312 pixbuf_renderer_get_scaled_size(PIXBUF_RENDERER(imd->pr), &src_width, &src_height);
1313
1314 src_x = src_rect.x + src_rect.width / 2;
1315 src_y = src_rect.y + src_rect.height / 2;
1316
1317 *x = (gfloat)src_x / src_width;
1318 *y = (gfloat)src_y / src_height;
1319 }
1320
1321 void image_set_scroll_center(ImageWindow *imd, gfloat x, gfloat y)
1322 {
1323 gint dst_width, dst_height;
1305 gfloat dst_x, dst_y; 1324 gfloat dst_x, dst_y;
1306 GdkRectangle src_rect;
1307 GdkRectangle dst_rect;
1308 gfloat dst_scale = pixbuf_renderer_zoom_get_scale(PIXBUF_RENDERER(imd->pr)); 1325 gfloat dst_scale = pixbuf_renderer_zoom_get_scale(PIXBUF_RENDERER(imd->pr));
1309 1326
1310 pixbuf_renderer_get_virtual_rect(PIXBUF_RENDERER(source->pr), &src_rect);
1311 pixbuf_renderer_get_scaled_size(PIXBUF_RENDERER(source->pr), &src_width, &src_height);
1312 pixbuf_renderer_get_virtual_rect(PIXBUF_RENDERER(imd->pr), &dst_rect);
1313 pixbuf_renderer_get_scaled_size(PIXBUF_RENDERER(imd->pr), &dst_width, &dst_height); 1327 pixbuf_renderer_get_scaled_size(PIXBUF_RENDERER(imd->pr), &dst_width, &dst_height);
1314 1328
1315 src_x = src_rect.x + src_rect.width / 2; 1329 dst_x = x * dst_width;
1316 src_y = src_rect.y + src_rect.height / 2; 1330 dst_y = y * dst_height;
1317 1331
1318 dst_x = (gfloat)src_x * dst_width / src_width - dst_rect.width / 2; 1332 image_scroll_to_point(imd, dst_x / dst_scale, dst_y / dst_scale, 0.5, 0.5);
1319 dst_y = (gfloat)src_y * dst_height / src_height - dst_rect.height / 2; 1333 }
1320 1334
1321
1322
1323 image_scroll_to_point(imd, dst_x / dst_scale, dst_y / dst_scale, 0, 0);
1324 }
1325 1335
1326 void image_sync_zoom_from_image(ImageWindow *imd, ImageWindow *source) 1336 void image_sync_zoom_from_image(ImageWindow *imd, ImageWindow *source)
1327 { 1337 {
1328 image_zoom_set(imd, image_zoom_get(source)); 1338 image_zoom_set(imd, image_zoom_get(source));
1329 } 1339 }