diff --git a/util/cairo-script/Makefile.am b/util/cairo-script/Makefile.am index acde8f594..8b783a9ad 100644 --- a/util/cairo-script/Makefile.am +++ b/util/cairo-script/Makefile.am @@ -28,5 +28,11 @@ csi_replay_LDADD = libcairo-script-interpreter.la $(top_builddir)/src/libcairo.l csi_exec_SOURCES = csi-exec.c csi_exec_LDADD = libcairo-script-interpreter.la $(top_builddir)/src/libcairo.la $(CAIRO_LIBS) +if CAIRO_HAS_SCRIPT_SURFACE +EXTRA_PROGRAMS += csi-trace +csi_trace_SOURCES = csi-trace.c +csi_trace_LDADD = libcairo-script-interpreter.la $(top_builddir)/src/libcairo.la $(CAIRO_LIBS) +endif + EXTRA_DIST = \ COPYING diff --git a/util/cairo-script/csi-trace.c b/util/cairo-script/csi-trace.c new file mode 100644 index 000000000..418a3353f --- /dev/null +++ b/util/cairo-script/csi-trace.c @@ -0,0 +1,40 @@ +#include +#include + +#include +#include +#include + +static cairo_surface_t * +_similar_surface_create (void *closure, + cairo_content_t content, + double width, double height) +{ + return cairo_surface_create_similar (closure, content, width, height); +} + +int +main (int argc, char **argv) +{ + cairo_script_interpreter_t *csi; + cairo_script_interpreter_hooks_t hooks = { + .surface_create = _similar_surface_create, + }; + int i; + + csi = cairo_script_interpreter_create (); + + for (i = 1; i < argc; i++) { + char buf[4096]; + + snprintf (buf, sizeof (buf), "%s.trace", basename (argv[i])); + + cairo_surface_destroy (hooks.closure); + hooks.closure = cairo_script_surface_create (buf, -1, -1); + cairo_script_interpreter_install_hooks (csi, &hooks); + cairo_script_interpreter_run (csi, argv[i]); + } + cairo_surface_destroy (hooks.closure); + + return cairo_script_interpreter_destroy (csi); +}