[gthumb] fixed the navigator when the loaded image is not at the original size



commit a47e668f7f9e18c917b5b39157c9468eab4fd963
Author: Paolo Bacchilega <paobac src gnome org>
Date:   Sat Sep 21 21:32:33 2013 +0200

    fixed the navigator when the loaded image is not at the original size

 gthumb/gth-image-navigator.c |   12 ++++++------
 gthumb/gth-image-viewer.c    |   32 ++++++++++++++++++++++++++++++--
 gthumb/gth-image-viewer.h    |    3 +++
 3 files changed, 39 insertions(+), 8 deletions(-)
---
diff --git a/gthumb/gth-image-navigator.c b/gthumb/gth-image-navigator.c
index 6a8dac1..134c97b 100644
--- a/gthumb/gth-image-navigator.c
+++ b/gthumb/gth-image-navigator.c
@@ -30,8 +30,8 @@
 
 
 #define VISIBLE_AREA_BORDER 2.0
-#define POPUP_BORDER        4
-#define POPUP_BORDER_2      8
+#define POPUP_BORDER        2
+#define POPUP_BORDER_2      (POPUP_BORDER*2)
 #define POPUP_MAX_WIDTH     112
 #define POPUP_MAX_HEIGHT    112
 
@@ -460,7 +460,7 @@ popup_window_event_cb (GtkWidget *widget,
 
                mx = (int) (x / nav_popup->zoom_factor);
                my = (int) (y / nav_popup->zoom_factor);
-               gth_image_viewer_scroll_to (viewer, mx, my);
+               gth_image_viewer_set_scroll_offset (viewer, mx, my);
 
                gtk_widget_queue_draw (widget);
                gdk_window_process_updates (gtk_widget_get_window (widget), TRUE);
@@ -620,9 +620,9 @@ navigator_event_area_button_press_event_cb (GtkWidget      *widget,
 
        nav_popup->x_root = event->x_root;
        nav_popup->y_root = event->y_root;
-       gth_image_viewer_get_original_size (GTH_IMAGE_VIEWER (self->priv->viewer),
-                                           &nav_popup->image_width,
-                                           &nav_popup->image_height);
+
+       nav_popup->image_width = gth_image_viewer_get_image_width (GTH_IMAGE_VIEWER (self->priv->viewer));
+       nav_popup->image_height = gth_image_viewer_get_image_height (GTH_IMAGE_VIEWER (self->priv->viewer));
        update_popup_geometry (nav_popup);
 
        g_signal_connect (G_OBJECT (nav_popup->popup_win),
diff --git a/gthumb/gth-image-viewer.c b/gthumb/gth-image-viewer.c
index 00b7986..87a3813 100644
--- a/gthumb/gth-image-viewer.c
+++ b/gthumb/gth-image-viewer.c
@@ -219,6 +219,19 @@ get_prev_zoom (double zoom)
 }
 
 
+static double
+_gth_image_viewer_get_quality_zoom (GthImageViewer *self)
+{
+       cairo_surface_t *image;
+
+       image = gth_image_viewer_get_current_image (self);
+       if (self->priv->original_width <= 0)
+               return 1.0;
+
+       return (double) cairo_image_surface_get_width (image) / self->priv->original_width;
+}
+
+
 static void
 _gth_image_viewer_get_zoomed_size_for_zoom (GthImageViewer *self,
                                            int            *width,
@@ -2384,12 +2397,27 @@ gth_image_viewer_scroll_page_y (GthImageViewer *self,
 
 
 void
+gth_image_viewer_set_scroll_offset (GthImageViewer *self,
+                                   int             x,
+                                   int             y)
+{
+       double quality_zoom;
+
+       quality_zoom = _gth_image_viewer_get_quality_zoom (self);
+       gth_image_viewer_scroll_to (self, x / quality_zoom, y / quality_zoom);
+}
+
+
+void
 gth_image_viewer_get_scroll_offset (GthImageViewer *self,
                                    int            *x,
                                    int            *y)
 {
-       *x = self->x_offset;
-       *y = self->y_offset;
+       double quality_zoom;
+
+       quality_zoom = _gth_image_viewer_get_quality_zoom (self);
+       *x = self->x_offset * quality_zoom;
+       *y = self->y_offset * quality_zoom;
 }
 
 
diff --git a/gthumb/gth-image-viewer.h b/gthumb/gth-image-viewer.h
index 595ac30..d22361f 100644
--- a/gthumb/gth-image-viewer.h
+++ b/gthumb/gth-image-viewer.h
@@ -264,6 +264,9 @@ void           gth_image_viewer_scroll_page_x            (GthImageViewer
                                                          gboolean               increment);
 void           gth_image_viewer_scroll_page_y            (GthImageViewer        *viewer,
                                                          gboolean               increment);
+void           gth_image_viewer_set_scroll_offset        (GthImageViewer        *self,
+                                                         int                    x,
+                                                         int                    y);
 void           gth_image_viewer_get_scroll_offset        (GthImageViewer        *viewer,
                                                          int                   *x,
                                                          int                   *y);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]