summaryrefslogtreecommitdiff
path: root/patches/sent-pdf-e3b86c2.diff
blob: 56b7d20520052049131b7466c7aaeda7659666de (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
From e3b86c2910111f7bb004833c8036122d5256ba3c Mon Sep 17 00:00:00 2001
From: Bryce Vandegrift <bryce@brycevandegrift.xyz>
Date: Sun, 23 Apr 2023 14:03:40 -0400
Subject: [PATCH] Use default filename if reading stdin

---
 config.def.h |  1 +
 config.mk    |  7 +++++--
 sent.c       | 45 +++++++++++++++++++++++++++++++++++++++++----
 3 files changed, 47 insertions(+), 6 deletions(-)

diff --git a/config.def.h b/config.def.h
index 60eb376..26c01b4 100644
--- a/config.def.h
+++ b/config.def.h
@@ -47,6 +47,7 @@ static Shortcut shortcuts[] = {
 	{ XK_n,           advance,        {.i = +1} },
 	{ XK_p,           advance,        {.i = -1} },
 	{ XK_r,           reload,         {0} },
+	{ XK_g,           pdf,            {0} },
 };
 
 static Filter filters[] = {
diff --git a/config.mk b/config.mk
index d61c554..9174687 100644
--- a/config.mk
+++ b/config.mk
@@ -7,14 +7,17 @@ VERSION = 1
 PREFIX = /usr/local
 MANPREFIX = ${PREFIX}/share/man
 
+PKG_CONFIG = pkg-config
+
 X11INC = /usr/X11R6/include
 X11LIB = /usr/X11R6/lib
 
 # includes and libs
 INCS = -I. -I/usr/include -I/usr/include/freetype2 -I${X11INC}
-LIBS = -L/usr/lib -lc -lm -L${X11LIB} -lXft -lfontconfig -lX11
+LIBS = -L/usr/lib -lc -lm -L${X11LIB} -lXft -lfontconfig -lX11 -lcairo
 # OpenBSD (uncomment)
-#INCS = -I. -I${X11INC} -I${X11INC}/freetype2
+INCS = -I. -I${X11INC} -I${X11INC}/freetype2 `${PKG_CONFIG} --cflags cairo`
+LIBS += -L/usr/local/lib
 # FreeBSD (uncomment)
 #INCS = -I. -I/usr/local/include -I/usr/local/include/freetype2 -I${X11INC}
 #LIBS = -L/usr/local/lib -lc -lm -L${X11LIB} -lXft -lfontconfig -lX11
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;
 
@@ -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)
 {
-- 
2.40.0