[gthumb] make the preloader actually preload the images
- From: Paolo Bacchilega <paobac src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gthumb] make the preloader actually preload the images
- Date: Sun, 2 Apr 2017 16:40:28 +0000 (UTC)
commit 908e01a51ba9af4a2f5c6f6f67a6d55367bc4afd
Author: Paolo Bacchilega <paobac src gnome org>
Date: Sun Apr 2 18:30:37 2017 +0200
make the preloader actually preload the images
requesting a better quality or the original image should not stop
perloading the other images
extensions/image_viewer/gth-image-viewer-page.c | 99 +++++++++++++----------
1 files changed, 56 insertions(+), 43 deletions(-)
---
diff --git a/extensions/image_viewer/gth-image-viewer-page.c b/extensions/image_viewer/gth-image-viewer-page.c
index 732876c..8d418d6 100644
--- a/extensions/image_viewer/gth-image-viewer-page.c
+++ b/extensions/image_viewer/gth-image-viewer-page.c
@@ -38,6 +38,8 @@
#define TOGGLE_ANIMATION_BUTTON 4
#define STEP_ANIMATION_BUTTON 5
#undef ALWAYS_LOAD_ORIGINAL_SIZE
+#define N_FORWARD_PRELOADERS 2
+#define N_BACKWARD_PRELOADERS 2
static void gth_viewer_page_interface_init (GthViewerPageInterface *iface);
@@ -108,6 +110,8 @@ struct _GthImageViewerPagePrivate {
gboolean pointer_on_overview;
guint hide_overview_id;
gboolean apply_icc_profile;
+ GthFileData *next_file_data[N_FORWARD_PRELOADERS];
+ GthFileData *prev_file_data[N_BACKWARD_PRELOADERS];
};
@@ -288,12 +292,29 @@ _g_mime_type_can_load_different_quality (const char *mime_type)
static void
-_gth_image_preloader_init_preloader (GthImageViewerPage *self)
+_gth_image_viewer_page_load_with_preloader (GthImageViewerPage *self,
+ GthFileData *file_data,
+ int requested_size,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
{
if (self->priv->apply_icc_profile)
gth_image_preloader_set_out_profile (self->priv->preloader, gth_browser_get_screen_profile
(self->priv->browser));
else
gth_image_preloader_set_out_profile (self->priv->preloader, NULL);
+
+ gth_image_preloader_load (self->priv->preloader,
+ file_data,
+ requested_size,
+ cancellable,
+ callback,
+ user_data,
+ N_FORWARD_PRELOADERS + N_BACKWARD_PRELOADERS,
+ self->priv->next_file_data[0],
+ self->priv->next_file_data[1],
+ self->priv->prev_file_data[0],
+ self->priv->prev_file_data[1]);
}
@@ -313,15 +334,12 @@ update_quality_cb (gpointer user_data)
if (! self->priv->image_changed && ! _g_mime_type_can_load_different_quality
(gth_file_data_get_mime_type (self->priv->file_data)))
return FALSE;
- _gth_image_preloader_init_preloader (self);
- gth_image_preloader_load (self->priv->preloader,
- self->priv->image_changed ? GTH_MODIFIED_IMAGE : self->priv->file_data,
- _gth_image_preloader_get_requested_size_for_current_image (self),
- NULL,
- different_quality_ready_cb,
- self,
- GTH_NO_PRELOADERS,
- NULL);
+ _gth_image_viewer_page_load_with_preloader (self,
+ self->priv->image_changed ? GTH_MODIFIED_IMAGE :
self->priv->file_data,
+ _gth_image_preloader_get_requested_size_for_current_image
(self),
+ NULL,
+ different_quality_ready_cb,
+ self);
return FALSE;
}
@@ -1207,10 +1225,6 @@ clear_data:
}
-#define N_FORWARD_PRELOADERS 2
-#define N_BACKWARD_PRELOADERS 2
-
-
static void
_gth_image_viewer_page_load (GthImageViewerPage *self,
GthFileData *file_data)
@@ -1218,8 +1232,6 @@ _gth_image_viewer_page_load (GthImageViewerPage *self,
GthFileStore *file_store;
GtkTreeIter iter;
int i;
- GthFileData *next_file_data[N_FORWARD_PRELOADERS];
- GthFileData *prev_file_data[N_BACKWARD_PRELOADERS];
if (self->priv->file_data != file_data) {
_g_object_unref (self->priv->file_data);
@@ -1229,9 +1241,9 @@ _gth_image_viewer_page_load (GthImageViewerPage *self,
self->priv->loading_image = TRUE;
for (i = 0; i < N_FORWARD_PRELOADERS; i++)
- next_file_data[i] = NULL;
+ _g_clear_object (&self->priv->next_file_data[i]);
for (i = 0; i < N_BACKWARD_PRELOADERS; i++)
- prev_file_data[i] = NULL;
+ _g_clear_object (&self->priv->prev_file_data[i]);
file_store = gth_browser_get_file_store (self->priv->browser);
if (gth_file_store_find_visible (file_store, self->priv->file_data->file, &iter)) {
@@ -1241,36 +1253,29 @@ _gth_image_viewer_page_load (GthImageViewerPage *self,
for (i = 0; i < N_FORWARD_PRELOADERS; i++) {
if (! gth_file_store_get_next_visible (file_store, &next_iter))
break;
- next_file_data[i] = gth_file_store_get_file (file_store, &next_iter);
+ self->priv->next_file_data[i] = g_object_ref (gth_file_store_get_file (file_store,
&next_iter));
}
next_iter = iter;
for (i = 0; i < N_BACKWARD_PRELOADERS; i++) {
if (! gth_file_store_get_prev_visible (file_store, &next_iter))
break;
- prev_file_data[i] = gth_file_store_get_file (file_store, &next_iter);
+ self->priv->prev_file_data[i] = g_object_ref (gth_file_store_get_file (file_store,
&next_iter));
}
gth_image_viewer_set_void (GTH_IMAGE_VIEWER (self->priv->viewer));
}
- _gth_image_preloader_init_preloader (self);
- gth_image_preloader_load (self->priv->preloader,
- self->priv->file_data,
+ _gth_image_viewer_page_load_with_preloader (self,
+ self->priv->file_data,
#ifdef ALWAYS_LOAD_ORIGINAL_SIZE
- GTH_ORIGINAL_SIZE,
+ GTH_ORIGINAL_SIZE,
#else
- _gth_image_preloader_get_requested_size_for_next_images (self),
+ _gth_image_preloader_get_requested_size_for_next_images
(self),
#endif
- NULL,
- preloader_load_ready_cb,
- self,
- N_FORWARD_PRELOADERS + N_BACKWARD_PRELOADERS,
- next_file_data[0],
- next_file_data[1],
- prev_file_data[0],
- prev_file_data[1]);
-
+ NULL,
+ preloader_load_ready_cb,
+ self);
}
@@ -1726,6 +1731,7 @@ static void
gth_image_viewer_page_finalize (GObject *obj)
{
GthImageViewerPage *self;
+ int i;
self = GTH_IMAGE_VIEWER_PAGE (obj);
@@ -1747,6 +1753,11 @@ gth_image_viewer_page_finalize (GObject *obj)
_g_object_unref (self->priv->file_data);
_g_object_unref (self->priv->last_loaded);
+ for (i = 0; i < N_FORWARD_PRELOADERS; i++)
+ _g_clear_object (&self->priv->next_file_data[i]);
+ for (i = 0; i < N_BACKWARD_PRELOADERS; i++)
+ _g_clear_object (&self->priv->prev_file_data[i]);
+
G_OBJECT_CLASS (gth_image_viewer_page_parent_class)->finalize (obj);
}
@@ -1807,6 +1818,11 @@ gth_image_viewer_page_init (GthImageViewerPage *self)
self->priv->pointer_on_viewer = FALSE;
self->priv->hide_overview_id = 0;
self->priv->apply_icc_profile = TRUE;
+
+ for (i = 0; i < N_FORWARD_PRELOADERS; i++)
+ self->priv->next_file_data[i] = NULL;
+ for (i = 0; i < N_BACKWARD_PRELOADERS; i++)
+ self->priv->prev_file_data[i] = NULL;
}
@@ -2098,15 +2114,12 @@ gth_image_viewer_page_get_original (GthImageViewerPage *self,
get_original_data_free (data);
}
else {
- _gth_image_preloader_init_preloader (self);
- gth_image_preloader_load (self->priv->preloader,
- self->priv->image_changed ? GTH_MODIFIED_IMAGE :
self->priv->file_data,
- GTH_ORIGINAL_SIZE,
- data->cancellable,
- original_image_ready_cb,
- data,
- GTH_NO_PRELOADERS,
- NULL);
+ _gth_image_viewer_page_load_with_preloader (self,
+ self->priv->image_changed ? GTH_MODIFIED_IMAGE :
self->priv->file_data,
+ GTH_ORIGINAL_SIZE,
+ data->cancellable,
+ original_image_ready_cb,
+ data);
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]