X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=inline;f=src%2Foutput%2Fcairo.c;h=cd8f0b0e999decb2ae1434463885c045ae827600;hb=7b51bc9abbb6ed4a34cf396883d1dc8479b1e554;hp=8156016cd415bd33fe97ed4176ed91e3d6299aab;hpb=ee7b576822f2fa5025e08eccf5c8e7728838c460;p=pspp diff --git a/src/output/cairo.c b/src/output/cairo.c index 8156016cd4..cd8f0b0e99 100644 --- a/src/output/cairo.c +++ b/src/output/cairo.c @@ -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); } -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);