output: Make default output file name depend on the format.
[pspp] / src / output / cairo.c
index 8156016cd415bd33fe97ed4176ed91e3d6299aab..cd8f0b0e999decb2ae1434463885c045ae827600 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
+   Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -32,6 +32,7 @@
 #include "output/charts/piechart.h"
 #include "output/charts/plot-hist.h"
 #include "output/charts/roc-chart.h"
+#include "output/charts/spreadlevel-plot.h"
 #include "output/charts/scree.h"
 #include "output/driver-provider.h"
 #include "output/message-item.h"
@@ -203,6 +204,8 @@ parse_color (struct output_driver *d, struct string_map *options,
        }
     }
 
+  free (string);
+
   /* Convert 16 bit ints to float */
   *dred = red / (double) 0xFFFF;
   *dgreen = green / (double) 0xFFFF;
@@ -246,9 +249,18 @@ apply_options (struct xr_driver *xr, struct string_map *o)
 {
   struct output_driver *d = &xr->driver;
 
-  int paper_width, paper_length;
+  int paper_width, paper_length, i;
 
   int font_points = parse_int (opt (d, o, "font-size", "10000"), 1000, 1000000);
+
+  for (i = 0; i < XR_N_FONTS; i++)
+    {
+      struct xr_font *font = &xr->fonts[i];
+
+      if (font->desc != NULL)
+        pango_font_description_free (font->desc);
+    }
+
   xr->fonts[XR_FONT_FIXED].desc = parse_font (d, o, "fixed-font", "monospace",
                                               font_points);
   xr->fonts[XR_FONT_PROPORTIONAL].desc = parse_font (d, o, "prop-font",
@@ -310,7 +322,7 @@ xr_set_cairo (struct xr_driver *xr, cairo_t *cairo)
   cairo_set_line_width (xr->cairo, xr_to_pt (xr->line_width));
 
   map = pango_cairo_font_map_get_default ();
-  context = pango_cairo_font_map_create_context (PANGO_CAIRO_FONT_MAP (map));
+  context = pango_font_map_create_context (map);
   if (xr_is_72dpi (cairo))
     {
       /* Pango seems to always scale fonts according to the DPI specified
@@ -374,14 +386,12 @@ xr_create (const char *file_name, enum settings_output_devices device_type,
            struct string_map *o, enum xr_output_type file_type)
 {
   enum { MIN_WIDTH = 3, MIN_LENGTH = 3 };
-  struct output_driver *d;
   struct xr_driver *xr;
   cairo_surface_t *surface;
   cairo_status_t status;
   double width_pt, length_pt;
 
   xr = xr_allocate (file_name, device_type, o);
-  d = &xr->driver;
 
   width_pt = (xr->width + xr->left_margin + xr->right_margin) / 1000.0;
   length_pt = (xr->length + xr->top_margin + xr->bottom_margin) / 1000.0;
@@ -912,9 +922,12 @@ xr_draw_title (struct xr_driver *xr, const char *title,
   xr_draw_cell (xr, &cell, bb, bb);
 }
 \f
-struct output_driver_factory pdf_driver_factory = { "pdf", xr_pdf_create };
-struct output_driver_factory ps_driver_factory = { "ps", xr_ps_create };
-struct output_driver_factory svg_driver_factory = { "svg", xr_svg_create };
+struct output_driver_factory pdf_driver_factory =
+  { "pdf", "pspp.pdf", xr_pdf_create };
+struct output_driver_factory ps_driver_factory =
+  { "ps", "pspp.ps", xr_ps_create };
+struct output_driver_factory svg_driver_factory =
+  { "svg", "pspp.svg", xr_svg_create };
 
 static const struct output_driver_class cairo_driver_class =
 {
@@ -982,7 +995,8 @@ xr_rendering_create_text (struct xr_driver *xr, const char *text, cairo_t *cr)
 void 
 xr_rendering_apply_options (struct xr_rendering *xr, struct string_map *o)
 {
-  apply_options (xr->xr, o);
+  if (is_table_item (xr->item))
+    apply_options (xr->xr, o);
 }
 
 struct xr_rendering *
@@ -1015,8 +1029,6 @@ xr_rendering_create (struct xr_driver *xr, const struct output_item *item,
     {
       r = xzalloc (sizeof *r);
       r->item = output_item_ref (item);
-      r->xr = xr;
-      xr_set_cairo (xr, cr);
     }
 
   return r;
@@ -1092,6 +1104,8 @@ xr_draw_chart (const struct chart_item *chart_item, cairo_t *cr,
     xrchart_draw_roc (chart_item, cr, &geom);
   else if (is_scree (chart_item))
     xrchart_draw_scree (chart_item, cr, &geom);
+  else if (is_spreadlevel_plot_chart (chart_item))
+    xrchart_draw_spreadlevel (chart_item, cr, &geom);
   else
     NOT_REACHED ();
   xrchart_geometry_free (cr, &geom);