free(im->gdes);
if (im->font_options)
cairo_font_options_destroy(im->font_options);
-
- status = cairo_status (im->cr);
+
+ status = cairo_status(im->cr);
if (im->cr)
cairo_destroy(im->cr);
if (im->surface)
cairo_surface_destroy(im->surface);
if (status)
- fprintf(stderr,"OOPS: Cairo has issuesm it can't even die: %s\n",
- cairo_status_to_string (status));
+ fprintf(stderr, "OOPS: Cairo has issuesm it can't even die: %s\n",
+ cairo_status_to_string(status));
return 0;
}
return mnt;
}
+/* from http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm */
+/* yes we are loosing precision by doing tos with floats instead of doubles
+ but it seems more stable this way. */
+
static int AlmostEqual2sComplement(
float A,
float B,
/* arrow for X and Y axis direction */
- gfx_new_area(im, im->xorigin + im->xsize + 2, im->yorigin - 3, im->xorigin + im->xsize + 2, im->yorigin + 3, im->xorigin + im->xsize + 7, im->yorigin, /* horyzontal */
+ gfx_new_area(im, im->xorigin + im->xsize + 2, im->yorigin - 3, im->xorigin + im->xsize + 2, im->yorigin + 3, im->xorigin + im->xsize + 7, im->yorigin, /* horyzontal */
im->graph_col[GRC_ARROW]);
gfx_close_path(im);
- gfx_new_area(im, im->xorigin - 3, im->yorigin - im->ysize - 2, im->xorigin + 3, im->yorigin - im->ysize - 2, im->xorigin, im->yorigin - im->ysize - 7, /* vertical */
+ gfx_new_area(im, im->xorigin - 3, im->yorigin - im->ysize - 2, im->xorigin + 3, im->yorigin - im->ysize - 2, im->xorigin, im->yorigin - im->ysize - 7, /* vertical */
im->graph_col[GRC_ARROW]);
gfx_close_path(im);
return 0;
}
-/* from http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm */
-/* yes we are loosing precision by doing tos with floats instead of doubles
- but it seems more stable this way. */
+
+
+static cairo_status_t cairo_write_func_file(
+ void *closure,
+ const unsigned char *data,
+ unsigned int length)
+{
+ if (fwrite(data, length, 1, closure) != 1)
+ return CAIRO_STATUS_WRITE_ERROR;
+ return CAIRO_STATUS_SUCCESS;
+}
/* draw that picture thing ... */
switch (im->imgformat) {
case IF_PNG:
- if (cairo_surface_write_to_png(im->surface, im->graphfile) !=
- CAIRO_STATUS_SUCCESS) {
- rrd_set_error("Could not save png to '%s'", im->graphfile);
- return 1;
- }
+ {
+ cairo_status_t status;
+
+ if (strcmp(im->graphfile, "-") == 0) {
+ status = cairo_surface_write_to_png_stream(im->surface, &cairo_write_func_file, (void*)stdout);
+ } else {
+ status = cairo_surface_write_to_png(im->surface, im->graphfile);
+ }
+
+ if (status != CAIRO_STATUS_SUCCESS) {
+ rrd_set_error("Could not save png to '%s'", im->graphfile);
+ return 1;
+ }
+ }
break;
default:
cairo_show_page(im->cr);