summaryrefslogtreecommitdiffstats
path: root/src/dialogs/eek-preview.cpp
diff options
context:
space:
mode:
authorJon A. Cruz <jon@joncruz.org>2009-02-18 08:56:07 +0000
committerjoncruz <joncruz@users.sourceforge.net>2009-02-18 08:56:07 +0000
commitbc2ef24b8f59abc29117dd7430e8b20eb3712318 (patch)
treee35f7257da376fefafd4415c6cb4ca877c963ba7 /src/dialogs/eek-preview.cpp
parentWarning cleanup. (diff)
downloadinkscape-bc2ef24b8f59abc29117dd7430e8b20eb3712318.tar.gz
inkscape-bc2ef24b8f59abc29117dd7430e8b20eb3712318.zip
Scale preview pixmap as needed and cache scaled version.
(bzr r7318)
Diffstat (limited to 'src/dialogs/eek-preview.cpp')
-rw-r--r--src/dialogs/eek-preview.cpp22
1 files changed, 21 insertions, 1 deletions
diff --git a/src/dialogs/eek-preview.cpp b/src/dialogs/eek-preview.cpp
index e0d0fb4e2..1c1adf543 100644
--- a/src/dialogs/eek-preview.cpp
+++ b/src/dialogs/eek-preview.cpp
@@ -73,6 +73,13 @@ void eek_preview_set_pixbuf( EekPreview* preview, GdkPixbuf* pixbuf )
preview->_previewPixbuf = pixbuf;
gtk_widget_queue_draw(GTK_WIDGET(preview));
+
+ if (preview->_scaled) {
+ g_object_unref(preview->_scaled);
+ preview->_scaled = 0;
+ }
+ preview->_scaledW = gdk_pixbuf_get_width(preview->_previewPixbuf);
+ preview->_scaledH = gdk_pixbuf_get_height(preview->_previewPixbuf);
}
@@ -320,7 +327,17 @@ gboolean eek_preview_expose_event( GtkWidget* widget, GdkEventExpose* event )
gint w = 0;
gint h = 0;
gdk_drawable_get_size(drawable, &w, &h);
- gdk_draw_pixbuf( drawable, 0, preview->_previewPixbuf, 0, 0, 0, 0, w, h, GDK_RGB_DITHER_NONE, 0, 0 );
+ if ((w != preview->_scaledW) || (h != preview->_scaledH)) {
+ if (preview->_scaled) {
+ g_object_unref(preview->_scaled);
+ }
+ preview->_scaled = gdk_pixbuf_scale_simple(preview->_previewPixbuf, w, h, GDK_INTERP_BILINEAR);
+ preview->_scaledW = w;
+ preview->_scaledH = h;
+ }
+
+ GdkPixbuf* pix = (preview->_scaled) ? preview->_scaled : preview->_previewPixbuf;
+ gdk_draw_pixbuf( drawable, 0, pix, 0, 0, 0, 0, w, h, GDK_RGB_DITHER_NONE, 0, 0 );
}
@@ -647,6 +664,8 @@ static void eek_preview_init( EekPreview *preview )
preview->_r = 0x80;
preview->_g = 0x80;
preview->_b = 0xcc;
+ preview->_scaledW = 0;
+ preview->_scaledH = 0;
preview->_hot = FALSE;
preview->_within = FALSE;
@@ -658,6 +677,7 @@ static void eek_preview_init( EekPreview *preview )
preview->_ratio = 100;
preview->_previewPixbuf = 0;
+ preview->_scaled = 0;
/*
GdkColor color = {0};