X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Foutput%2Fcairo.c;h=3be0655fa7d1281ca401a59835c84f7a9e354aa5;hb=f8cba0fb13cceeac43fe4b15e2d5b48798ab1a6e;hp=b733c941fd103711d26bb690262ed408cf0be839;hpb=93d2d30107990d531a64e1d704ccf9e3033a9c1b;p=pspp diff --git a/src/output/cairo.c b/src/output/cairo.c index b733c941fd..3be0655fa7 100644 --- a/src/output/cairo.c +++ b/src/output/cairo.c @@ -193,7 +193,7 @@ static void xr_measure_cell_width (void *, const struct table_cell *, 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 *, @@ -1358,7 +1358,7 @@ static void xr_clip (struct xr_driver *, int clip[TABLE_N_AXES][2]); 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]) { @@ -1392,6 +1392,8 @@ xr_draw_cell (void *xr_, const struct table_cell *cell, int color_idx, 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]); @@ -2048,10 +2050,10 @@ xr_draw_png_chart (const struct chart_item *item, 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); @@ -2073,7 +2075,48 @@ xr_draw_png_chart (const struct chart_item *item, 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; +} + + struct xr_table_state { struct xr_render_fsm fsm;