aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas White <taw@bitwiz.me.uk>2019-03-04 17:25:15 +0100
committerThomas White <taw@bitwiz.me.uk>2019-03-04 22:05:17 +0100
commit373d5183849c2855345ea45c964479086d67a7d2 (patch)
tree35263e5c00ed152fb8175fee89d0f6e598fb6cfb
parent9c4fa38c4b301645439a6718ef42aa597a97de9b (diff)
Correct aspect ratio for slides in narrative
-rw-r--r--libstorycode/narrative_priv.h2
-rw-r--r--libstorycode/narrative_render_cairo.c26
2 files changed, 22 insertions, 6 deletions
diff --git a/libstorycode/narrative_priv.h b/libstorycode/narrative_priv.h
index 9076def..5c0af27 100644
--- a/libstorycode/narrative_priv.h
+++ b/libstorycode/narrative_priv.h
@@ -60,6 +60,8 @@ struct narrative_item
/* For SLIDE */
Slide *slide;
+ double slide_w;
+ double slide_h;
};
diff --git a/libstorycode/narrative_render_cairo.c b/libstorycode/narrative_render_cairo.c
index 0cc9c4d..cd2d872 100644
--- a/libstorycode/narrative_render_cairo.c
+++ b/libstorycode/narrative_render_cairo.c
@@ -113,6 +113,24 @@ static void wrap_text(struct narrative_item *item, PangoContext *pc,
}
+static void wrap_slide(struct narrative_item *item, Stylesheet *ss)
+{
+ double w, h;
+
+ item->space_l = 0.0;
+ item->space_r = 0.0;
+ item->space_t = 10.0;
+ item->space_b = 10.0;
+
+ slide_get_logical_size(item->slide, ss, &w, &h);
+ item->slide_h = 320.0;
+ item->slide_w = item->slide_h*w/h;
+
+ item->h = item->slide_h + item->space_t + item->space_b;
+
+}
+
+
int narrative_wrap(Narrative *n, Stylesheet *stylesheet, PangoLanguage *lang,
PangoContext *pc, double w)
{
@@ -148,11 +166,7 @@ int narrative_wrap(Narrative *n, Stylesheet *stylesheet, PangoLanguage *lang,
break;
case NARRATIVE_ITEM_SLIDE :
- n->items[i].space_l = 0.0;
- n->items[i].space_r = 0.0;
- n->items[i].space_t = 0.0;
- n->items[i].space_b = 0.0;
- n->items[i].h = 256.0;
+ wrap_slide(&n->items[i], stylesheet);
break;
default :
@@ -187,7 +201,7 @@ static void draw_slide(struct narrative_item *item, cairo_t *cr)
cairo_user_to_device(cr, &x, &y);
x = rint(x); y = rint(y);
cairo_device_to_user(cr, &x, &y);
- cairo_rectangle(cr, x+0.5, y+0.5, 320.0, 256.0);
+ cairo_rectangle(cr, x+0.5, y+0.5, item->slide_w, item->slide_h);
cairo_set_source_rgba(cr, 0.0, 0.0, 0.0, 1.0);
cairo_set_line_width(cr, 1.0);