@@ -1,4 +1,4 @@ | |||||
VERSION := git-20161030 | |||||
VERSION := git-20161128 | |||||
PREFIX := /usr/local | PREFIX := /usr/local | ||||
MANPREFIX := $(PREFIX)/share/man | MANPREFIX := $(PREFIX)/share/man | ||||
@@ -68,6 +68,7 @@ void img_init(img_t *img, win_t *win) | |||||
img->alpha = ALPHA_LAYER; | img->alpha = ALPHA_LAYER; | ||||
img->multi.cap = img->multi.cnt = 0; | img->multi.cap = img->multi.cnt = 0; | ||||
img->multi.animate = options->animate; | img->multi.animate = options->animate; | ||||
img->multi.framedelay = options->framerate > 0 ? 1000 / options->framerate : 0; | |||||
img->multi.length = 0; | img->multi.length = 0; | ||||
img->cmod = imlib_create_color_modifier(); | img->cmod = imlib_create_color_modifier(); | ||||
@@ -263,6 +264,7 @@ bool img_load_gif(img_t *img, const fileinfo_t *file) | |||||
img->multi.cap * sizeof(img_frame_t)); | img->multi.cap * sizeof(img_frame_t)); | ||||
} | } | ||||
img->multi.frames[img->multi.cnt].im = im; | img->multi.frames[img->multi.cnt].im = im; | ||||
delay = img->multi.framedelay > 0 ? img->multi.framedelay : delay; | |||||
img->multi.frames[img->multi.cnt].delay = delay > 0 ? delay : DEF_GIF_DELAY; | img->multi.frames[img->multi.cnt].delay = delay > 0 ? delay : DEF_GIF_DELAY; | ||||
img->multi.length += img->multi.frames[img->multi.cnt].delay; | img->multi.length += img->multi.frames[img->multi.cnt].delay; | ||||
img->multi.cnt++; | img->multi.cnt++; | ||||
@@ -35,6 +35,7 @@ typedef struct { | |||||
int cnt; | int cnt; | ||||
int sel; | int sel; | ||||
bool animate; | bool animate; | ||||
int framedelay; | |||||
int length; | int length; | ||||
} multi_img_t; | } multi_img_t; | ||||
@@ -32,8 +32,9 @@ const options_t *options = (const options_t*) &_options; | |||||
void print_usage(void) | void print_usage(void) | ||||
{ | { | ||||
printf("usage: sxiv [-abcfhioqrtvZ] [-e WID] [-G GAMMA] [-g GEOMETRY] " | |||||
"[-N NAME] [-n NUM] [-S DELAY] [-s MODE] [-z ZOOM] FILES...\n"); | |||||
printf("usage: sxiv [-abcfhioqrtvZ] [-A FRAMERATE] [-e WID] [-G GAMMA] " | |||||
"[-g GEOMETRY] [-N NAME] [-n NUM] [-S DELAY] [-s MODE] [-z ZOOM] " | |||||
"FILES...\n"); | |||||
} | } | ||||
void print_version(void) | void print_version(void) | ||||
@@ -60,6 +61,7 @@ void parse_options(int argc, char **argv) | |||||
_options.animate = false; | _options.animate = false; | ||||
_options.gamma = 0; | _options.gamma = 0; | ||||
_options.slideshow = 0; | _options.slideshow = 0; | ||||
_options.framerate = 0; | |||||
_options.fullscreen = false; | _options.fullscreen = false; | ||||
_options.embed = 0; | _options.embed = 0; | ||||
@@ -71,11 +73,17 @@ void parse_options(int argc, char **argv) | |||||
_options.thumb_mode = false; | _options.thumb_mode = false; | ||||
_options.clean_cache = false; | _options.clean_cache = false; | ||||
while ((opt = getopt(argc, argv, "abce:fG:g:hin:N:oqrS:s:tvZz:")) != -1) { | |||||
while ((opt = getopt(argc, argv, "A:abce:fG:g:hin:N:oqrS:s:tvZz:")) != -1) { | |||||
switch (opt) { | switch (opt) { | ||||
case '?': | case '?': | ||||
print_usage(); | print_usage(); | ||||
exit(EXIT_FAILURE); | exit(EXIT_FAILURE); | ||||
case 'A': | |||||
n = strtol(optarg, &end, 0); | |||||
if (*end != '\0' || n <= 0) | |||||
error(EXIT_FAILURE, 0, "Invalid argument for option -A: %s", optarg); | |||||
_options.framerate = n; | |||||
/* fall through */ | |||||
case 'a': | case 'a': | ||||
_options.animate = true; | _options.animate = true; | ||||
break; | break; | ||||
@@ -37,6 +37,7 @@ typedef struct { | |||||
bool animate; | bool animate; | ||||
int gamma; | int gamma; | ||||
int slideshow; | int slideshow; | ||||
int framerate; | |||||
/* window: */ | /* window: */ | ||||
bool fullscreen; | bool fullscreen; | ||||
@@ -4,6 +4,8 @@ sxiv \- Simple X Image Viewer | |||||
.SH SYNOPSIS | .SH SYNOPSIS | ||||
.B sxiv | .B sxiv | ||||
.RB [ \-abcfhioqrtvZ ] | .RB [ \-abcfhioqrtvZ ] | ||||
.RB [ \-A | |||||
.IR FRAMERATE ] | |||||
.RB [ \-e | .RB [ \-e | ||||
.IR WID ] | .IR WID ] | ||||
.RB [ \-G | .RB [ \-G | ||||
@@ -33,6 +35,10 @@ Please note, that the fullscreen mode requires an EWMH/NetWM compliant window | |||||
manager. | manager. | ||||
.SH OPTIONS | .SH OPTIONS | ||||
.TP | .TP | ||||
.BI "\-A " FRAMERATE | |||||
Play animations with a constant frame rate set to | |||||
.IR FRAMERATE . | |||||
.TP | |||||
.B \-a | .B \-a | ||||
Play animations of multi-frame images. | Play animations of multi-frame images. | ||||
.TP | .TP | ||||