aboutsummaryrefslogtreecommitdiff
path: root/src/render.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/render.c')
-rw-r--r--src/render.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/render.c b/src/render.c
index 0fdd837..d00357a 100644
--- a/src/render.c
+++ b/src/render.c
@@ -527,3 +527,42 @@ cairo_surface_t *render_slide(struct slide *s, int w, double ww, double hh,
return surf;
}
+
+
+int export_pdf(struct presentation *p, const char *filename)
+{
+ int i;
+ cairo_surface_t *surf;
+ cairo_t *cr;
+
+ surf = cairo_pdf_surface_create(filename, p->slide_width,
+ p->slide_height);
+
+ if ( cairo_surface_status(surf) != CAIRO_STATUS_SUCCESS ) {
+ fprintf(stderr, "Couldn't create Cairo surface\n");
+ return 1;
+ }
+
+ cr = cairo_create(surf);
+
+ for ( i=0; i<p->num_slides; i++ ) {
+
+ cairo_surface_t *sf;
+ struct slide *s;
+
+ s = p->slides[i];
+ sf = render_slide(s, 1024, p->slide_width, p->slide_height,
+ p->is, ISZ_SLIDESHOW);
+ cairo_rectangle(cr, 0.0, 0.0, p->slide_width, p->slide_height);
+ cairo_set_source_surface(cr, sf, 0.0, 0.0);
+ cairo_fill(cr);
+ cairo_surface_show_page(surf);
+ cairo_surface_destroy(sf);
+
+ }
+
+ cairo_surface_finish(surf);
+ cairo_destroy(cr);
+
+ return 0;
+}