/* * gcc `pkg-config --cflags --libs cairo` test_template_ps.c -o test_template * * cairo error checking for png/ps/pdf/svg streams */ #include #include #include #include cairo_status_t write_func (void *closure, const unsigned char *data, unsigned int length) { return CAIRO_STATUS_WRITE_ERROR; } void draw (cairo_t *cr) { cairo_move_to(cr, 0,0); cairo_line_to(cr, 100,100); cairo_stroke (cr); } int main (void) { cairo_t *cr; cairo_surface_t *surface; cairo_status_t status1, status2; printf ("status (CAIRO_STATUS_SUCCESS is 0)\n"); /* PNG stream error */ surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 100, 100); cr = cairo_create (surface); draw (cr); status1 = cairo_surface_write_to_png_stream (surface, write_func, NULL); printf ("PNG %i\n", status1); cairo_surface_destroy (surface); cairo_destroy (cr); /* PS stream error */ surface = cairo_ps_surface_create_for_stream (write_func, NULL, 100, 100); cr = cairo_create (surface); draw (cr); cairo_show_page (cr); status1 = cairo_status (cr); status2 = cairo_surface_status (surface); printf ("PS %i, %i\n", status1, status2); cairo_surface_destroy (surface); cairo_destroy (cr); /* PDF stream error */ surface = cairo_pdf_surface_create_for_stream (write_func, NULL, 100, 100); cr = cairo_create (surface); draw (cr); cairo_show_page (cr); status1 = cairo_status (cr); status2 = cairo_surface_status (surface); printf ("PS %i, %i\n", status1, status2); cairo_surface_destroy (surface); cairo_destroy (cr); /* SVG stream error */ surface = cairo_svg_surface_create_for_stream (write_func, NULL, 100, 100); cr = cairo_create (surface); draw (cr); cairo_show_page (cr); status1 = cairo_status (cr); status2 = cairo_surface_status (surface); printf ("PS %i, %i\n", status1, status2); cairo_surface_destroy (surface); cairo_destroy (cr); return 0; }