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