summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2011-08-10 12:50:04 +0100
committerChris Wilson <chris@chris-wilson.co.uk>2011-08-10 14:06:15 +0100
commitb13266ba0fcd275a5936f31f69405b7e25853ef6 (patch)
tree6c19d2814c1d8a092adfc2afc7a9bb3b406886e2
parent40fa6c867cf371bad4a169abe9a4cea74c431680 (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.c42
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 },