[gthumb] better image quality for zoom factor > 1



commit dcf1cebba02ae9017829fa5801308e97c62bb81c
Author: Paolo Bacchilega <paobac src gnome org>
Date:   Fri Jan 1 21:57:05 2016 +0100

    better image quality for zoom factor > 1
    
    use the cairo bilinear filter when 1 < zoom factor <= 3;
    use the fast filter when the zoom factor > 3 because the bilinear
    filter doesn't add any value for such big zoom factors, and in
    fact it could be more interesting to look at the single pixels

 gthumb/gth-image-dragger.c |   11 ++++++++---
 gthumb/gth-image-viewer.c  |    7 ++++++-
 2 files changed, 14 insertions(+), 4 deletions(-)
---
diff --git a/gthumb/gth-image-dragger.c b/gthumb/gth-image-dragger.c
index 304d4dd..f3a4168 100644
--- a/gthumb/gth-image-dragger.c
+++ b/gthumb/gth-image-dragger.c
@@ -29,6 +29,7 @@
 
 
 #define SIZE_TOO_BIG_FOR_SCALE_BILINEAR (3000 * 3000)
+#define MAX_ZOOM_LEVEL_FOR_HIGH_QUALITY 3.0
 #define FRAME_BORDER 15
 
 
@@ -266,7 +267,7 @@ gth_image_dragger_draw (GthImageViewerTool *self,
 
        gth_image_viewer_paint_frame (viewer, cr);
 
-       if (dragger->priv->scaled != NULL)
+       if (dragger->priv->scaled != NULL) {
                gth_image_viewer_paint_region (viewer,
                                               cr,
                                               dragger->priv->scaled,
@@ -274,14 +275,18 @@ gth_image_dragger_draw (GthImageViewerTool *self,
                                               viewer->image_area.y,
                                               &viewer->visible_area,
                                               CAIRO_FILTER_FAST);
-       else
+       }
+       else {
+               double zoom = gth_image_viewer_get_zoom (viewer);
+
                gth_image_viewer_paint_region (viewer,
                                               cr,
                                               gth_image_viewer_get_current_image (viewer),
                                               viewer->image_area.x,
                                               viewer->image_area.y,
                                               &viewer->visible_area,
-                                              CAIRO_FILTER_FAST);
+                                              (gth_image_viewer_get_zoom_quality (viewer) == 
GTH_ZOOM_QUALITY_HIGH) && (zoom > 1.0) && (zoom <= MAX_ZOOM_LEVEL_FOR_HIGH_QUALITY) ? CAIRO_FILTER_BILINEAR : 
CAIRO_FILTER_FAST);
+       }
 
        gth_image_viewer_apply_painters (viewer, cr);
 }
diff --git a/gthumb/gth-image-viewer.c b/gthumb/gth-image-viewer.c
index 00c8a2b..7d10ac0 100644
--- a/gthumb/gth-image-viewer.c
+++ b/gthumb/gth-image-viewer.c
@@ -2110,6 +2110,11 @@ gth_image_viewer_set_zoom_quality (GthImageViewer *self,
                                   GthZoomQuality  quality)
 {
        self->priv->zoom_quality = quality;
+
+       /* to update the zoom filter */
+
+       if (self->priv->tool != NULL)
+               gth_image_viewer_tool_zoom_changed (self->priv->tool);
 }
 
 
@@ -2130,7 +2135,7 @@ gth_image_viewer_get_zoom_quality_filter (GthImageViewer *viewer)
        else
                filter = CAIRO_FILTER_BEST;
 
-       if (gth_image_viewer_get_zoom (viewer) >= 1.0)
+       if (viewer->priv->zoom_level >= 1.0)
                filter = CAIRO_FILTER_FAST;
 
        return filter;


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