From 6ac207671917161bca9a356c9f31111f25f1bf62 Mon Sep 17 00:00:00 2001 From: Stephan Arts Date: Sun, 23 Oct 2011 07:34:55 +0200 Subject: [PATCH 1/3] Fix bug #8036 --- src/image_viewer.c | 49 ++++++++++++++++++++++++++----------------------- 1 files changed, 26 insertions(+), 23 deletions(-) diff --git a/src/image_viewer.c b/src/image_viewer.c index 7017577..a5a6a70 100644 --- a/src/image_viewer.c +++ b/src/image_viewer.c @@ -1741,32 +1741,35 @@ cb_rstto_image_viewer_queued_repaint (RsttoImageViewer *viewer) subpixbuf_y_offset, subpixbuf_width, subpixbuf_height); - - switch (viewer->priv->orientation) + if (NULL != tmp_pixbuf) { - case RSTTO_IMAGE_VIEWER_ORIENT_180: - tmp_pixbuf2 = gdk_pixbuf_rotate_simple (tmp_pixbuf, GDK_PIXBUF_ROTATE_UPSIDEDOWN); - g_object_unref (tmp_pixbuf); - tmp_pixbuf = tmp_pixbuf2; - break; - case RSTTO_IMAGE_VIEWER_ORIENT_270: - tmp_pixbuf2 = gdk_pixbuf_rotate_simple (tmp_pixbuf, GDK_PIXBUF_ROTATE_COUNTERCLOCKWISE); - g_object_unref (tmp_pixbuf); - tmp_pixbuf = tmp_pixbuf2; - break; - case RSTTO_IMAGE_VIEWER_ORIENT_90: - tmp_pixbuf2 = gdk_pixbuf_rotate_simple (tmp_pixbuf, GDK_PIXBUF_ROTATE_CLOCKWISE); - g_object_unref (tmp_pixbuf); - tmp_pixbuf = tmp_pixbuf2; - break; - } - viewer->priv->dst_pixbuf = gdk_pixbuf_scale_simple (tmp_pixbuf, - (gint)(gdk_pixbuf_get_width(tmp_pixbuf) * relative_scale), - (gint)(gdk_pixbuf_get_height(tmp_pixbuf) * relative_scale), - GDK_INTERP_BILINEAR); + switch (viewer->priv->orientation) + { + case RSTTO_IMAGE_VIEWER_ORIENT_180: + tmp_pixbuf2 = gdk_pixbuf_rotate_simple (tmp_pixbuf, GDK_PIXBUF_ROTATE_UPSIDEDOWN); + g_object_unref (tmp_pixbuf); + tmp_pixbuf = tmp_pixbuf2; + break; + case RSTTO_IMAGE_VIEWER_ORIENT_270: + tmp_pixbuf2 = gdk_pixbuf_rotate_simple (tmp_pixbuf, GDK_PIXBUF_ROTATE_COUNTERCLOCKWISE); + g_object_unref (tmp_pixbuf); + tmp_pixbuf = tmp_pixbuf2; + break; + case RSTTO_IMAGE_VIEWER_ORIENT_90: + tmp_pixbuf2 = gdk_pixbuf_rotate_simple (tmp_pixbuf, GDK_PIXBUF_ROTATE_CLOCKWISE); + g_object_unref (tmp_pixbuf); + tmp_pixbuf = tmp_pixbuf2; + break; + } - g_object_unref (tmp_pixbuf); + viewer->priv->dst_pixbuf = gdk_pixbuf_scale_simple (tmp_pixbuf, + (gint)(gdk_pixbuf_get_width(tmp_pixbuf) * relative_scale), + (gint)(gdk_pixbuf_get_height(tmp_pixbuf) * relative_scale), + GDK_INTERP_BILINEAR); + + g_object_unref (tmp_pixbuf); + } } /* -- 1.7.7 From d29dab375128d36d27945dc03b81ae90c0a69346 Mon Sep 17 00:00:00 2001 From: Stephan Arts Date: Sun, 23 Oct 2011 08:12:13 +0200 Subject: [PATCH 2/3] Add some rounding fixes and a debug statement --- src/image_viewer.c | 72 ++++++++++++++++++++++++++++++++++----------------- 1 files changed, 48 insertions(+), 24 deletions(-) diff --git a/src/image_viewer.c b/src/image_viewer.c index a5a6a70..36c78e1 100644 --- a/src/image_viewer.c +++ b/src/image_viewer.c @@ -23,6 +23,8 @@ #include #include +#include + #include "image_viewer.h" #include "settings.h" #include "marshal.h" @@ -1611,32 +1613,46 @@ cb_rstto_image_viewer_queued_repaint (RsttoImageViewer *viewer) { case RSTTO_IMAGE_VIEWER_ORIENT_NONE: if ((gtk_adjustment_get_page_size (vadjustment) + - gtk_adjustment_get_value(vadjustment)) > (viewer->priv->image_height*viewer->priv->scale)) + gtk_adjustment_get_value(vadjustment)) > floor(viewer->priv->image_height*viewer->priv->scale)) { gtk_adjustment_set_value (vadjustment, (height*relative_scale) - gtk_adjustment_get_page_size (vadjustment)); } if ((gtk_adjustment_get_page_size (hadjustment) + - gtk_adjustment_get_value(hadjustment)) > (viewer->priv->image_width*viewer->priv->scale)) + gtk_adjustment_get_value(hadjustment)) > floor(viewer->priv->image_width*viewer->priv->scale)) { gtk_adjustment_set_value (hadjustment, (width*relative_scale) - gtk_adjustment_get_page_size (hadjustment)); } - gtk_adjustment_set_upper (hadjustment, (gdouble)width*(viewer->priv->scale/viewer->priv->image_scale)); - gtk_adjustment_set_upper (vadjustment, (gdouble)height*(viewer->priv->scale/viewer->priv->image_scale)); + gtk_adjustment_set_upper (hadjustment, floor((gdouble)width*(viewer->priv->scale/viewer->priv->image_scale))); + gtk_adjustment_set_upper (vadjustment, floor((gdouble)height*(viewer->priv->scale/viewer->priv->image_scale))); - subpixbuf_x_offset = (gint)(gtk_adjustment_get_value (hadjustment) / relative_scale); - subpixbuf_y_offset = (gint)(gtk_adjustment_get_value (vadjustment) / relative_scale); + subpixbuf_x_offset = (gint)floor(gtk_adjustment_get_value (hadjustment) / relative_scale); + subpixbuf_y_offset = (gint)floor(gtk_adjustment_get_value (vadjustment) / relative_scale); subpixbuf_width = (gint)((gtk_adjustment_get_page_size (hadjustment) / relative_scale) < width)? - (gtk_adjustment_get_page_size (hadjustment) / relative_scale)+1:(width); + ceil(gtk_adjustment_get_page_size (hadjustment) / relative_scale):(width); subpixbuf_height = (gint)((gtk_adjustment_get_page_size (vadjustment) / relative_scale) < height)? - (gtk_adjustment_get_page_size (vadjustment) / relative_scale)+1:(height); + ceil(gtk_adjustment_get_page_size (vadjustment) / relative_scale):(height); break; case RSTTO_IMAGE_VIEWER_ORIENT_180: - gtk_adjustment_set_upper (hadjustment, (gdouble)width*(viewer->priv->scale/viewer->priv->image_scale)); - gtk_adjustment_set_upper (vadjustment, (gdouble)height*(viewer->priv->scale/viewer->priv->image_scale)); + if ((gtk_adjustment_get_page_size (vadjustment) + + gtk_adjustment_get_value(vadjustment)) > floor(viewer->priv->image_height*viewer->priv->scale)) + { + gtk_adjustment_set_value (vadjustment, + (height*relative_scale) - + gtk_adjustment_get_page_size (vadjustment)); + } + if ((gtk_adjustment_get_page_size (hadjustment) + + gtk_adjustment_get_value(hadjustment)) > floor(viewer->priv->image_width*viewer->priv->scale)) + { + gtk_adjustment_set_value (hadjustment, + (width*relative_scale) - + gtk_adjustment_get_page_size (hadjustment)); + } + gtk_adjustment_set_upper (hadjustment, floor((gdouble)width*(viewer->priv->scale/viewer->priv->image_scale))); + gtk_adjustment_set_upper (vadjustment, floor((gdouble)height*(viewer->priv->scale/viewer->priv->image_scale))); subpixbuf_x_offset = (gint)((gtk_adjustment_get_upper(hadjustment) - gtk_adjustment_get_page_size(hadjustment) - gtk_adjustment_get_value (hadjustment)) / relative_scale); @@ -1644,23 +1660,23 @@ cb_rstto_image_viewer_queued_repaint (RsttoImageViewer *viewer) gtk_adjustment_get_page_size(vadjustment) - gtk_adjustment_get_value (vadjustment)) / relative_scale); subpixbuf_width = (gint)((gtk_adjustment_get_page_size (hadjustment) / relative_scale) < width)? - (gtk_adjustment_get_page_size (hadjustment) / relative_scale)+1:(width); + ceil(gtk_adjustment_get_page_size (hadjustment) / relative_scale):(width); subpixbuf_height = (gint)((gtk_adjustment_get_page_size (vadjustment) / relative_scale) < height)? - (gtk_adjustment_get_page_size (vadjustment) / relative_scale)+1:(height); + ceil(gtk_adjustment_get_page_size (vadjustment) / relative_scale):(height); break; case RSTTO_IMAGE_VIEWER_ORIENT_270: - gtk_adjustment_set_upper (hadjustment, (gdouble)width*(viewer->priv->scale/viewer->priv->image_scale)); - gtk_adjustment_set_upper (vadjustment, (gdouble)height*(viewer->priv->scale/viewer->priv->image_scale)); + gtk_adjustment_set_upper (hadjustment, floor((gdouble)width*(viewer->priv->scale/viewer->priv->image_scale))); + gtk_adjustment_set_upper (vadjustment, floor((gdouble)height*(viewer->priv->scale/viewer->priv->image_scale))); if ((gtk_adjustment_get_page_size (hadjustment) + - gtk_adjustment_get_value(hadjustment)) > (viewer->priv->image_width*viewer->priv->scale)) + gtk_adjustment_get_value(hadjustment)) > floor(viewer->priv->image_width*viewer->priv->scale)) { gtk_adjustment_set_value (hadjustment, (width*relative_scale) - gtk_adjustment_get_page_size (vadjustment)); } if ((gtk_adjustment_get_page_size (vadjustment) + - gtk_adjustment_get_value(vadjustment)) > (viewer->priv->image_height*viewer->priv->scale)) + gtk_adjustment_get_value(vadjustment)) > floor(viewer->priv->image_height*viewer->priv->scale)) { gtk_adjustment_set_value (vadjustment, (height*relative_scale) - @@ -1672,23 +1688,23 @@ cb_rstto_image_viewer_queued_repaint (RsttoImageViewer *viewer) gtk_adjustment_get_value (hadjustment))) / relative_scale); subpixbuf_y_offset = (gint)(gtk_adjustment_get_value (vadjustment) / relative_scale); subpixbuf_width = (gint)((gtk_adjustment_get_page_size (hadjustment) / relative_scale) < width)? - (gtk_adjustment_get_page_size (hadjustment) / relative_scale)+1:(width); + ceil(gtk_adjustment_get_page_size (hadjustment) / relative_scale):(width); subpixbuf_height = (gint)((gtk_adjustment_get_page_size (vadjustment) / relative_scale) < height)? - (gtk_adjustment_get_page_size (vadjustment) / relative_scale)+1:(height); + ceil(gtk_adjustment_get_page_size (vadjustment) / relative_scale):(height); break; case RSTTO_IMAGE_VIEWER_ORIENT_90: - gtk_adjustment_set_upper (hadjustment, (gdouble)width*(viewer->priv->scale/viewer->priv->image_scale)); - gtk_adjustment_set_upper (vadjustment, (gdouble)height*(viewer->priv->scale/viewer->priv->image_scale)); + gtk_adjustment_set_upper (hadjustment, floor((gdouble)width*(viewer->priv->scale/viewer->priv->image_scale))); + gtk_adjustment_set_upper (vadjustment, floor((gdouble)height*(viewer->priv->scale/viewer->priv->image_scale))); if ((gtk_adjustment_get_page_size (hadjustment) + - gtk_adjustment_get_value(hadjustment)) > (viewer->priv->image_width*viewer->priv->scale)) + gtk_adjustment_get_value(hadjustment)) > floor(viewer->priv->image_width*viewer->priv->scale)) { gtk_adjustment_set_value (hadjustment, (width*relative_scale) - gtk_adjustment_get_page_size (vadjustment)); } if ((gtk_adjustment_get_page_size (vadjustment) + - gtk_adjustment_get_value(vadjustment)) > (viewer->priv->image_height*viewer->priv->scale)) + gtk_adjustment_get_value(vadjustment)) > floor(viewer->priv->image_height*viewer->priv->scale)) { gtk_adjustment_set_value (vadjustment, (height*relative_scale) - @@ -1700,9 +1716,9 @@ cb_rstto_image_viewer_queued_repaint (RsttoImageViewer *viewer) (gtk_adjustment_get_page_size(vadjustment) + gtk_adjustment_get_value (vadjustment))) / relative_scale); subpixbuf_width = (gint)((gtk_adjustment_get_page_size (hadjustment) / relative_scale) < width)? - (gtk_adjustment_get_page_size (hadjustment) / relative_scale)+1:(width); + ceil(gtk_adjustment_get_page_size (hadjustment) / relative_scale):(width); subpixbuf_height = (gint)((gtk_adjustment_get_page_size (vadjustment) / relative_scale) < height)? - (gtk_adjustment_get_page_size (vadjustment) / relative_scale)+1:(height); + ceil(gtk_adjustment_get_page_size (vadjustment) / relative_scale):(height); break; } @@ -1770,6 +1786,14 @@ cb_rstto_image_viewer_queued_repaint (RsttoImageViewer *viewer) g_object_unref (tmp_pixbuf); } + else + { + g_warning ("TMP Pixbuf could not be created, [x:%d,y:%d,w:%d,h:%d]", + subpixbuf_x_offset, + subpixbuf_y_offset, + subpixbuf_width, + subpixbuf_height); + } } /* -- 1.7.7 From ec9ec15fa14ce9036c2aaa936319b0f39552a8d1 Mon Sep 17 00:00:00 2001 From: Stephan Arts Date: Sun, 23 Oct 2011 08:12:31 +0200 Subject: [PATCH 3/3] Bump version number --- configure.in.in | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/configure.in.in b/configure.in.in index 9286718..78de58f 100644 --- a/configure.in.in +++ b/configure.in.in @@ -11,7 +11,7 @@ dnl *** Version information *** dnl *************************** m4_define([ristretto_version_major], [0]) m4_define([ristretto_version_minor], [1]) -m4_define([ristretto_version_micro], [0]) +m4_define([ristretto_version_micro], [1]) m4_define([ristretto_version_build], [r@REVISION@]) m4_define([ristretto_version_tag], [git]) # Leave empty for releases m4_define([ristretto_version], [ristretto_version_major().ristretto_version_minor().ristretto_version_micro()ifelse(ristretto_version_tag(), [], [], [ristretto_version_tag()-ristretto_version_build()])]) -- 1.7.7