X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Foutput%2Fcairo.c;h=a08771bb449ae68cb2d0d126c3c439a0e2907395;hb=refs%2Fheads%2Fctables7;hp=1c043bb93d3418a7d0948eafe09107d9397ec64c;hpb=21f20b8cb6460fd5ac9db7fde038bc00cfa80831;p=pspp diff --git a/src/output/cairo.c b/src/output/cairo.c index 1c043bb93d..a08771bb44 100644 --- a/src/output/cairo.c +++ b/src/output/cairo.c @@ -26,6 +26,7 @@ #include "output/cairo-pager.h" #include "output/driver-provider.h" #include "output/options.h" +#include "output/output-item.h" #include "output/table.h" #include @@ -186,7 +187,7 @@ static struct xr_driver * xr_allocate (const char *name, int device_type, enum xr_output_type output_type, struct string_map *o) { - struct xr_driver *xr = xzalloc (sizeof *xr); + struct xr_driver *xr = XZALLOC (struct xr_driver); struct output_driver *d = &xr->driver; output_driver_init (d, &cairo_driver_class, name, device_type); @@ -602,31 +603,32 @@ xr_update_page_setup (struct output_driver *driver, } static void -xr_submit (struct output_driver *driver, const struct output_item *output_item) +xr_submit (struct output_driver *driver, const struct output_item *item) { struct xr_driver *xr = xr_driver_cast (driver); - if (is_page_setup_item (output_item)) - { - if (!xr->pager) - xr_update_page_setup (driver, - to_page_setup_item (output_item)->page_setup); - return; - } - if (!xr->pager) { xr->pager = xr_pager_create (xr->page_style, xr->fsm_style); xr_pager_add_page (xr->pager, cairo_create (xr->drawing_surface)); } - xr_pager_add_item (xr->pager, output_item); + xr_pager_add_item (xr->pager, item); while (xr_pager_needs_new_page (xr->pager)) { xr_finish_page (xr); xr_pager_add_page (xr->pager, cairo_create (xr->drawing_surface)); } } + +static void +xr_setup (struct output_driver *driver, const struct page_setup *ps) +{ + struct xr_driver *xr = xr_driver_cast (driver); + + if (!xr->pager) + xr_update_page_setup (driver, ps); +} struct output_driver_factory pdf_driver_factory = { "pdf", "pspp.pdf", xr_pdf_create }; @@ -639,8 +641,9 @@ struct output_driver_factory png_driver_factory = static const struct output_driver_class cairo_driver_class = { - "cairo", - xr_destroy, - xr_submit, - NULL, + .name = "cairo", + .destroy = xr_destroy, + .submit = xr_submit, + .setup = xr_setup, + .handles_groups = true, };