load slide image on-demand

previously an image file would be opened but only ffread when advancing to
the slide, but when the slide was not used it gave an error:

	/usr/local/bin/2ff: failed to convert image/png

this changes it to load the image on-demand once and "cache" it.
This commit is contained in:
Hiltjo Posthuma 2016-06-04 16:33:15 +02:00 committed by Markus Teich
parent 27a904c1dd
commit 44a50ad948

8
sent.c
View File

@ -55,6 +55,7 @@ typedef struct {
unsigned int linecount; unsigned int linecount;
char **lines; char **lines;
Image *img; Image *img;
char *embed;
} Slide; } Slide;
/* Purely graphic info */ /* Purely graphic info */
@ -436,7 +437,7 @@ load(FILE *fp)
/* only make image slide if first line of a slide starts with @ */ /* only make image slide if first line of a slide starts with @ */
if (s->linecount == 0 && s->lines[0][0] == '@') { if (s->linecount == 0 && s->lines[0][0] == '@') {
memmove(s->lines[0], &s->lines[0][1], blen); memmove(s->lines[0], &s->lines[0][1], blen);
s->img = ffopen(s->lines[0]); s->embed = s->lines[0];
} }
if (s->lines[s->linecount][0] == '\\') if (s->lines[s->linecount][0] == '\\')
@ -447,6 +448,9 @@ load(FILE *fp)
if (!p) if (!p)
break; break;
} }
if (slidecount && slides[0].embed && slides[0].embed[0])
slides[0].img = ffopen(slides[0].embed);
} }
void void
@ -458,6 +462,8 @@ advance(const Arg *arg)
if (slides[idx].img) if (slides[idx].img)
slides[idx].img->state &= ~(DRAWN | SCALED); slides[idx].img->state &= ~(DRAWN | SCALED);
idx = new_idx; idx = new_idx;
if (!slides[idx].img && slides[idx].embed && slides[idx].embed[0])
slides[idx].img = ffopen(slides[idx].embed);
xdraw(); xdraw();
if (slidecount > idx + 1 && slides[idx + 1].img) if (slidecount > idx + 1 && slides[idx + 1].img)
ffread(slides[idx + 1].img); ffread(slides[idx + 1].img);