[gthumb] slideshow: show gif animations if the projector supports them
- From: Paolo Bacchilega <paobac src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gthumb] slideshow: show gif animations if the projector supports them
- Date: Sun, 24 Nov 2019 12:34:14 +0000 (UTC)
commit bb90bd1d645ea60b6a1430e185b4c622af7cd456
Author: Paolo Bacchilega <paobac src gnome org>
Date: Sun Nov 17 10:12:08 2019 +0100
slideshow: show gif animations if the projector supports them
extensions/slideshow/gth-slideshow.c | 42 ++++++++++++++++++++----------------
extensions/slideshow/gth-slideshow.h | 2 +-
2 files changed, 25 insertions(+), 19 deletions(-)
---
diff --git a/extensions/slideshow/gth-slideshow.c b/extensions/slideshow/gth-slideshow.c
index b5fd115e..8f2a78b6 100644
--- a/extensions/slideshow/gth-slideshow.c
+++ b/extensions/slideshow/gth-slideshow.c
@@ -65,7 +65,7 @@ struct _GthSlideshowPrivate {
ClutterActor *paused_actor;
guint32 last_button_event_time;
#endif
- GdkPixbuf *current_pixbuf;
+ GthImage *current_image;
GtkWidget *viewer;
guint next_event;
guint delay;
@@ -152,16 +152,16 @@ preloader_load_ready_cb (GObject *source_object,
return;
}
- _g_object_unref (self->priv->current_pixbuf);
- self->priv->current_pixbuf = gth_image_get_pixbuf (image);
+ _g_object_unref (self->priv->current_image);
+ self->priv->current_image = _g_object_ref (image);
- if (self->priv->current_pixbuf == NULL) {
+ if (self->priv->current_image == NULL) {
gth_slideshow_load_next_image (self);
return;
}
self->priv->one_loaded = TRUE;
- self->priv->projector->image_ready (self, self->priv->current_pixbuf);
+ self->priv->projector->image_ready (self, self->priv->current_image);
_g_object_unref (requested);
_g_object_unref (image);
@@ -257,7 +257,7 @@ gth_slideshow_finalize (GObject *object)
g_source_remove (self->priv->hide_cursor_event);
_g_object_unref (self->priv->pause_pixbuf);
- _g_object_unref (self->priv->current_pixbuf);
+ _g_object_unref (self->priv->current_image);
_g_object_list_unref (self->priv->file_list);
_g_object_unref (self->priv->browser);
_g_object_unref (self->priv->preloader);
@@ -408,7 +408,7 @@ gth_slideshow_init (GthSlideshow *self)
self->priv->animating = FALSE;
self->priv->direction = GTH_SLIDESHOW_DIRECTION_FORWARD;
self->priv->random_order = FALSE;
- self->priv->current_pixbuf = NULL;
+ self->priv->current_image = NULL;
self->priv->screensaver = gth_screensaver_new (NULL);
self->priv->preloader = gth_image_preloader_new ();
}
@@ -633,9 +633,9 @@ default_projector_load_prev_image (GthSlideshow *self)
static void
default_projector_image_ready (GthSlideshow *self,
- GdkPixbuf *pixbuf)
+ GthImage *image)
{
- gth_image_viewer_set_pixbuf (GTH_IMAGE_VIEWER (self->priv->viewer), pixbuf, -1, -1);
+ gth_image_viewer_set_image (GTH_IMAGE_VIEWER (self->priv->viewer), image, -1, -1);
view_next_image_automatically (self);
}
@@ -931,8 +931,9 @@ _gth_slideshow_get_transition (GthSlideshow *self)
static void
clutter_projector_image_ready (GthSlideshow *self,
- GdkPixbuf *pixbuf)
+ GthImage *image_data)
{
+ GdkPixbuf *pixbuf;
GdkPixbuf *image;
ClutterActor *texture;
int pixbuf_w, pixbuf_h;
@@ -943,6 +944,7 @@ clutter_projector_image_ready (GthSlideshow *self,
if ((stage_w == 0) || (stage_h == 0))
return;
+ pixbuf = gth_image_get_pixbuf (image_data);
image = gdk_pixbuf_new (gdk_pixbuf_get_colorspace (pixbuf),
FALSE,
gdk_pixbuf_get_bits_per_sample (pixbuf),
@@ -991,6 +993,7 @@ clutter_projector_image_ready (GthSlideshow *self,
clutter_timeline_advance (self->priv->timeline, GTH_TRANSITION_DURATION);
g_object_unref (image);
+ g_object_unref (pixbuf);
}
@@ -1082,6 +1085,7 @@ static void
adapt_image_size_to_stage_size (GthSlideshow *self)
{
gfloat stage_w, stage_h;
+ GdkPixbuf *pixbuf;
GdkPixbuf *image;
int pixbuf_w, pixbuf_h;
int pixbuf_x, pixbuf_y;
@@ -1094,23 +1098,24 @@ adapt_image_size_to_stage_size (GthSlideshow *self)
if ((stage_w == 0) || (stage_h == 0))
return;
- if (self->priv->current_pixbuf == NULL)
+ if (self->priv->current_image == NULL)
return;
- image = gdk_pixbuf_new (gdk_pixbuf_get_colorspace (self->priv->current_pixbuf),
+ pixbuf = gth_image_get_pixbuf (self->priv->current_image);
+ image = gdk_pixbuf_new (gdk_pixbuf_get_colorspace (pixbuf),
FALSE,
- gdk_pixbuf_get_bits_per_sample (self->priv->current_pixbuf),
+ gdk_pixbuf_get_bits_per_sample (pixbuf),
stage_w,
stage_h);
gdk_pixbuf_fill (image, 0x000000ff);
- pixbuf_w = gdk_pixbuf_get_width (self->priv->current_pixbuf);
- pixbuf_h = gdk_pixbuf_get_height (self->priv->current_pixbuf);
+ pixbuf_w = gdk_pixbuf_get_width (pixbuf);
+ pixbuf_h = gdk_pixbuf_get_height (pixbuf);
scale_keeping_ratio (&pixbuf_w, &pixbuf_h, (int) stage_w, (int) stage_h, TRUE);
pixbuf_x = (stage_w - pixbuf_w) / 2;
pixbuf_y = (stage_h - pixbuf_h) / 2;
- gdk_pixbuf_composite (self->priv->current_pixbuf,
+ gdk_pixbuf_composite (pixbuf,
image,
pixbuf_x,
pixbuf_y,
@@ -1118,8 +1123,8 @@ adapt_image_size_to_stage_size (GthSlideshow *self)
pixbuf_h,
pixbuf_x,
pixbuf_y,
- (double) pixbuf_w / gdk_pixbuf_get_width (self->priv->current_pixbuf),
- (double) pixbuf_h / gdk_pixbuf_get_height (self->priv->current_pixbuf),
+ (double) pixbuf_w / gdk_pixbuf_get_width (pixbuf),
+ (double) pixbuf_h / gdk_pixbuf_get_height (pixbuf),
GDK_INTERP_BILINEAR,
255);
@@ -1136,6 +1141,7 @@ adapt_image_size_to_stage_size (GthSlideshow *self)
_gth_slideshow_reset_textures_position (self);
g_object_unref (image);
+ g_object_unref (pixbuf);
}
diff --git a/extensions/slideshow/gth-slideshow.h b/extensions/slideshow/gth-slideshow.h
index 9d1a9050..201f9c48 100644
--- a/extensions/slideshow/gth-slideshow.h
+++ b/extensions/slideshow/gth-slideshow.h
@@ -67,7 +67,7 @@ typedef struct {
void (* hide_cursor) (GthSlideshow *self);
void (* finalize) (GthSlideshow *self);
void (* image_ready) (GthSlideshow *self,
- GdkPixbuf *pixbuf);
+ GthImage *image);
void (* load_prev_image) (GthSlideshow *self);
void (* load_next_image) (GthSlideshow *self);
} GthProjector;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]