sent-pdf-2649e8d.diff - sites - public wiki contents of suckless.org
(HTM) git clone git://git.suckless.org/sites
(DIR) Log
(DIR) Files
(DIR) Refs
---
sent-pdf-2649e8d.diff (3314B)
---
1 From 78a5f5d263c5209d685abbe657bbc5bd3f756994 Mon Sep 17 00:00:00 2001
2 From: tuckerrrrrrrrrr <tucker1014@hotmail.com>
3 Date: Sat, 14 Nov 2020 12:54:53 +0100
4 Subject: [PATCH] Conversion to PDF
5
6 Add the ability to convert presentations to PDF. Adds an additional
7 dependency: cairo.
8 ---
9 config.def.h | 1 +
10 config.mk | 7 +++++--
11 sent.c | 42 ++++++++++++++++++++++++++++++++++++++----
12 3 files changed, 44 insertions(+), 6 deletions(-)
13
14 diff --git a/config.def.h b/config.def.h
15 index 60eb376..e68a099 100644
16 --- a/config.def.h
17 +++ b/config.def.h
18 @@ -47,6 +47,7 @@ static Shortcut shortcuts[] = {
19 { XK_n, advance, {.i = +1} },
20 { XK_p, advance, {.i = -1} },
21 { XK_r, reload, {0} },
22 + { XK_g, pdf, {0} },
23 };
24
25 static Filter filters[] = {
26 diff --git a/config.mk b/config.mk
27 index d61c554..9174687 100644
28 --- a/config.mk
29 +++ b/config.mk
30 @@ -7,14 +7,17 @@ VERSION = 1
31 PREFIX = /usr/local
32 MANPREFIX = ${PREFIX}/share/man
33
34 +PKG_CONFIG = pkg-config
35 +
36 X11INC = /usr/X11R6/include
37 X11LIB = /usr/X11R6/lib
38
39 # includes and libs
40 INCS = -I. -I/usr/include -I/usr/include/freetype2 -I${X11INC}
41 -LIBS = -L/usr/lib -lc -lm -L${X11LIB} -lXft -lfontconfig -lX11
42 +LIBS = -L/usr/lib -lc -lm -L${X11LIB} -lXft -lfontconfig -lX11 -lcairo
43 # OpenBSD (uncomment)
44 -#INCS = -I. -I${X11INC} -I${X11INC}/freetype2
45 +INCS = -I. -I${X11INC} -I${X11INC}/freetype2 `${PKG_CONFIG} --cflags cairo`
46 +LIBS += -L/usr/local/lib
47 # FreeBSD (uncomment)
48 #INCS = -I. -I/usr/local/include -I/usr/local/include/freetype2 -I${X11INC}
49 #LIBS = -L/usr/local/lib -lc -lm -L${X11LIB} -lXft -lfontconfig -lX11
50 diff --git a/sent.c b/sent.c
51 index 9534fca..dc5cf89 100644
52 --- a/sent.c
53 +++ b/sent.c
54 @@ -19,6 +19,10 @@
55 #include <X11/Xutil.h>
56 #include <X11/Xft/Xft.h>
57
58 +#include <cairo/cairo.h>
59 +#include <cairo/cairo-xlib.h>
60 +#include <cairo/cairo-pdf.h>
61 +
62 #include "arg.h"
63 #include "util.h"
64 #include "drw.h"
65 @@ -97,6 +101,7 @@ static void cleanup(int slidesonly);
66 static void reload(const Arg *arg);
67 static void load(FILE *fp);
68 static void advance(const Arg *arg);
69 +static void pdf();
70 static void quit(const Arg *arg);
71 static void resize(int width, int height);
72 static void run();
73 @@ -428,10 +433,6 @@ load(FILE *fp)
74 maxlines = 0;
75 memset((s = &slides[slidecount]), 0, sizeof(Slide));
76 do {
77 - /* if there's a leading null, we can't do blen-1 */
78 - if (buf[0] == '\0')
79 - continue;
80 -
81 if (buf[0] == '#')
82 continue;
83
84 @@ -479,6 +480,39 @@ advance(const Arg *arg)
85 }
86 }
87
88 +void
89 +pdf()
90 +{
91 + const Arg next = { .i = 1 };
92 + Arg first;
93 + cairo_surface_t *cs;
94 +
95 + char filename[strlen(fname) + 5];
96 + sprintf(filename, "%s.pdf", fname);
97 + cairo_surface_t *pdf = cairo_pdf_surface_create(filename, xw.w, xw.h);
98 +
99 + cairo_t *cr = cairo_create(pdf);
100 +
101 + first.i = -idx;
102 + advance(&first);
103 +
104 + cs = cairo_xlib_surface_create(xw.dpy, xw.win, xw.vis, xw.w, xw.h);
105 + cairo_set_source_surface(cr, cs, 0.0, 0.0);
106 + for (int i = 0; i < slidecount; ++i) {
107 + cairo_paint(cr);
108 + cairo_show_page(cr);
109 + cairo_surface_flush(cs);
110 + advance(&next);
111 + cairo_surface_mark_dirty(cs);
112 + }
113 + cairo_surface_destroy(cs);
114 +
115 + cairo_destroy(cr);
116 + cairo_surface_destroy(pdf);
117 + first.i = -(slidecount-1);
118 + advance(&first);
119 +}
120 +
121 void
122 quit(const Arg *arg)
123 {
124 --
125 2.29.2
126