[gthumb] GthImageViewer: fixed centered zoom
- From: Paolo Bacchilega <paobac src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gthumb] GthImageViewer: fixed centered zoom
- Date: Sat, 9 Nov 2013 20:08:41 +0000 (UTC)
commit 8e81df7dff1bc67bc533de4a57a3622a7cb52c23
Author: Paolo Bacchilega <paobac src gnome org>
Date: Fri Nov 1 20:01:48 2013 +0100
GthImageViewer: fixed centered zoom
gthumb/gth-image-viewer.c | 29 ++++++++++++++++++++++++-----
1 files changed, 24 insertions(+), 5 deletions(-)
---
diff --git a/gthumb/gth-image-viewer.c b/gthumb/gth-image-viewer.c
index 55572de..d0c3682 100644
--- a/gthumb/gth-image-viewer.c
+++ b/gthumb/gth-image-viewer.c
@@ -322,8 +322,6 @@ set_zoom (GthImageViewer *self,
int center_x,
int center_y)
{
- gdouble zoom_ratio;
-
g_return_if_fail (self != NULL);
if (gth_image_get_is_zoomable (self->priv->image)) {
@@ -350,9 +348,30 @@ set_zoom (GthImageViewer *self,
}
/* try to keep the center of the view visible. */
- zoom_ratio = zoom_level / self->priv->zoom_level;
- self->visible_area.x = ((self->visible_area.x + center_x) * zoom_ratio - self->visible_area.width /
2);
- self->visible_area.y = ((self->visible_area.y + center_y) * zoom_ratio - self->visible_area.height /
2);
+
+ {
+ cairo_surface_t *image;
+
+ image = gth_image_viewer_get_current_image (self);
+ if (image != NULL) {
+ double quality_zoom;
+ double zoom;
+ int x, y;
+ int frame_border;
+ int new_center_x, new_center_y;
+
+ quality_zoom = (double) self->priv->original_width / cairo_image_surface_get_width
(image);
+ zoom = self->priv->zoom_level * quality_zoom;
+ x = (center_x + self->visible_area.x - self->image_area.x) / zoom;
+ y = (center_y + self->visible_area.y - self->image_area.y) / zoom;
+ frame_border = _gth_image_viewer_get_frame_border (self);
+ new_center_x = x * zoom_level * quality_zoom + frame_border;
+ new_center_y = y * zoom_level * quality_zoom + frame_border;
+
+ self->visible_area.x = new_center_x - (self->visible_area.width / 2);
+ self->visible_area.y = new_center_y - (self->visible_area.height / 2);
+ }
+ }
self->priv->zoom_level = zoom_level;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]