static int xr_measure_cell_height (void *, const struct table_cell *,
int width);
static void xr_draw_cell (void *, const struct table_cell *, int color_idx,
- int bb[TABLE_N_AXES][2],
+ int bb[TABLE_N_AXES][2], int valign_offset,
int spill[TABLE_N_AXES][2],
int clip[TABLE_N_AXES][2]);
static int xr_adjust_break (void *, const struct table_cell *,
static void
xr_draw_cell (void *xr_, const struct table_cell *cell, int color_idx,
- int bb[TABLE_N_AXES][2],
+ int bb[TABLE_N_AXES][2], int valign_offset,
int spill[TABLE_N_AXES][2],
int clip[TABLE_N_AXES][2])
{
if (!xr->systemcolors)
set_source_rgba (xr->cairo, &cell->style->font_style.fg[color_idx]);
+ bb[V][0] += valign_offset;
+
for (int axis = 0; axis < TABLE_N_AXES; axis++)
{
bb[axis][0] += px_to_xr (cell->style->cell_style.margin[axis][0]);
number_pos = strchr (file_name_template, '#');
if (number_pos != NULL)
- file_name = xasprintf ("%.*s%d%s", (int) (number_pos - file_name_template),
+ file_name = xasprintf ("%.*s%d%s.png", (int) (number_pos - file_name_template),
file_name_template, number, number_pos + 1);
else
- file_name = xstrdup (file_name_template);
+ file_name = xasprintf ("%s.png", file_name_template);
surface = cairo_image_surface_create (CAIRO_FORMAT_RGB24, width, length);
cr = cairo_create (surface);
return file_name;
}
+
+
+char *
+xr_draw_eps_chart (const struct chart_item *item,
+ const char *file_name_template, int number,
+ const struct cell_color *fg,
+ const struct cell_color *bg)
+{
+ const int width = 640;
+ const int length = 480;
+
+ cairo_surface_t *surface;
+ const char *number_pos;
+ char *file_name;
+ cairo_t *cr;
+
+ number_pos = strchr (file_name_template, '#');
+ if (number_pos != NULL)
+ file_name = xasprintf ("%.*s%d%s.eps", (int) (number_pos - file_name_template),
+ file_name_template, number, number_pos + 1);
+ else
+ file_name = xasprintf ("%s.eps", file_name_template);
+
+ surface = cairo_ps_surface_create (file_name, width, length);
+ cairo_ps_surface_set_eps (surface, true);
+ cr = cairo_create (surface);
+
+ cairo_set_source_rgb (cr, bg->r / 255.0, bg->g / 255.0, bg->b / 255.0);
+ cairo_paint (cr);
+
+ cairo_set_source_rgb (cr, fg->r / 255.0, fg->g / 255.0, fg->b / 255.0);
+
+ xr_draw_chart (item, cr, 0.0, 0.0, width, length);
+
+ cairo_destroy (cr);
+ cairo_surface_destroy (surface);
+
+ return file_name;
+}
+
\f
+
struct xr_table_state
{
struct xr_render_fsm fsm;
else
return NULL;
}
+
+bool
+xr_draw_svg_file (struct xr_rendering *r,
+ const char *filename)
+{
+ int width, height;
+ g_assert (r);
+ xr_rendering_measure (r, &width, &height);
+ cairo_surface_t *surface = cairo_svg_surface_create (filename, width, height);
+ if (!surface)
+ {
+ g_error ("Could not create cairo svg surface with file %s", filename);
+ return FALSE;
+ }
+ cairo_t *cr = cairo_create (surface);
+ xr_rendering_draw (r, cr, 0, 0, width, height);
+ cairo_destroy (cr);
+ cairo_surface_destroy (surface);
+ return TRUE;
+}