X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Foutput%2Fcairo.c;h=b02e8974f8ac23f4c3aca63a3224b2350e4b5832;hb=3b54533821614d17afc61f1cd3b87d3a06fbf4da;hp=e619088fa41ed00a3985cda38a0d2e3d441a8e54;hpb=72d48b1e7b54b438ba266ffc74e7e9f816629a1f;p=pspp diff --git a/src/output/cairo.c b/src/output/cairo.c index e619088fa4..b02e8974f8 100644 --- a/src/output/cairo.c +++ b/src/output/cairo.c @@ -43,6 +43,7 @@ #include "output/group-item.h" #include "output/message-item.h" #include "output/options.h" +#include "output/page-eject-item.h" #include "output/page-setup-item.h" #include "output/render.h" #include "output/table-item.h" @@ -108,7 +109,6 @@ enum xr_output_type enum xr_font_type { XR_FONT_PROPORTIONAL, - XR_FONT_EMPHASIS, XR_FONT_FIXED, XR_N_FONTS }; @@ -148,9 +148,6 @@ struct xr_driver int top_margin; /* Top margin in inch/(72 * XR_POINT). */ int bottom_margin; /* Bottom margin in inch/(72 * XR_POINT). */ - int line_space; /* Space between lines. */ - int line_width; /* Width of lines. */ - int min_break[TABLE_N_AXES]; /* Min cell size to break across pages. */ int object_spacing; /* Space between output objects. */ @@ -290,8 +287,6 @@ apply_options (struct xr_driver *xr, struct string_map *o) (d, o, "fixed-font", "monospace", font_size, false, false); xr->fonts[XR_FONT_PROPORTIONAL].desc = parse_font_option ( d, o, "prop-font", "sans serif", font_size, false, false); - xr->fonts[XR_FONT_EMPHASIS].desc = parse_font_option ( - d, o, "emph-font", "sans serif", font_size, false, true); xr->fg = parse_color (opt (d, o, "foreground-color", "#000000000000")); xr->bg = parse_color (opt (d, o, "background-color", "#FFFFFFFFFFFF")); @@ -508,29 +503,33 @@ xr_set_cairo (struct xr_driver *xr, cairo_t *cairo) if (xr->params == NULL) { + static const struct render_ops xr_render_ops = { + .draw_line = xr_draw_line, + .measure_cell_width = xr_measure_cell_width, + .measure_cell_height = xr_measure_cell_height, + .adjust_break = xr_adjust_break, + .draw_cell = xr_draw_cell, + }; + xr->params = xmalloc (sizeof *xr->params); - xr->params->draw_line = xr_draw_line; - xr->params->measure_cell_width = xr_measure_cell_width; - xr->params->measure_cell_height = xr_measure_cell_height; - xr->params->adjust_break = xr_adjust_break; - xr->params->draw_cell = xr_draw_cell; + xr->params->ops = &xr_render_ops; xr->params->aux = xr; xr->params->size[H] = xr->width; xr->params->size[V] = xr->length; xr->params->font_size[H] = xr->char_width; xr->params->font_size[V] = xr->char_height; - int lw = XR_LINE_WIDTH; - int ls = XR_LINE_SPACE; - for (int i = 0; i < TABLE_N_AXES; i++) + enum { LW = XR_LINE_WIDTH, LS = XR_LINE_SPACE }; + static const int xr_line_widths[RENDER_N_LINES] = { - xr->params->line_widths[i][RENDER_LINE_NONE] = 0; - xr->params->line_widths[i][RENDER_LINE_SINGLE] = lw; - xr->params->line_widths[i][RENDER_LINE_DASHED] = lw; - xr->params->line_widths[i][RENDER_LINE_THICK] = lw * 2; - xr->params->line_widths[i][RENDER_LINE_THIN] = lw / 2; - xr->params->line_widths[i][RENDER_LINE_DOUBLE] = 2 * lw + ls; - } + [RENDER_LINE_NONE] = 0, + [RENDER_LINE_SINGLE] = LW, + [RENDER_LINE_DASHED] = LW, + [RENDER_LINE_THICK] = LW * 2, + [RENDER_LINE_THIN] = LW / 2, + [RENDER_LINE_DOUBLE] = 2 * LW + LS, + }; + xr->params->line_widths = xr_line_widths; for (int i = 0; i < TABLE_N_AXES; i++) xr->params->min_break[i] = xr->min_break[i]; @@ -1964,11 +1963,6 @@ xr_render_text (struct xr_driver *xr, const struct text_item *text_item) case TEXT_ITEM_PAGE_TITLE: break; - case TEXT_ITEM_EJECT_PAGE: - if (xr->y > 0) - return xr_render_eject (); - break; - default: return xr_render_table ( xr, text_item_to_table_item (text_item_ref (text_item))); @@ -1997,6 +1991,8 @@ xr_render_output_item (struct xr_driver *xr, return xr_render_chart (to_chart_item (output_item)); else if (is_text_item (output_item)) return xr_render_text (xr, to_text_item (output_item)); + else if (is_page_eject_item (output_item)) + return xr->y > 0 ? xr_render_eject () : NULL; else if (is_message_item (output_item)) return xr_render_message (xr, to_message_item (output_item)); else