diff options
author | Thomas White <taw@bitwiz.me.uk> | 2019-04-08 22:59:47 +0200 |
---|---|---|
committer | Thomas White <taw@bitwiz.me.uk> | 2019-04-08 22:59:47 +0200 |
commit | b8355ad7dac90e1c89a62374e5ffa63e30572824 (patch) | |
tree | 16f5e4c342c3a1dfc8f3a560e95c9707adf6ab9e /libstorycode | |
parent | 1a7a88400dd4ade345cb895aaca7547174d0243c (diff) |
Move render_slides_to_pdf to slide_render_cairo
Diffstat (limited to 'libstorycode')
-rw-r--r-- | libstorycode/slide_render_cairo.c | 51 | ||||
-rw-r--r-- | libstorycode/slide_render_cairo.h | 1 |
2 files changed, 52 insertions, 0 deletions
diff --git a/libstorycode/slide_render_cairo.c b/libstorycode/slide_render_cairo.c index a812bd8..cd8d397 100644 --- a/libstorycode/slide_render_cairo.c +++ b/libstorycode/slide_render_cairo.c @@ -33,6 +33,9 @@ #include <stdlib.h> #include <math.h> +#include <libintl.h> +#define _(x) gettext(x) + #include "slide.h" #include "narrative.h" #include "stylesheet.h" @@ -352,3 +355,51 @@ int slide_render_cairo(Slide *s, cairo_t *cr, ImageStore *is, Stylesheet *styles return 0; } + + +int render_slides_to_pdf(Narrative *n, ImageStore *is, const char *filename) +{ + double w = 2048.0; + cairo_surface_t *surf; + cairo_t *cr; + int i; + PangoContext *pc; + struct slide_pos sel; + + surf = cairo_pdf_surface_create(filename, w, w); + if ( cairo_surface_status(surf) != CAIRO_STATUS_SUCCESS ) { + fprintf(stderr, _("Couldn't create Cairo surface\n")); + return 1; + } + + cr = cairo_create(surf); + pc = pango_cairo_create_context(cr); + + sel.para = 0; sel.pos = 0; sel.trail = 0; + + for ( i=0; i<narrative_get_num_slides(n); i++ ) + { + Slide *s; + double log_w, log_h; + + s = narrative_get_slide_by_number(n, i); + slide_get_logical_size(s, narrative_get_stylesheet(n), + &log_w, &log_h); + + cairo_pdf_surface_set_size(surf, w, w*(log_h/log_w)); + + cairo_save(cr); + cairo_scale(cr, w/log_w, w/log_w); + slide_render_cairo(s, cr, is, narrative_get_stylesheet(n), + i, pango_language_get_default(), pc, + NULL, sel, sel); + cairo_show_page(cr); + cairo_restore(cr); + } + + g_object_unref(pc); + cairo_surface_finish(surf); + cairo_destroy(cr); + + return 0; +} diff --git a/libstorycode/slide_render_cairo.h b/libstorycode/slide_render_cairo.h index bb7ad84..6589945 100644 --- a/libstorycode/slide_render_cairo.h +++ b/libstorycode/slide_render_cairo.h @@ -42,5 +42,6 @@ extern int slide_render_cairo(Slide *s, cairo_t *cr, ImageStore *is, Stylesheet SlideItem *sel_item, struct slide_pos sel_start, struct slide_pos sel_end); +extern int render_slides_to_pdf(Narrative *n, ImageStore *is, const char *filename); #endif /* RENDER_H */ |