static cairo_status_t
_cairo_xml_emit_surface (cairo_xml_t *xml,
			 const cairo_surface_pattern_t *pattern)
{
    cairo_surface_t *source = pattern->surface;
    cairo_status_t status;

    if (_cairo_surface_is_recording (source)) {
	status = cairo_xml_for_recording_surface (&xml->base, source);
    } else {
	cairo_image_surface_t *image;
	void *image_extra;

	status = _cairo_surface_acquire_source_image (source,
						      &image, &image_extra);
	if (unlikely (status))
	    return status;

	status = _cairo_xml_emit_image (xml, image);

	_cairo_surface_release_source_image (source, image, image_extra);
    }

    return status;
}
Exemple #2
0
static VALUE
cr_xml_device_reply (VALUE self, VALUE recording_surface)
{
  cairo_device_t *device;

  device = _SELF;
  cairo_xml_for_recording_surface (device,
                                   RVAL2CRSURFACE (recording_surface));
  cr_device_check_status (device);
  return Qnil;
}
Exemple #3
0
int
main (int argc, char **argv)
{
    cairo_surface_t *surface = NULL;
    const cairo_script_interpreter_hooks_t hooks = {
	.closure = &surface,
	.surface_create = _surface_create,
    };
    cairo_script_interpreter_t *csi;
    FILE *in = stdin, *out = stdout;

    if (argc >= 2 && strcmp (argv[1], "-"))
	in = fopen (argv[1], "r");
    if (argc >= 3 && strcmp (argv[2], "-"))
	out = fopen (argv[2], "w");

    csi = cairo_script_interpreter_create ();
    cairo_script_interpreter_install_hooks (csi, &hooks);
    cairo_script_interpreter_feed_stream (csi, in);
    cairo_script_interpreter_finish (csi);
    cairo_script_interpreter_destroy (csi);

    if (surface != NULL) {
	cairo_device_t *xml;

	xml = cairo_xml_create_for_stream (stdio_write, out);
	cairo_xml_for_recording_surface (xml, surface);
	cairo_device_destroy (xml);

	cairo_surface_destroy (surface);
    }

    if (in != stdin)
	fclose (in);
    if (out != stdout)
	fclose (out);

    return 0;
}