From 0988980aa572f2d1b7b34488d1559e6083a7922f Mon Sep 17 00:00:00 2001 From: bd Date: Fri, 27 Feb 2026 10:34:22 -0500 Subject: add pdf patch --- sent.c | 45 +++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 41 insertions(+), 4 deletions(-) (limited to 'sent.c') diff --git a/sent.c b/sent.c index dfadd3a..a935554 100644 --- a/sent.c +++ b/sent.c @@ -19,6 +19,10 @@ #include #include +#include +#include +#include + #include "arg.h" #include "util.h" #include "drw.h" @@ -97,6 +101,7 @@ static void cleanup(int slidesonly); static void reload(const Arg *arg); static void load(FILE *fp); static void advance(const Arg *arg); +static void pdf(); static void quit(const Arg *arg); static void resize(int width, int height); static void run(void); @@ -430,10 +435,6 @@ load(FILE *fp) maxlines = 0; memset((s = &slides[slidecount]), 0, sizeof(Slide)); do { - /* if there's a leading null, we can't do blen-1 */ - if (buf[0] == '\0') - continue; - if (buf[0] == '#') continue; @@ -481,6 +482,42 @@ advance(const Arg *arg) } } +void +pdf() +{ + const Arg next = { .i = 1 }; + Arg first; + cairo_surface_t *cs; + + if (!fname) + fname = "slides"; + + char filename[strlen(fname) + 5]; + sprintf(filename, "%s.pdf", fname); + cairo_surface_t *pdf = cairo_pdf_surface_create(filename, xw.w, xw.h); + + cairo_t *cr = cairo_create(pdf); + + first.i = -idx; + advance(&first); + + cs = cairo_xlib_surface_create(xw.dpy, xw.win, xw.vis, xw.w, xw.h); + cairo_set_source_surface(cr, cs, 0.0, 0.0); + for (int i = 0; i < slidecount; ++i) { + cairo_paint(cr); + cairo_show_page(cr); + cairo_surface_flush(cs); + advance(&next); + cairo_surface_mark_dirty(cs); + } + cairo_surface_destroy(cs); + + cairo_destroy(cr); + cairo_surface_destroy(pdf); + first.i = -(slidecount-1); + advance(&first); +} + void quit(const Arg *arg) { -- cgit v1.2.3