aboutsummaryrefslogtreecommitdiff
path: root/libstorycode/slide_render_cairo.c
diff options
context:
space:
mode:
authorThomas White <taw@bitwiz.me.uk>2019-02-25 23:10:10 +0100
committerThomas White <taw@bitwiz.me.uk>2019-02-25 23:10:10 +0100
commitfd60b77df51cb24c33440ab7d9afe8043f9e43db (patch)
tree1085e56ec2686a3435c06fe01645aaa5b6d7ddb4 /libstorycode/slide_render_cairo.c
parent2cd7252202c10ef8918ce8885cdf26dd5fcf00f5 (diff)
Use padding
Diffstat (limited to 'libstorycode/slide_render_cairo.c')
-rw-r--r--libstorycode/slide_render_cairo.c23
1 files changed, 18 insertions, 5 deletions
diff --git a/libstorycode/slide_render_cairo.c b/libstorycode/slide_render_cairo.c
index 81b78ef..307b4d4 100644
--- a/libstorycode/slide_render_cairo.c
+++ b/libstorycode/slide_render_cairo.c
@@ -69,6 +69,8 @@ static void render_text(struct slide_item *item, cairo_t *cr, PangoContext *pc,
{
int i;
double x, y, w, h;
+ double pad_l, pad_r, pad_t, pad_b;
+ struct length pad[4];
const char *font;
enum alignment align;
double fgcol[4];
@@ -81,6 +83,12 @@ static void render_text(struct slide_item *item, cairo_t *cr, PangoContext *pc,
w = lcalc(item->geom.w, parent_w);
h = lcalc(item->geom.h, parent_h);
+ if ( stylesheet_get_padding(ss, el, pad) ) return;
+ pad_l = lcalc(pad[0], parent_w);
+ pad_r = lcalc(pad[1], parent_w);
+ pad_t = lcalc(pad[2], parent_h);
+ pad_b = lcalc(pad[3], parent_h);
+
font = stylesheet_get_font(ss, el, fgcol, &align);
if ( font == NULL ) return;
@@ -102,13 +110,19 @@ static void render_text(struct slide_item *item, cairo_t *cr, PangoContext *pc,
palignment = to_pangoalignment(item->align);
}
+ /* FIXME: Apply background */
+
+ cairo_save(cr);
+ cairo_translate(cr, x, y);
+ cairo_translate(cr, pad_l, pad_t);
+
for ( i=0; i<item->n_paras; i++ ) {
if ( item->layouts[i] == NULL ) {
item->layouts[i] = pango_layout_new(pc);
}
pango_layout_set_width(item->layouts[i],
- pango_units_from_double(w));
+ pango_units_from_double(w-pad_l-pad_r));
pango_layout_set_text(item->layouts[i], item->paragraphs[i], -1);
pango_layout_set_alignment(item->layouts[i], palignment);
@@ -121,17 +135,16 @@ static void render_text(struct slide_item *item, cairo_t *cr, PangoContext *pc,
/* FIXME: Clip to w,h */
- cairo_save(cr);
cairo_set_source_rgba(cr, fgcol[0], fgcol[1], fgcol[2], fgcol[3]);
- cairo_translate(cr, x, y);
+ cairo_move_to(cr, 0.0, 0.0);
pango_cairo_update_layout(cr, item->layouts[i]);
pango_cairo_show_layout(cr, item->layouts[i]);
pango_layout_get_extents(item->layouts[i], NULL, &rect);
- y += pango_units_to_double(rect.height);
+ cairo_translate(cr, 0.0, pango_units_to_double(rect.height));
cairo_fill(cr);
- cairo_restore(cr);
}
+ cairo_restore(cr);
}