diff options
Diffstat (limited to 'libstorycode/narrative_render_cairo.c')
-rw-r--r-- | libstorycode/narrative_render_cairo.c | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/libstorycode/narrative_render_cairo.c b/libstorycode/narrative_render_cairo.c index ebd14f9..0e65878 100644 --- a/libstorycode/narrative_render_cairo.c +++ b/libstorycode/narrative_render_cairo.c @@ -456,12 +456,10 @@ static void draw_text(struct narrative_item *item, cairo_t *cr) cairo_save(cr); cairo_translate(cr, item->space_l, item->space_t); - //if ( (hpos + cur_h > min_y) && (hpos < max_y) ) { - cairo_set_source_rgba(cr, 0.0, 0.0, 0.0, 1.0); - pango_cairo_update_layout(cr, item->layout); - pango_cairo_show_layout(cr, item->layout); - cairo_fill(cr); - //} /* else paragraph is not visible */ + cairo_set_source_rgba(cr, 0.0, 0.0, 0.0, 1.0); + pango_cairo_update_layout(cr, item->layout); + pango_cairo_show_layout(cr, item->layout); + cairo_fill(cr); cairo_restore(cr); } @@ -495,9 +493,11 @@ int narrative_render_item_cairo(Narrative*n, cairo_t *cr, int i) /* NB You must first call narrative_wrap() */ -int narrative_render_cairo(Narrative *n, cairo_t *cr, Stylesheet *stylesheet) +int narrative_render_cairo(Narrative *n, cairo_t *cr, Stylesheet *stylesheet, + double min_y, double max_y) { int i, r; + double hpos = 0.0; enum gradient bg; struct colour bgcol; struct colour bgcol2; @@ -539,8 +539,15 @@ int narrative_render_cairo(Narrative *n, cairo_t *cr, Stylesheet *stylesheet) cairo_translate(cr, n->space_l, n->space_t); for ( i=0; i<n->n_items; i++ ) { - narrative_render_item_cairo(n, cr, i); - cairo_translate(cr, 0.0, narrative_item_get_height(n, i)); + + double cur_h = narrative_item_get_height(n, i); + + if ( (hpos + cur_h > min_y) && (hpos < max_y) ) { + narrative_render_item_cairo(n, cr, i); + } /* else paragraph is not visible */ + + cairo_translate(cr, 0.0, cur_h); + hpos += cur_h; } cairo_restore(cr); |