X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Foutput%2Fcairo.c;h=a08771bb449ae68cb2d0d126c3c439a0e2907395;hb=5f379b736b5797b0583e99652d51a35a23ba38f8;hp=0aa35b66cc69d8fc3aaf8200d71aa337e8b12116;hpb=052cf5f9ffd4fbbda175fcb0417352b332fabc37;p=pspp diff --git a/src/output/cairo.c b/src/output/cairo.c index 0aa35b66cc..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); @@ -254,7 +255,6 @@ xr_allocate (const char *name, int device_type, }, .initial_page_number = 1, - .object_spacing = object_spacing, .include_outline = include_outline, }; @@ -266,6 +266,7 @@ xr_allocate (const char *name, int device_type, .font = font, .fg = fg, .use_system_colors = systemcolors, + .object_spacing = object_spacing, .font_resolution = font_resolution, }; @@ -574,7 +575,6 @@ xr_update_page_setup (struct output_driver *driver, }, .initial_page_number = setup->initial_page_number, - .object_spacing = setup->object_spacing * 72 * XR_POINT, .include_outline = old_ps->include_outline, }; for (size_t i = 0; i < 2; i++) @@ -593,6 +593,7 @@ xr_update_page_setup (struct output_driver *driver, .font = pango_font_description_copy (old_fs->font), .fg = old_fs->fg, .use_system_colors = old_fs->use_system_colors, + .object_spacing = setup->object_spacing * 72 * XR_POINT, .font_resolution = old_fs->font_resolution, }; xr_fsm_style_unref (old_fs); @@ -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, };