Mercurial > geeqie.yaz
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 } |