X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Foutput%2Fcairo.c;fp=src%2Foutput%2Fcairo.c;h=87bca8cb449c5cebfb90bc5d7b9682092bc5d52f;hb=00e10850124d68e722d9fba5b8c9467fff6863a3;hp=1c03db84fb39b7f7db8271c8033a676b9bba3eed;hpb=d6fb2728eb8a99e89165c45d8e5d4a482114d3a0;p=pspp diff --git a/src/output/cairo.c b/src/output/cairo.c index 1c03db84fb..87bca8cb44 100644 --- a/src/output/cairo.c +++ b/src/output/cairo.c @@ -1436,8 +1436,7 @@ struct xr_table_state { struct xr_render_fsm fsm; struct table_item *table_item; - struct render_break x_break; - struct render_break y_break; + struct render_pager *p; int caption_height; }; @@ -1446,31 +1445,17 @@ xr_table_render (struct xr_render_fsm *fsm, struct xr_driver *xr) { struct xr_table_state *ts = UP_CAST (fsm, struct xr_table_state, fsm); - for (;;) + while (render_pager_has_next (ts->p)) { - struct render_page *y_slice; - int space; + int space = xr->length - xr->y - ts->caption_height; + struct render_page *slice = render_pager_next (ts->p, space); - while (!render_break_has_next (&ts->y_break)) - { - struct render_page *x_slice; - - render_break_destroy (&ts->y_break); - if (!render_break_has_next (&ts->x_break)) - return false; - - x_slice = render_break_next (&ts->x_break, xr->width); - render_break_init (&ts->y_break, x_slice, V); - } - - space = xr->length - xr->y; - if (render_break_next_size (&ts->y_break) > space) + if (!slice) { assert (xr->y > 0); return true; } - y_slice = render_break_next (&ts->y_break, space); if (ts->caption_height) { if (xr->cairo) @@ -1482,10 +1467,11 @@ xr_table_render (struct xr_render_fsm *fsm, struct xr_driver *xr) } if (xr->cairo) - render_page_draw (y_slice); - xr->y += render_page_get_size (y_slice, V); - render_page_unref (y_slice); + render_page_draw (slice); + xr->y += render_page_get_size (slice, V); + render_page_unref (slice); } + return false; } static void @@ -1494,8 +1480,7 @@ xr_table_destroy (struct xr_render_fsm *fsm) struct xr_table_state *ts = UP_CAST (fsm, struct xr_table_state, fsm); table_item_unref (ts->table_item); - render_break_destroy (&ts->x_break); - render_break_destroy (&ts->y_break); + render_pager_destroy (ts->p); free (ts); } @@ -1518,8 +1503,7 @@ xr_render_table (struct xr_driver *xr, const struct table_item *table_item) &caption_width, &ts->caption_height); xr->params->size[V] = xr->length - ts->caption_height; - render_break_init (&ts->x_break, page, H); - render_break_init_empty (&ts->y_break); + ts->p = render_pager_create (page); return &ts->fsm; }