[gthumb] make the preloader actually preload the images



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]