From 36a4bd7229a562d414513073d1123080b9615cd9 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Tue, 26 Feb 2019 19:57:41 +0100 Subject: Use slide size from stylesheet when appropriate --- libstorycode/slide.c | 13 ++++++++++--- libstorycode/slide.h | 2 +- libstorycode/slide_render_cairo.c | 3 +++ libstorycode/stylesheet.c | 9 +++++++++ libstorycode/stylesheet.h | 1 + src/pdfstorycode.c | 3 ++- 6 files changed, 26 insertions(+), 5 deletions(-) diff --git a/libstorycode/slide.c b/libstorycode/slide.c index 809f2cb..9db5995 100644 --- a/libstorycode/slide.c +++ b/libstorycode/slide.c @@ -40,8 +40,8 @@ Slide *slide_new() if ( s == NULL ) return NULL; s->n_items = 0; s->items = NULL; - s->logical_w = 1024.0; - s->logical_h = 768.0; + s->logical_w = -1.0; + s->logical_h = -1.0; return s; } @@ -198,9 +198,16 @@ int slide_set_logical_size(Slide *s, double w, double h) } -int slide_get_logical_size(Slide *s, double *w, double *h) +int slide_get_logical_size(Slide *s, Stylesheet *ss, double *w, double *h) { if ( s == NULL ) return 1; + + if ( s->logical_w < 0.0 ) { + /* Slide-specific value not set, use stylesheet */ + stylesheet_get_slide_default_size(ss, w, h); + return 0; + } + *w = s->logical_w; *h = s->logical_h; return 0; diff --git a/libstorycode/slide.h b/libstorycode/slide.h index a91e578..e9e5875 100644 --- a/libstorycode/slide.h +++ b/libstorycode/slide.h @@ -43,7 +43,7 @@ extern int slide_add_slidetitle(Slide *s, char **text, int n_text); extern int slide_add_prestitle(Slide *s, char **text, int n_text); extern int slide_set_logical_size(Slide *s, double w, double h); -extern int slide_get_logical_size(Slide *s, double *w, double *h); +extern int slide_get_logical_size(Slide *s, Stylesheet *ss, double *w, double *h); /* For debugging, not really part of API */ extern void describe_slide(Slide *s); diff --git a/libstorycode/slide_render_cairo.c b/libstorycode/slide_render_cairo.c index 307b4d4..ed9b948 100644 --- a/libstorycode/slide_render_cairo.c +++ b/libstorycode/slide_render_cairo.c @@ -192,10 +192,13 @@ int slide_render_cairo(Slide *s, cairo_t *cr, ImageStore *is, Stylesheet *styles double bgcol[4]; double bgcol2[4]; cairo_pattern_t *patt = NULL; + double w, h; r = stylesheet_get_background(stylesheet, STYEL_SLIDE, &bg, bgcol, bgcol2); if ( r ) return 1; + slide_get_logical_size(s, stylesheet, &w, &h); + /* Overall background */ cairo_rectangle(cr, 0.0, 0.0, s->logical_w, s->logical_h); switch ( bg ) { diff --git a/libstorycode/stylesheet.c b/libstorycode/stylesheet.c index 5d40f4b..0002859 100644 --- a/libstorycode/stylesheet.c +++ b/libstorycode/stylesheet.c @@ -144,6 +144,15 @@ static struct style *get_style(Stylesheet *s, enum style_element el) } +int stylesheet_get_slide_default_size(Stylesheet *s, double *w, double *h) +{ + if ( s == NULL ) return 1; + *w = s->default_slide_w; + *h = s->default_slide_h; + return 0; +} + + int stylesheet_set_slide_default_size(Stylesheet *s, double w, double h) { if ( s == NULL ) return 1; diff --git a/libstorycode/stylesheet.h b/libstorycode/stylesheet.h index f050303..5bd1695 100644 --- a/libstorycode/stylesheet.h +++ b/libstorycode/stylesheet.h @@ -83,6 +83,7 @@ extern Stylesheet *stylesheet_new(void); extern void stylesheet_free(Stylesheet *s); extern int stylesheet_set_slide_default_size(Stylesheet *s, double w, double h); +extern int stylesheet_get_slide_default_size(Stylesheet *s, double *w, double *h); extern int stylesheet_set_geometry(Stylesheet *s, enum style_element el, struct frame_geom geom); extern int stylesheet_set_font(Stylesheet *s, enum style_element el, char *font); diff --git a/src/pdfstorycode.c b/src/pdfstorycode.c index ad1d706..92e2809 100644 --- a/src/pdfstorycode.c +++ b/src/pdfstorycode.c @@ -67,7 +67,8 @@ static int render_slides_to_pdf(Presentation *p, ImageStore *is, const char *fil double log_w, log_h; s = presentation_slide(p, i); - slide_get_logical_size(s, &log_w, &log_h); + slide_get_logical_size(s, presentation_get_stylesheet(p), + &log_w, &log_h); cairo_pdf_surface_set_size(surf, w, w*(log_h/log_w)); -- cgit v1.2.3