[gthumb] use a faster filter if the image is big
- From: Paolo Bacchilega <paobac src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gthumb] use a faster filter if the image is big
- Date: Sun, 30 Jun 2013 08:42:29 +0000 (UTC)
commit 63eeb56356eaf10a233312943be67e08fe82e4de
Author: Paolo Bacchilega <paobac src gnome org>
Date: Sun Jun 30 10:26:49 2013 +0200
use a faster filter if the image is big
gthumb/gth-image-dragger.c | 23 ++++++++++++++++++-----
1 files changed, 18 insertions(+), 5 deletions(-)
---
diff --git a/gthumb/gth-image-dragger.c b/gthumb/gth-image-dragger.c
index 9b6d8eb..0b3fe27 100644
--- a/gthumb/gth-image-dragger.c
+++ b/gthumb/gth-image-dragger.c
@@ -28,6 +28,9 @@
#include "pixbuf-utils.h"
+#define SIZE_TOO_BIG_FOR_SCALE_BILINEAR (3000 * 3000)
+
+
struct _GthImageDraggerPrivate {
GthImageViewer *viewer;
gboolean draggable;
@@ -310,6 +313,7 @@ typedef struct {
int new_width;
int new_height;
cairo_surface_t *scaled;
+ scale_filter_t filter;
} ScaleData;
@@ -333,7 +337,7 @@ _gth_image_dragger_scale_exec (GthAsyncTask *task,
scale_data->scaled = _cairo_image_surface_scale (scale_data->image,
scale_data->new_width,
scale_data->new_height,
- SCALE_FILTER_GOOD,
+ scale_data->filter,
task);
return NULL;
@@ -367,7 +371,8 @@ static void
_gth_image_dragger_create_scaled_high_quality (GthImageDragger *self,
cairo_surface_t *image,
int new_width,
- int new_height)
+ int new_height,
+ scale_filter_t filter)
{
ScaleData *scale_data;
@@ -380,6 +385,7 @@ _gth_image_dragger_create_scaled_high_quality (GthImageDragger *self,
scale_data->new_width = new_width;
scale_data->new_height = new_height;
scale_data->scaled = NULL;
+ scale_data->filter = filter;
self->priv->scale_task = gth_async_task_new (NULL,
_gth_image_dragger_scale_exec,
@@ -399,6 +405,7 @@ _gth_image_dragger_update_scaled_image (GthImageDragger *self)
int original_width, original_height;
double zoom;
int new_width, new_height;
+ scale_filter_t filter;
if (self->priv->scale_task != NULL) {
gth_task_cancel (self->priv->scale_task);
@@ -434,10 +441,16 @@ _gth_image_dragger_update_scaled_image (GthImageDragger *self)
new_width = zoom * image_width;
new_height = zoom * image_height;
- /*self->priv->scaled = _cairo_image_surface_scale_nearest (image, new_width, new_height);*/
- self->priv->scaled = _cairo_image_surface_scale_bilinear (image, new_width, new_height);
+ if (image_width * image_height > SIZE_TOO_BIG_FOR_SCALE_BILINEAR) {
+ self->priv->scaled = _cairo_image_surface_scale_nearest (image, new_width, new_height);
+ filter = SCALE_FILTER_BOX;
+ }
+ else {
+ self->priv->scaled = _cairo_image_surface_scale_bilinear (image, new_width, new_height);
+ filter = SCALE_FILTER_TRIANGLE;
+ }
- _gth_image_dragger_create_scaled_high_quality (self, image, new_width, new_height);
+ _gth_image_dragger_create_scaled_high_quality (self, image, new_width, new_height, filter);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]