diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2011-08-10 12:50:04 +0100 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2011-08-10 14:06:15 +0100 |
commit | b13266ba0fcd275a5936f31f69405b7e25853ef6 (patch) | |
tree | 6c19d2814c1d8a092adfc2afc7a9bb3b406886e2 | |
parent | 40fa6c867cf371bad4a169abe9a4cea74c431680 (diff) |
script: Include an operator to replay a recording surface to a file
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
-rw-r--r-- | util/cairo-script/cairo-script-operators.c | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/util/cairo-script/cairo-script-operators.c b/util/cairo-script/cairo-script-operators.c index 9f9c547a5..5904f5a16 100644 --- a/util/cairo-script/cairo-script-operators.c +++ b/util/cairo-script/cairo-script-operators.c @@ -36,6 +36,10 @@ #include "cairo-script-private.h" +#if CAIRO_HAS_SCRIPT_SURFACE +#include "cairo-script.h" +#endif + #include <stdio.h> /* snprintf */ #include <stdlib.h> /* mkstemp */ #include <string.h> @@ -6203,6 +6207,43 @@ _write_to_png (csi_t *ctx) } static csi_status_t +_write_to_script (csi_t *ctx) +{ + csi_status_t status; + csi_string_t *filename; + cairo_surface_t *record; + + check (2); + + status = _csi_ostack_get_string (ctx, 0, &filename); + if (_csi_unlikely (status)) + return status; + status = _csi_ostack_get_surface (ctx, 1, &record); + if (_csi_unlikely (status)) + return status; + + if (cairo_surface_get_type (record) != CAIRO_SURFACE_TYPE_RECORDING) + return CAIRO_STATUS_SURFACE_TYPE_MISMATCH; + +#if CAIRO_HAS_SCRIPT_SURFACE + { + cairo_device_t *script; + + script = cairo_script_create (filename->string); + status = cairo_script_from_recording_surface (script, record); + cairo_device_destroy (script); + if (_csi_unlikely (status)) + return status; + } +#else + return CAIRO_STATUS_WRITE_ERROR; +#endif + + pop (1); + return CSI_STATUS_SUCCESS; +} + +static csi_status_t _xor (csi_t *ctx) { csi_object_t *a, *b; @@ -6501,6 +6542,7 @@ _defs[] = { { "user-to-device-distance", NULL }, { "where", NULL }, { "write-to-png", _write_to_png }, + { "write-to-script", _write_to_script }, { "xor", _xor }, { "=", _debug_print }, |