/* PSPP - a program for statistical analysis.
- Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
+ Copyright (C) 2009, 2010, 2011, 2012, 2013 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
#define V TABLE_VERT
/* Measurements as we present to the rest of PSPP. */
-#define XR_POINT PANGO_SCALE
-#define XR_INCH (XR_POINT * 72)
+#define XR_POINT 1000
/* Conversions to and from points. */
static double
xr->fonts[XR_FONT_EMPHASIS].desc = parse_font (d, o, "emph-font",
"serif italic", font_points);
- xr->line_gutter = XR_POINT;
+ xr->line_gutter = parse_dimension (opt (d, o, "gutter", "3pt"));
xr->line_space = XR_POINT;
xr->line_width = XR_POINT / 2;
xr->page_number = 0;
return xr;
}
-static bool
-xr_is_72dpi (cairo_t *cr)
-{
- cairo_surface_type_t type;
- cairo_surface_t *surface;
-
- surface = cairo_get_target (cr);
- type = cairo_surface_get_type (surface);
- return type == CAIRO_SURFACE_TYPE_PDF || type == CAIRO_SURFACE_TYPE_PS;
-}
-
static bool
xr_set_cairo (struct xr_driver *xr, cairo_t *cairo)
{
- PangoContext *context;
- PangoFontMap *map;
int i;
xr->cairo = cairo;
cairo_set_line_width (xr->cairo, xr_to_pt (xr->line_width));
- map = pango_cairo_font_map_get_default ();
- context = pango_font_map_create_context (map);
- if (xr_is_72dpi (cairo))
- {
- /* Pango seems to always scale fonts according to the DPI specified
- in the font map, even if the surface has a real DPI. The default
- DPI is 96, so on a 72 DPI device fonts end up being 96/72 = 133%
- of their desired size. We deal with this by fixing the resolution
- here. Presumably there is a better solution, but what? */
- pango_cairo_context_set_resolution (context, 72.0);
- }
-
xr->char_width = 0;
xr->char_height = 0;
for (i = 0; i < XR_N_FONTS; i++)
struct xr_font *font = &xr->fonts[i];
int char_width, char_height;
- font->layout = pango_layout_new (context);
+ font->layout = pango_cairo_create_layout (cairo);
pango_layout_set_font_description (font->layout, font->desc);
pango_layout_set_text (font->layout, "0", 1);
xr->char_height = MAX (xr->char_height, char_height);
}
- g_object_unref (G_OBJECT (context));
-
if (xr->params == NULL)
{
int single_width, double_width;
{
struct xr_driver *xr = xr_driver_cast (driver);
+ output_driver_track_current_command (output_item, &xr->command_name);
+
xr_driver_output_item (xr, output_item);
while (xr_driver_need_new_page (xr))
{
{
int w0 = render_page_get_size (r->page, H);
int w1 = r->title_width;
- *w = MAX (w0, w1) / 1024;
- *h = (render_page_get_size (r->page, V) + r->title_height) / 1024;
+ *w = MAX (w0, w1) / XR_POINT;
+ *h = (render_page_get_size (r->page, V) + r->title_height) / XR_POINT;
}
else
{
static void xr_draw_chart (const struct chart_item *, cairo_t *,
double x, double y, double width, double height);
-/* Draws onto CR at least the region of R that is enclosed in (X,Y)-(X+W,Y+H),
- and possibly some additional parts. */
+/* Draws onto CR */
void
-xr_rendering_draw (struct xr_rendering *r, cairo_t *cr,
- int x, int y, int w, int h)
+xr_rendering_draw_all (struct xr_rendering *r, cairo_t *cr)
{
if (is_table_item (r->item))
{
}
xr->y = r->title_height;
- render_page_draw_region (r->page, x * 1024, (y * 1024) - r->title_height,
- w * 1024, h * 1024);
+ render_page_draw (r->page);
}
else
xr_draw_chart (to_chart_item (r->item), cr,