Skip to content

Commit 6f68d6e

Browse files
committed
Get delay function now returns -1 if the animation should stop playing, as according to the GDK documentation.
1 parent a308c2b commit 6f68d6e

File tree

1 file changed

+8
-2
lines changed

1 file changed

+8
-2
lines changed

contrib/gdk-pixbuf/loader.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ struct _AvifAnimationIter {
5050
size_t current_frame;
5151
uint64_t current_animation_time;
5252
uint64_t time_offset;
53+
gboolean is_playing;
5354
};
5455

5556
#define GDK_TYPE_AVIF_ANIMATION_ITER avif_animation_iter_get_type()
@@ -116,6 +117,7 @@ static GdkPixbufAnimationIter * avif_animation_get_iter(GdkPixbufAnimation * ani
116117

117118
iter->time_offset = start_time->tv_sec * 1000 + start_time->tv_usec / 1000;
118119
iter->current_frame = 0;
120+
iter->is_playing = TRUE;
119121

120122
return (GdkPixbufAnimationIter *)iter;
121123
}
@@ -156,6 +158,7 @@ static gboolean avif_animation_iter_advance(GdkPixbufAnimationIter * iter, const
156158

157159
if (context->decoder->repetitionCount > 0 && elapsed_time > context->total_animation_time * (context->decoder->repetitionCount + 1)) {
158160
avif_iter->current_frame = context->decoder->imageCount - 1;
161+
avif_iter->is_playing = FALSE;
159162
} else {
160163

161164
/* only use buffering if animation doesn't fit into given buffer */
@@ -203,8 +206,11 @@ G_GNUC_END_IGNORE_DEPRECATIONS
203206

204207
static int avif_animation_iter_get_delay_time(GdkPixbufAnimationIter * iter)
205208
{
206-
AvifAnimationIter * avif_iter = (AvifAnimationIter *)iter;
207-
return g_array_index(avif_iter->animation->frames, AvifAnimationFrame, avif_iter->current_frame).duration_ms;
209+
AvifAnimationIter * avif_iter = (AvifAnimationIter*)iter;
210+
if (avif_iter->is_playing == TRUE) {
211+
return g_array_index(avif_iter->animation->frames, AvifAnimationFrame, avif_iter->current_frame).duration_ms;
212+
}
213+
return -1;
208214
}
209215

210216
static GdkPixbuf * avif_animation_iter_get_pixbuf(GdkPixbufAnimationIter * iter)

0 commit comments

Comments
 (0)