[gthumb] [slideshow] use the preloader to spped-up image loading
- From: Paolo Bacchilega <paobac src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gthumb] [slideshow] use the preloader to spped-up image loading
- Date: Sat, 13 Feb 2010 16:26:24 +0000 (UTC)
commit f33b87a765ba6fbf627fad8e3772e7a627268784
Author: Paolo Bacchilega <paobac src gnome org>
Date: Wed Feb 10 16:41:00 2010 +0100
[slideshow] use the preloader to spped-up image loading
extensions/slideshow/gth-slideshow.c | 97 ++++++++++++++++++++++------------
1 files changed, 64 insertions(+), 33 deletions(-)
---
diff --git a/extensions/slideshow/gth-slideshow.c b/extensions/slideshow/gth-slideshow.c
index b9089ab..15d82c6 100644
--- a/extensions/slideshow/gth-slideshow.c
+++ b/extensions/slideshow/gth-slideshow.c
@@ -32,24 +32,24 @@
struct _GthSlideshowPrivate {
- GthBrowser *browser;
- GList *file_list; /* GthFileData */
- gboolean automatic;
- gboolean loop;
- GList *current;
- GthImageLoader *image_loader;
- GList *transitions; /* GthTransition */
- int n_transitions;
- GthTransition *transition;
- ClutterTimeline *timeline;
- ClutterActor *image1;
- ClutterActor *image2;
- guint next_event;
- guint delay;
- guint hide_cursor_event;
- GRand *rand;
- gboolean first_show;
- gboolean one_loaded;
+ GthBrowser *browser;
+ GList *file_list; /* GthFileData */
+ gboolean automatic;
+ gboolean loop;
+ GList *current;
+ GthImagePreloader *preloader;
+ GList *transitions; /* GthTransition */
+ int n_transitions;
+ GthTransition *transition;
+ ClutterTimeline *timeline;
+ ClutterActor *image1;
+ ClutterActor *image2;
+ guint next_event;
+ guint delay;
+ guint hide_cursor_event;
+ GRand *rand;
+ gboolean first_show;
+ gboolean one_loaded;
};
@@ -74,6 +74,10 @@ _gth_slideshow_close (GthSlideshow *self)
static void
_gth_slideshow_load_current_image (GthSlideshow *self)
{
+ GthFileData *requested_file;
+ GthFileData *next_file;
+ GthFileData *prev_file;
+
if (self->priv->next_event != 0) {
g_source_remove (self->priv->next_event);
self->priv->next_event = 0;
@@ -91,8 +95,19 @@ _gth_slideshow_load_current_image (GthSlideshow *self)
self->priv->current = g_list_last (self->priv->file_list);
}
- gth_image_loader_set_file_data (GTH_IMAGE_LOADER (self->priv->image_loader), (GthFileData *) self->priv->current->data);
- gth_image_loader_load (GTH_IMAGE_LOADER (self->priv->image_loader));
+ requested_file = (GthFileData *) self->priv->current->data;
+ if (self->priv->current->next != NULL)
+ next_file = (GthFileData *) self->priv->current->next->data;
+ else
+ next_file = NULL;
+ if (self->priv->current->prev != NULL)
+ prev_file = (GthFileData *) self->priv->current->prev->data;
+ else
+ prev_file = NULL;
+ gth_image_preloader_load (self->priv->preloader,
+ requested_file,
+ next_file,
+ prev_file);
}
@@ -274,16 +289,18 @@ _gth_slideshow_get_transition (GthSlideshow *self)
static void
-image_loader_ready_cb (GthImageLoader *image_loader,
- GError *error,
- GthSlideshow *self)
+image_preloader_requested_ready_cb (GthImagePreloader *preloader,
+ GError *error,
+ gpointer user_data)
{
- GdkPixbuf *pixbuf;
- GdkPixbuf *image;
- ClutterActor *texture;
- int pixbuf_w, pixbuf_h;
- float stage_w, stage_h;
- int pixbuf_x, pixbuf_y;
+ GthSlideshow *self = user_data;
+ GthImageLoader *image_loader;
+ GdkPixbuf *pixbuf;
+ GdkPixbuf *image;
+ ClutterActor *texture;
+ int pixbuf_w, pixbuf_h;
+ float stage_w, stage_h;
+ int pixbuf_x, pixbuf_y;
if (error != NULL) {
g_clear_error (&error);
@@ -297,7 +314,18 @@ image_loader_ready_cb (GthImageLoader *image_loader,
if ((stage_w == 0) || (stage_h == 0))
return;
- pixbuf = gth_image_loader_get_pixbuf (GTH_IMAGE_LOADER (image_loader));
+ image_loader = gth_image_preloader_get_loader (self->priv->preloader, (GthFileData *) self->priv->current->data);
+ if (image_loader == NULL) {
+ _gth_slideshow_load_next_image (self);
+ return;
+ }
+
+ pixbuf = gth_image_loader_get_pixbuf (image_loader);
+ if (image_loader == NULL) {
+ _gth_slideshow_load_next_image (self);
+ return;
+ }
+
image = gdk_pixbuf_new (gdk_pixbuf_get_colorspace (pixbuf),
FALSE,
gdk_pixbuf_get_bits_per_sample (pixbuf),
@@ -361,8 +389,11 @@ gth_slideshow_init (GthSlideshow *self)
self->priv->rand = g_rand_new ();
self->priv->first_show = TRUE;
- self->priv->image_loader = gth_image_loader_new (FALSE);
- g_signal_connect (self->priv->image_loader, "ready", G_CALLBACK (image_loader_ready_cb), self);
+ self->priv->preloader = gth_image_preloader_new ();
+ g_signal_connect (self->priv->preloader,
+ "requested_ready",
+ G_CALLBACK (image_preloader_requested_ready_cb),
+ self);
}
@@ -378,7 +409,7 @@ gth_slideshow_finalize (GObject *object)
_g_object_list_unref (self->priv->file_list);
_g_object_unref (self->priv->browser);
- _g_object_unref (self->priv->image_loader);
+ _g_object_unref (self->priv->preloader);
_g_object_unref (self->priv->timeline);
_g_object_list_unref (self->priv->transitions);
g_rand_free (self->priv->rand);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]