summaryrefslogtreecommitdiff
path: root/sent.c
diff options
context:
space:
mode:
authorbd <bdunahu@operationnull.com>2026-02-27 10:34:22 -0500
committerbdunahu <bdunahu@operationnull.com>2026-02-27 10:35:34 -0500
commit0988980aa572f2d1b7b34488d1559e6083a7922f (patch)
tree51e4ddc4244dae3d52f1f27db266c75503887921 /sent.c
parent882d54c225b83c762acf5bb3967f4890c3ecef86 (diff)
add pdf patchHEADmaster
Diffstat (limited to 'sent.c')
-rw-r--r--sent.c45
1 files changed, 41 insertions, 4 deletions
diff --git a/sent.c b/sent.c
index dfadd3a..a935554 100644
--- a/sent.c
+++ b/sent.c
@@ -19,6 +19,10 @@
#include <X11/Xutil.h>
#include <X11/Xft/Xft.h>
+#include <cairo/cairo.h>
+#include <cairo/cairo-xlib.h>
+#include <cairo/cairo-pdf.h>
+
#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;
@@ -482,6 +483,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)
{
running = 0;