diff options
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | config.def.h | 2 | ||||
-rw-r--r-- | image.c | 31 | ||||
-rw-r--r-- | image.h | 3 |
4 files changed, 14 insertions, 24 deletions
@@ -1,4 +1,4 @@ -VERSION = git-20131213 +VERSION = git-20131231 PREFIX = /usr/local MANPREFIX = $(PREFIX)/share/man diff --git a/config.def.h b/config.def.h index 532de3f..6da148a 100644 --- a/config.def.h +++ b/config.def.h @@ -43,7 +43,7 @@ static const float zoom_levels[] = { enum { GIF_DELAY = 100, /* delay time (in ms) */ GIF_AUTOPLAY = 1, /* autoplay when loaded [0/1] */ - GIF_LOOP = -1 /* endless loop [0 / 1 / -1=as specified in file] */ + GIF_LOOP = 0 /* loop? [0: no, 1: endless, -1: as specified in file] */ }; /* gamma correction: the user-visible ranges [-GAMMA_RANGE, 0] and @@ -83,8 +83,7 @@ void img_init(img_t *img, win_t *win) img->alpha = !RENDER_WHITE_ALPHA; img->multi.cap = img->multi.cnt = 0; img->multi.animate = false; - img->multi.anim_repeats = -1; - img->multi.repeats_currently_left = 0; + img->multi.repeat = 0; img->cmod = imlib_create_color_modifier(); img->gamma = MIN(MAX(options->gamma, -GAMMA_RANGE), GAMMA_RANGE); @@ -146,8 +145,7 @@ bool img_load_gif(img_t *img, const fileinfo_t *file) } img->multi.cnt = 0; img->multi.sel = 0; - img->multi.anim_repeats = -1; - img->multi.repeats_currently_left = 0; + img->multi.repeat = 0; #if defined(GIFLIB_MAJOR) && GIFLIB_MAJOR >= 5 gif = DGifOpenFileName(file->path, NULL); @@ -174,7 +172,7 @@ bool img_load_gif(img_t *img, const fileinfo_t *file) DGifGetExtension(gif, &ext_code, &ext); while (ext) { - if (ext_code == 0xf9) { /*Graphics Control Extension*/ + if (ext_code == GRAPHICS_EXT_FUNC_CODE) { if (ext[1] & 1) transp = (int) ext[4]; else @@ -185,15 +183,11 @@ bool img_load_gif(img_t *img, const fileinfo_t *file) delay = MAX(delay, MIN_GIF_DELAY); disposal = (unsigned int) ext[1] >> 2 & 0x7; - } else if (ext_code == 0xff) { /*Application Extension*/ - if(ext[0] == 11 && memcmp(ext+1, "NETSCAPE2.0", 11) == 0) { + } else if (ext_code == APPLICATION_EXT_FUNC_CODE) { + if (ext[0] == 11 && memcmp(ext+1, "NETSCAPE2.0", 11) == 0) { DGifGetExtensionNext(gif, &ext); - - if(ext && ext[0] == 3 && ext[1] == 1) { - img->multi.repeats_currently_left = - img->multi.anim_repeats = - ((unsigned int) ext[3] << 8 | (unsigned int) ext[2]); - } + if (ext && ext[0] == 3 && ext[1] == 1) + img->multi.repeat = ((int) ext[3] << 8 | (int) ext[2]) - 1; } } ext = NULL; @@ -811,15 +805,12 @@ bool img_frame_animate(img_t *img, bool restart) return false; if (img->multi.sel + 1 >= img->multi.cnt) { - if (GIF_LOOP == 1 || (GIF_LOOP == -1 && img->multi.anim_repeats == 0) ) { - img_frame_goto(img, 0); - } else if(restart) { + if (restart || GIF_LOOP == 1) { img_frame_goto(img, 0); - img->multi.repeats_currently_left = - (img->multi.anim_repeats != -1 ? img->multi.anim_repeats : 0); - } else if(GIF_LOOP == -1 && img->multi.repeats_currently_left != 0) { + } else if (GIF_LOOP == -1 && img->multi.repeat != 0) { + if (img->multi.repeat > 0) + img->multi.repeat--; img_frame_goto(img, 0); - --img->multi.repeats_currently_left; } else { img->multi.animate = false; return false; @@ -35,8 +35,7 @@ typedef struct { int cnt; int sel; bool animate; - int anim_repeats; // -1=don't repeat, 0=repeat infinitely, N=repeat N times - unsigned int repeats_currently_left; + int repeat; } multi_img_t; typedef struct { |