cairo: Remove "emphasis" font option because it had no real effect.
[pspp] / src / output / cairo.c
index ae6e767603bf14c78cdaf8d078d0739dda155849..b02e8974f8ac23f4c3aca63a3224b2350e4b5832 100644 (file)
@@ -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
   };
@@ -287,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"));
@@ -505,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];
@@ -1612,13 +1614,6 @@ xr_rendering_create_text (struct xr_driver *xr, const char *text, cairo_t *cr)
   return r;
 }
 
-void
-xr_rendering_apply_options (struct xr_rendering *xr, struct string_map *o)
-{
-  if (is_table_item (xr->item))
-    apply_options (xr->xr, o);
-}
-
 struct xr_rendering *
 xr_rendering_create (struct xr_driver *xr, const struct output_item *item,
                      cairo_t *cr)
@@ -1968,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)));
@@ -2001,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