summaryrefslogtreecommitdiff
path: root/sent.c
diff options
context:
space:
mode:
Diffstat (limited to 'sent.c')
-rw-r--r--sent.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/sent.c b/sent.c
index 40c54b2..a52b315 100644
--- a/sent.c
+++ b/sent.c
@@ -20,6 +20,10 @@
#include <X11/Xft/Xft.h>
#include <X11/cursorfont.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-xlib.h>
+#include <cairo/cairo-pdf.h>
+
#include "arg.h"
#include "util.h"
#include "drw.h"
@@ -98,6 +102,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 toggle_cursor(const Arg *arg);
static void quit(const Arg *arg);
static void resize(int width, int height);
@@ -541,6 +546,42 @@ void toggle_cursor(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)
{
running = 0;