[gthumb: 37/40] removed unnecessary operations when the original size is ready
- From: Paolo Bacchilega <paobac src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gthumb: 37/40] removed unnecessary operations when the original size is ready
- Date: Fri, 10 Sep 2010 16:59:18 +0000 (UTC)
commit b426544b399e377075f200ade64cb332056c3a65
Author: Paolo Bacchilega <paobac src gnome org>
Date: Fri Sep 10 10:22:08 2010 +0200
removed unnecessary operations when the original size is ready
do not reset the zoom and reload the metadata when the
image has been loaded at the original size.
extensions/image_viewer/gth-image-viewer-page.c | 50 ++++++++++++++++++-----
gthumb/gth-image-preloader.c | 43 ++++++++++++++++++-
gthumb/gth-image-preloader.h | 8 +++-
gthumb/gth-image-viewer.c | 45 ++++++++++++++++-----
gthumb/gth-image-viewer.h | 4 ++
5 files changed, 127 insertions(+), 23 deletions(-)
---
diff --git a/extensions/image_viewer/gth-image-viewer-page.c b/extensions/image_viewer/gth-image-viewer-page.c
index 1c846f0..85c95fe 100644
--- a/extensions/image_viewer/gth-image-viewer-page.c
+++ b/extensions/image_viewer/gth-image-viewer-page.c
@@ -39,7 +39,8 @@ struct _GthImageViewerPagePrivate {
guint merge_id;
GthImageHistory *history;
GthFileData *file_data;
- gulong preloader_sig_id;
+ gulong requested_ready_id;
+ gulong original_size_ready_id;
guint cnxn_id[GCONF_NOTIFICATIONS];
guint hide_mouse_timeout;
guint motion_signal;
@@ -302,15 +303,12 @@ image_preloader_requested_ready_cb (GthImagePreloader *preloader,
}
gth_viewer_page_focus (GTH_VIEWER_PAGE (self));
-
gth_image_viewer_set_animation (GTH_IMAGE_VIEWER (self->priv->viewer),
animation,
original_width,
original_height);
-
if (self->priv->shrink_wrap)
gth_image_viewer_page_shrink_wrap (self, TRUE);
-
gth_image_history_clear (self->priv->history);
gth_image_history_add_image (self->priv->history,
gth_image_viewer_get_current_pixbuf (GTH_IMAGE_VIEWER (self->priv->viewer)),
@@ -320,6 +318,32 @@ image_preloader_requested_ready_cb (GthImagePreloader *preloader,
static void
+image_preloader_original_size_ready_cb (GthImagePreloader *preloader,
+ GthFileData *requested,
+ GdkPixbufAnimation *animation,
+ int original_width,
+ int original_height,
+ GError *error,
+ GthImageViewerPage *self)
+{
+ if (! _g_file_equal (requested->file, self->priv->file_data->file))
+ return;
+
+ if (error != NULL)
+ return;
+
+ gth_image_viewer_set_better_quality (GTH_IMAGE_VIEWER (self->priv->viewer),
+ animation,
+ original_width,
+ original_height);
+ gth_image_history_clear (self->priv->history);
+ gth_image_history_add_image (self->priv->history,
+ gth_image_viewer_get_current_pixbuf (GTH_IMAGE_VIEWER (self->priv->viewer)),
+ FALSE);
+}
+
+
+static void
pref_zoom_quality_changed (GConfClient *client,
guint cnxn_id,
GConfEntry *entry,
@@ -452,10 +476,14 @@ gth_image_viewer_page_real_activate (GthViewerPage *base,
gtk_ui_manager_insert_action_group (gth_browser_get_ui_manager (browser), self->priv->actions, 0);
self->priv->preloader = gth_browser_get_image_preloader (browser);
- self->priv->preloader_sig_id = g_signal_connect (G_OBJECT (self->priv->preloader),
- "requested_ready",
- G_CALLBACK (image_preloader_requested_ready_cb),
- self);
+ self->priv->requested_ready_id = g_signal_connect (G_OBJECT (self->priv->preloader),
+ "requested_ready",
+ G_CALLBACK (image_preloader_requested_ready_cb),
+ self);
+ self->priv->original_size_ready_id = g_signal_connect (G_OBJECT (self->priv->preloader),
+ "original_size_ready",
+ G_CALLBACK (image_preloader_original_size_ready_cb),
+ self);
self->priv->viewer = gth_image_viewer_new ();
gth_image_viewer_set_zoom_quality (GTH_IMAGE_VIEWER (self->priv->viewer), eel_gconf_get_enum (PREF_ZOOM_QUALITY, GTH_TYPE_ZOOM_QUALITY, GTH_ZOOM_QUALITY_HIGH));
@@ -572,8 +600,10 @@ gth_image_viewer_page_real_deactivate (GthViewerPage *base)
g_object_unref (self->priv->actions);
self->priv->actions = NULL;
- g_signal_handler_disconnect (self->priv->preloader, self->priv->preloader_sig_id);
- self->priv->preloader_sig_id = 0;
+ g_signal_handler_disconnect (self->priv->preloader, self->priv->requested_ready_id);
+ g_signal_handler_disconnect (self->priv->preloader, self->priv->original_size_ready_id);
+ self->priv->requested_ready_id = 0;
+ self->priv->original_size_ready_id = 0;
g_object_unref (self->priv->preloader);
self->priv->preloader = NULL;
diff --git a/gthumb/gth-image-preloader.c b/gthumb/gth-image-preloader.c
index 5b81305..bf57b54 100644
--- a/gthumb/gth-image-preloader.c
+++ b/gthumb/gth-image-preloader.c
@@ -36,6 +36,7 @@
enum {
REQUESTED_READY,
+ ORIGINAL_SIZE_READY,
LAST_SIGNAL
};
@@ -175,6 +176,30 @@ preloader_needs_second_step (Preloader *preloader)
}
+static int
+preloader_signal_to_emit (Preloader *preloader)
+{
+ int signal = -1;
+
+ switch (preloader->self->priv->load_policy) {
+ case GTH_LOAD_POLICY_ONE_STEP:
+ signal = REQUESTED_READY;
+ break;
+
+ case GTH_LOAD_POLICY_TWO_STEPS:
+ if (preloader->self->priv->requested_size == -1)
+ signal = ORIGINAL_SIZE_READY;
+ else
+ signal = REQUESTED_READY;
+ break;
+ }
+
+ g_assert (signal != -1);
+
+ return signal;
+}
+
+
/* -- GthImagePreloader -- */
@@ -228,6 +253,20 @@ gth_image_preloader_class_init (GthImagePreloaderClass *class)
G_TYPE_INT,
G_TYPE_INT,
G_TYPE_POINTER);
+ gth_image_preloader_signals[ORIGINAL_SIZE_READY] =
+ g_signal_new ("original_size_ready",
+ G_TYPE_FROM_CLASS (class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GthImagePreloaderClass, original_size_ready),
+ NULL, NULL,
+ gth_marshal_VOID__OBJECT_OBJECT_INT_INT_POINTER,
+ G_TYPE_NONE,
+ 5,
+ G_TYPE_OBJECT,
+ G_TYPE_OBJECT,
+ G_TYPE_INT,
+ G_TYPE_INT,
+ G_TYPE_POINTER);
object_class = G_OBJECT_CLASS (class);
object_class->finalize = gth_image_preloader_finalize;
@@ -389,7 +428,7 @@ image_loader_ready_cb (GObject *source_object,
#endif
g_signal_emit (G_OBJECT (self),
- gth_image_preloader_signals[REQUESTED_READY],
+ gth_image_preloader_signals[preloader_signal_to_emit (preloader)],
0,
preloader->file_data,
preloader->animation,
@@ -571,7 +610,7 @@ assign_loaders (LoadData *load_data)
self->priv->requested = i;
g_signal_emit (G_OBJECT (self),
- gth_image_preloader_signals[REQUESTED_READY],
+ gth_image_preloader_signals[preloader_signal_to_emit (preloader)],
0,
preloader->file_data,
preloader->animation,
diff --git a/gthumb/gth-image-preloader.h b/gthumb/gth-image-preloader.h
index 46fdbff..c2db0b4 100644
--- a/gthumb/gth-image-preloader.h
+++ b/gthumb/gth-image-preloader.h
@@ -54,7 +54,13 @@ struct _GthImagePreloaderClass {
/*< signals >*/
- void (* requested_ready) (GthImagePreloader *preloader,
+ void (* requested_ready) (GthImagePreloader *preloader,
+ GthFileData *requested,
+ GdkPixbufAnimation *animation,
+ int original_width,
+ int original_height,
+ GError *error);
+ void (* original_size_ready) (GthImagePreloader *preloader,
GthFileData *requested,
GdkPixbufAnimation *animation,
int original_width,
diff --git a/gthumb/gth-image-viewer.c b/gthumb/gth-image-viewer.c
index 085366c..62a85b7 100644
--- a/gthumb/gth-image-viewer.c
+++ b/gthumb/gth-image-viewer.c
@@ -1616,17 +1616,21 @@ _gth_image_viewer_set_original_size (GthImageViewer *self,
static void
-_gth_image_viewer_content_changed (GthImageViewer *self)
+_gth_image_viewer_content_changed (GthImageViewer *self,
+ gboolean better_quality)
{
halt_animation (self);
- if (self->priv->reset_scrollbars) {
+ if (! better_quality && self->priv->reset_scrollbars) {
self->x_offset = 0;
self->y_offset = 0;
}
gth_image_viewer_tool_image_changed (self->priv->tool);
+ if (better_quality)
+ return;
+
switch (self->priv->zoom_change) {
case GTH_ZOOM_CHANGE_ACTUAL_SIZE:
gth_image_viewer_set_zoom (self, 1.0);
@@ -1660,11 +1664,12 @@ _gth_image_viewer_content_changed (GthImageViewer *self)
}
-void
-gth_image_viewer_set_animation (GthImageViewer *self,
- GdkPixbufAnimation *animation,
- int original_width,
- int original_height)
+static void
+_set_animation (GthImageViewer *self,
+ GdkPixbufAnimation *animation,
+ int original_width,
+ int original_height,
+ gboolean better_quality)
{
g_return_if_fail (self != NULL);
@@ -1681,7 +1686,27 @@ gth_image_viewer_set_animation (GthImageViewer *self,
}
_gth_image_viewer_set_original_size (self, original_width, original_height);
- _gth_image_viewer_content_changed (self);
+ _gth_image_viewer_content_changed (self, better_quality);
+}
+
+
+void
+gth_image_viewer_set_animation (GthImageViewer *self,
+ GdkPixbufAnimation *animation,
+ int original_width,
+ int original_height)
+{
+ _set_animation (self, animation, original_width, original_height, FALSE);
+}
+
+
+void
+gth_image_viewer_set_better_quality (GthImageViewer *self,
+ GdkPixbufAnimation *animation,
+ int original_width,
+ int original_height)
+{
+ _set_animation (self, animation, original_width, original_height, TRUE);
}
@@ -1702,7 +1727,7 @@ gth_image_viewer_set_pixbuf (GthImageViewer *self,
self->priv->is_animation = FALSE;
_gth_image_viewer_set_original_size (self, original_width, original_height);
- _gth_image_viewer_content_changed (self);
+ _gth_image_viewer_content_changed (self, FALSE);
}
@@ -1718,7 +1743,7 @@ gth_image_viewer_set_void (GthImageViewer *self)
self->priv->is_void = TRUE;
self->priv->is_animation = FALSE;
- _gth_image_viewer_content_changed (self);
+ _gth_image_viewer_content_changed (self, FALSE);
}
diff --git a/gthumb/gth-image-viewer.h b/gthumb/gth-image-viewer.h
index 6273042..c789f25 100644
--- a/gthumb/gth-image-viewer.h
+++ b/gthumb/gth-image-viewer.h
@@ -157,6 +157,10 @@ void gth_image_viewer_set_pixbuf (GthImageViewer *vi
GdkPixbuf *pixbuf,
int original_width,
int original_height);
+void gth_image_viewer_set_better_quality (GthImageViewer *viewer,
+ GdkPixbufAnimation *animation,
+ int original_width,
+ int original_height);
void gth_image_viewer_set_void (GthImageViewer *viewer);
gboolean gth_image_viewer_is_void (GthImageViewer *viewer);
void gth_image_viewer_update_view (GthImageViewer *viewer);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]