From d4dbd4765824e45676e33f20ffccb47cd88ddb8f Mon Sep 17 00:00:00 2001 From: rafa_99 Date: Thu, 21 Jul 2022 17:11:31 +0100 Subject: PDF compile support --- README.md | 5 +++-- config.def.h | 1 + config.mk | 7 +++++-- sent.c | 41 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 50 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index c1e9385..8cedb1f 100644 --- a/README.md +++ b/README.md @@ -11,8 +11,8 @@ worry about alignment. Instead you can really concentrate on the content. Dependencies -You need Xlib and Xft to build sent and the farbfeld[0] tools installed to use -images in your presentations. +You need Xlib and Xft to build sent, the farbfeld[0] tools installed to use +images in your presentations and cairo to compile pdf's. Demo @@ -40,6 +40,7 @@ with `#` will be ignored. A `\` at the beginning of the line escapes `@` and - Xlib - Xft - farbfeld + - cairo sent FILENAME one slide per paragraph 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 40c54b2..a52b315 100644 --- a/sent.c +++ b/sent.c @@ -20,6 +20,10 @@ #include #include +#include +#include +#include + #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); @@ -540,6 +545,42 @@ void toggle_cursor(const Arg *arg) cursor_visible ^= 1; } +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) { -- cgit v1.2.3