From: Christian Dywan Date: Thu, 21 May 2009 17:14:46 +0000 (+0200) Subject: Generate thumbnails as needed without saving to disk X-Git-Url: https://spindle.queued.net/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a102146f15cf84260d9d160b919bb63d4837ab4c;p=midori Generate thumbnails as needed without saving to disk --- diff --git a/midori/midori-browser.c b/midori/midori-browser.c index 394d23ef..171ceeb9 100644 --- a/midori/midori-browser.c +++ b/midori/midori-browser.c @@ -399,7 +399,9 @@ midori_view_notify_icon_cb (MidoriView* view, } static GdkPixbuf* -midori_view_get_snapshot (MidoriView* view) +midori_view_get_snapshot (MidoriView* view, + guint width, + guint height) { GtkWidget* web_view; GdkRectangle rect; @@ -437,57 +439,21 @@ midori_view_get_snapshot (MidoriView* view) pixbuf = gdk_pixbuf_get_from_drawable (NULL, pixmap, colormap, 0, 0, 0, 0, rect.width, rect.height); g_object_unref (pixmap); - return pixbuf; -} - -static void -midori_browser_update_thumbnail (GtkWidget* view, - const gchar* uri) -{ - GtkWidget* child; - - #if GTK_CHECK_VERSION (2, 14, 0) - if (midori_view_get_load_status (MIDORI_VIEW (view)) != MIDORI_LOAD_FINISHED) - return; - if ((child = gtk_bin_get_child (GTK_BIN (view)))) + if (width || height) { - static gchar* folder = NULL; - GdkPixbuf* pixbuf; - gchar* thumb; - gchar* filename; - - if (G_UNLIKELY (!folder)) - { - folder = g_build_filename (g_get_user_cache_dir (), PACKAGE_NAME, - "thumbs", NULL); - g_mkdir_with_parents (folder, 0700); - } - - thumb = g_compute_checksum_for_string (G_CHECKSUM_MD5, uri, -1); - filename = g_build_filename (folder, thumb, NULL); - g_free (thumb); - - /* FIXME: Regenerate if needed */ - if (g_file_test (filename, G_FILE_TEST_EXISTS)) - return; - - pixbuf = midori_view_get_snapshot (MIDORI_VIEW (view)); - if (pixbuf) - { - GError* error = NULL; - gdk_pixbuf_save (pixbuf, filename, "jpeg", &error, "quality", "70", NULL); - if (error != NULL) - { - g_error ("%s", error->message); - g_error_free (error); - } - g_free (filename); - if (pixbuf) - g_object_unref (pixbuf); - } + GdkPixbuf* scaled; + if (!width) + width = rect.width; + if (!height) + height = rect.height; + scaled = gdk_pixbuf_scale_simple (pixbuf, width, height, + GDK_INTERP_TILES); + g_object_unref (pixbuf); + return scaled; } - #endif + + return pixbuf; } static void @@ -519,8 +485,6 @@ midori_view_notify_load_status_cb (GtkWidget* view, MIDORI_LOCATION_ACTION (action), NULL); g_object_notify (G_OBJECT (browser), "uri"); } - if (browser->speed_dial_in_new_tabs) - midori_browser_update_thumbnail (view, uri); _midori_browser_update_interface (browser); _midori_browser_set_statusbar_text (browser, NULL); @@ -979,9 +943,7 @@ midori_browser_speed_dial_get_next_free_slot (void) static void midori_browser_add_speed_dial (MidoriBrowser* browser) { - gchar* folder; - gchar* thumb; - gchar* filename; + GdkPixbuf* img; gchar* replace_from; gchar* replace_by; gsize len; @@ -1036,13 +998,8 @@ midori_browser_add_speed_dial (MidoriBrowser* browser) g_regex_unref (reg_unsafe); } - folder = g_build_filename (g_get_user_cache_dir (), PACKAGE_NAME, "thumbs", NULL); - thumb = g_compute_checksum_for_string (G_CHECKSUM_MD5, uri, -1); - filename = g_build_filename (folder, thumb, NULL); - - if (g_file_test (filename, G_FILE_TEST_EXISTS)) + if ((img = midori_view_get_snapshot (MIDORI_VIEW (view), 160, 107))) { - GdkPixbuf* img; GRegex* regex; gchar* replace; gchar* file_content; @@ -1056,7 +1013,6 @@ midori_browser_add_speed_dial (MidoriBrowser* browser) if (g_file_get_contents (body_fname, &speed_dial_body, NULL, NULL)) { - img = gdk_pixbuf_new_from_file_at_scale (filename, 160, 107, FALSE, NULL); gdk_pixbuf_save_to_buffer (img, &file_content, &sz, "png", NULL, NULL); encoded = g_base64_encode ((guchar *)file_content, sz); @@ -1085,9 +1041,6 @@ midori_browser_add_speed_dial (MidoriBrowser* browser) } g_free (body_fname); } - - g_free (thumb); - g_free (filename); } @@ -3816,9 +3769,6 @@ gtk_notebook_switch_page_cb (GtkWidget* notebook, _midori_browser_set_statusbar_text (browser, NULL); _midori_browser_update_interface (browser); _midori_browser_update_progress (browser, MIDORI_VIEW (view)); - - if (browser->speed_dial_in_new_tabs) - midori_browser_update_thumbnail (view, uri); } static void