load slide image on-demand
authorHiltjo Posthuma <hiltjo@codemadness.org>
Sat, 4 Jun 2016 14:33:15 +0000 (16:33 +0200)
committerMarkus Teich <markus.teich@stusta.mhn.de>
Sat, 4 Jun 2016 15:26:50 +0000 (17:26 +0200)
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.

sent.c

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