From 36cfeaf99bbf6f9431cb55ab9f04a67a491299c1 Mon Sep 17 00:00:00 2001 From: Tor Andersson Date: Tue, 13 Feb 2018 14:37:42 +0100 Subject: Add JNI and JS bindings to layer device calls. --- source/tools/murun.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) (limited to 'source/tools') diff --git a/source/tools/murun.c b/source/tools/murun.c index 93e04b3e..4f535670 100644 --- a/source/tools/murun.c +++ b/source/tools/murun.c @@ -1146,6 +1146,35 @@ js_dev_end_tile(fz_context *ctx, fz_device *dev) js_endtry(J); } +static void +js_dev_begin_layer(fz_context *ctx, fz_device *dev, const char *name) +{ + js_State *J = ((js_device*)dev)->J; + if (js_try(J)) + rethrow_as_fz(J); + if (js_hasproperty(J, -1, "beginLayer")) { + js_copy(J, -2); + js_pushstring(J, name); + js_call(J, 1); + js_pop(J, 1); + } + js_endtry(J); +} + +static void +js_dev_end_layer(fz_context *ctx, fz_device *dev) +{ + js_State *J = ((js_device*)dev)->J; + if (js_try(J)) + rethrow_as_fz(J); + if (js_hasproperty(J, -1, "endLayer")) { + js_copy(J, -2); + js_call(J, 0); + js_pop(J, 1); + } + js_endtry(J); +} + static fz_device *new_js_device(fz_context *ctx, js_State *J) { js_device *dev = fz_new_derived_device(ctx, js_device); @@ -1176,6 +1205,9 @@ static fz_device *new_js_device(fz_context *ctx, js_State *J) dev->super.begin_tile = js_dev_begin_tile; dev->super.end_tile = js_dev_end_tile; + dev->super.begin_layer = js_dev_begin_layer; + dev->super.end_layer = js_dev_end_layer; + dev->J = J; return (fz_device*)dev; } @@ -1455,6 +1487,27 @@ static void ffi_Device_endTile(js_State *J) rethrow(J); } +static void ffi_Device_beginLayer(js_State *J) +{ + fz_context *ctx = js_getcontext(J); + fz_device *dev = js_touserdata(J, 0, "fz_device"); + const char *name = js_tostring(J, 1); + fz_try(ctx) + fz_begin_layer(ctx, dev, name); + fz_catch(ctx) + rethrow(J); +} + +static void ffi_Device_endLayer(js_State *J) +{ + fz_context *ctx = js_getcontext(J); + fz_device *dev = js_touserdata(J, 0, "fz_device"); + fz_try(ctx) + fz_end_layer(ctx, dev); + fz_catch(ctx) + rethrow(J); +} + /* mupdf module */ static void ffi_readFile(js_State *J) @@ -4469,6 +4522,9 @@ int murun_main(int argc, char **argv) jsB_propfun(J, "Device.endGroup", ffi_Device_endGroup, 0); jsB_propfun(J, "Device.beginTile", ffi_Device_beginTile, 6); jsB_propfun(J, "Device.endTile", ffi_Device_endTile, 0); + + jsB_propfun(J, "Device.beginLayer", ffi_Device_beginLayer, 1); + jsB_propfun(J, "Device.endLayer", ffi_Device_endLayer, 0); } js_setregistry(J, "fz_device"); -- cgit v1.2.3