static JSBool showText_func(JSContext *context, unsigned argc, jsval *vp) { JS::CallArgs argv = JS::CallArgsFromVp (argc, vp); JSObject *obj = JSVAL_TO_OBJECT(argv.thisv()); char *utf8; cairo_t *cr; if (!gjs_parse_call_args(context, "showText", "s", argv, "utf8", &utf8)) return JS_FALSE; cr = gjs_cairo_context_get_context(context, obj); cairo_show_text(cr, utf8); g_free(utf8); if (!gjs_cairo_check_status(context, cairo_status(cr), "context")) return JS_FALSE; argv.rval().set(JSVAL_VOID); return JS_TRUE; }
static JSBool getSource_func(JSContext *context, unsigned argc, jsval *vp) { JS::CallReceiver rec = JS::CallReceiverFromVp(vp); JSObject *obj = JSVAL_TO_OBJECT(rec.thisv()); cairo_t *cr; cairo_pattern_t *pattern; JSObject *pattern_wrapper; if (argc > 0) { gjs_throw(context, "Context.getSource() takes no arguments"); return JS_FALSE; } cr = gjs_cairo_context_get_context(context, obj); pattern = cairo_get_source(cr); if (!gjs_cairo_check_status(context, cairo_status(cr), "context")) return JS_FALSE; /* pattern belongs to the context, so keep the reference */ pattern_wrapper = gjs_cairo_pattern_from_pattern(context, pattern); if (!pattern_wrapper) { gjs_throw(context, "failed to create pattern"); return JS_FALSE; } rec.rval().set(OBJECT_TO_JSVAL(pattern_wrapper)); return JS_TRUE; }
static JSBool setSource_func(JSContext *context, unsigned argc, jsval *vp) { JS::CallArgs argv = JS::CallArgsFromVp (argc, vp); JSObject *obj = JSVAL_TO_OBJECT(argv.thisv()); JSObject *pattern_wrapper; cairo_pattern_t *pattern; cairo_t *cr; if (!gjs_parse_call_args(context, "setSource", "o", argv, "pattern", &pattern_wrapper)) return JS_FALSE; pattern = gjs_cairo_pattern_get_pattern(context, pattern_wrapper); if (!pattern) { gjs_throw(context, "first argument to setSource() should be a pattern"); return JS_FALSE; } cr = gjs_cairo_context_get_context(context, obj); cairo_set_source(cr, pattern); if (!gjs_cairo_check_status(context, cairo_status(cr), "context")) return JS_FALSE; argv.rval().set(JSVAL_VOID); return JS_TRUE; }
static JSBool appendPath_func(JSContext *context, uintN argc, jsval *vp) { jsval *argv = JS_ARGV(context, vp); JSObject *obj = JS_THIS_OBJECT(context, vp); JSObject *path_wrapper; cairo_path_t *path; cairo_t *cr; if (!gjs_parse_args(context, "path", "o", argc, argv, "path", &path_wrapper)) return JS_FALSE; path = gjs_cairo_path_get_path(context, path_wrapper); if (!path) { gjs_throw(context, "first argument to appendPath() should be a path"); return JS_FALSE; } cr = gjs_cairo_context_get_context(context, obj); cairo_append_path(cr, path); JS_SET_RVAL(context, vp, JSVAL_VOID); return JS_TRUE; }
static JSBool maskSurface_func(JSContext *context, unsigned argc, jsval *vp) { JS::CallArgs argv = JS::CallArgsFromVp (argc, vp); JSObject *obj = JSVAL_TO_OBJECT(argv.thisv()); JSObject *surface_wrapper; double x, y; cairo_surface_t *surface; cairo_t *cr; if (!gjs_parse_call_args(context, "maskSurface", "off", argv, "surface", &surface_wrapper, "x", &x, "y", &y)) return JS_FALSE; surface = gjs_cairo_surface_get_surface(context, surface_wrapper); if (!surface) { gjs_throw(context, "first argument to maskSurface() should be a surface"); return JS_FALSE; } cr = gjs_cairo_context_get_context(context, obj); cairo_mask_surface(cr, surface, x, y); if (!gjs_cairo_check_status(context, cairo_status(cr), "context")) return JS_FALSE; argv.rval().set(JSVAL_VOID); return JS_TRUE; }
static JSBool appendPath_func(JSContext *context, unsigned argc, jsval *vp) { JS::CallArgs argv = JS::CallArgsFromVp (argc, vp); JSObject *obj = JSVAL_TO_OBJECT(argv.thisv()); JSObject *path_wrapper; cairo_path_t *path; cairo_t *cr; if (!gjs_parse_call_args(context, "path", "o", argv, "path", &path_wrapper)) return JS_FALSE; path = gjs_cairo_path_get_path(context, path_wrapper); if (!path) { gjs_throw(context, "first argument to appendPath() should be a path"); return JS_FALSE; } cr = gjs_cairo_context_get_context(context, obj); cairo_append_path(cr, path); argv.rval().set(JSVAL_VOID); return JS_TRUE; }
static JSBool getSource_func(JSContext *context, uintN argc, jsval *vp) { JSObject *obj = JS_THIS_OBJECT(context, vp); cairo_t *cr; cairo_pattern_t *pattern; JSObject *pattern_wrapper; if (argc > 0) { gjs_throw(context, "Context.getSource() takes no arguments"); return JS_FALSE; } cr = gjs_cairo_context_get_context(context, obj); pattern = cairo_get_source(cr); if (!gjs_cairo_check_status(context, cairo_status(cr), "context")) return JS_FALSE; /* pattern belongs to the context, so keep the reference */ pattern_wrapper = gjs_cairo_pattern_from_pattern(context, pattern); if (!pattern_wrapper) { gjs_throw(context, "failed to create pattern"); return JS_FALSE; } JS_SET_RVAL(context, vp, OBJECT_TO_JSVAL(pattern_wrapper)); return JS_TRUE; }
static JSBool getGroupTarget_func(JSContext *context, uintN argc, jsval *vp) { JSObject *obj = JS_THIS_OBJECT(context, vp); cairo_t *cr; cairo_surface_t *surface; JSObject *surface_wrapper; if (argc > 0) { gjs_throw(context, "Context.getGroupTarget() takes no arguments"); return JS_FALSE; } cr = gjs_cairo_context_get_context(context, obj); surface = cairo_get_group_target(cr); if (!gjs_cairo_check_status(context, cairo_status(cr), "context")) return JS_FALSE; /* surface belongs to the context, so keep the reference */ surface_wrapper = gjs_cairo_surface_from_surface(context, surface); if (!surface_wrapper) { /* exception already set */ return JS_FALSE; } JS_SET_RVAL(context, vp, OBJECT_TO_JSVAL(surface_wrapper)); return JS_TRUE; }
static JSBool showText_func(JSContext *context, uintN argc, jsval *vp) { jsval *argv = JS_ARGV(context, vp); JSObject *obj = JS_THIS_OBJECT(context, vp); char *utf8; cairo_t *cr; if (!gjs_parse_args(context, "showText", "s", argc, argv, "utf8", &utf8)) return JS_FALSE; cr = gjs_cairo_context_get_context(context, obj); cairo_show_text(cr, utf8); g_free(utf8); if (!gjs_cairo_check_status(context, cairo_status(cr), "context")) return JS_FALSE; JS_SET_RVAL(context, vp, JSVAL_VOID); return JS_TRUE; }
static JSBool selectFontFace_func(JSContext *context, uintN argc, jsval *vp) { jsval *argv = JS_ARGV(context, vp); JSObject *obj = JS_THIS_OBJECT(context, vp); char *family; cairo_font_slant_t slant; cairo_font_weight_t weight; cairo_t *cr; if (!gjs_parse_args(context, "selectFontFace", "sii", argc, argv, "family", &family, "slang", &slant, "weight", &weight)) return JS_FALSE; cr = gjs_cairo_context_get_context(context, obj); cairo_select_font_face(cr, family, slant, weight); g_free(family); if (!gjs_cairo_check_status(context, cairo_status(cr), "context")) return JS_FALSE; JS_SET_RVAL(context, vp, JSVAL_VOID); return JS_TRUE; }
static JSBool setSourceSurface_func(JSContext *context, uintN argc, jsval *vp) { jsval *argv = JS_ARGV(context, vp); JSObject *obj = JS_THIS_OBJECT(context, vp); JSObject *surface_wrapper; double x, y; cairo_surface_t *surface; cairo_t *cr; if (!gjs_parse_args(context, "setSourceSurface", "off", argc, argv, "surface", &surface_wrapper, "x", &x, "y", &y)) return JS_FALSE; surface = gjs_cairo_surface_get_surface(context, surface_wrapper); if (!surface) { gjs_throw(context, "first argument to setSourceSurface() should be a surface"); return JS_FALSE; } cr = gjs_cairo_context_get_context(context, obj); cairo_set_source_surface(cr, surface, x, y); if (!gjs_cairo_check_status(context, cairo_status(cr), "context")) return JS_FALSE; JS_SET_RVAL(context, vp, JSVAL_VOID); return JS_TRUE; }
static JSBool setSource_func(JSContext *context, uintN argc, jsval *vp) { jsval *argv = JS_ARGV(context, vp); JSObject *obj = JS_THIS_OBJECT(context, vp); JSObject *pattern_wrapper; cairo_pattern_t *pattern; cairo_t *cr; if (!gjs_parse_args(context, "setSource", "o", argc, argv, "pattern", &pattern_wrapper)) return JS_FALSE; pattern = gjs_cairo_pattern_get_pattern(context, pattern_wrapper); if (!pattern) { gjs_throw(context, "first argument to setSource() should be a pattern"); return JS_FALSE; } cr = gjs_cairo_context_get_context(context, obj); cairo_set_source(cr, pattern); if (!gjs_cairo_check_status(context, cairo_status(cr), "context")) return JS_FALSE; JS_SET_RVAL(context, vp, JSVAL_VOID); return JS_TRUE; }
static JSBool selectFontFace_func(JSContext *context, unsigned argc, jsval *vp) { JS::CallArgs argv = JS::CallArgsFromVp (argc, vp); JSObject *obj = JSVAL_TO_OBJECT(argv.thisv()); char *family; cairo_font_slant_t slant; cairo_font_weight_t weight; cairo_t *cr; if (!gjs_parse_call_args(context, "selectFontFace", "sii", argv, "family", &family, "slang", &slant, "weight", &weight)) return JS_FALSE; cr = gjs_cairo_context_get_context(context, obj); cairo_select_font_face(cr, family, slant, weight); g_free(family); if (!gjs_cairo_check_status(context, cairo_status(cr), "context")) return JS_FALSE; argv.rval().set(JSVAL_VOID); return JS_TRUE; }
static JSBool getGroupTarget_func(JSContext *context, unsigned argc, jsval *vp) { JS::CallReceiver rec = JS::CallReceiverFromVp(vp); JSObject *obj = JSVAL_TO_OBJECT(rec.thisv()); cairo_t *cr; cairo_surface_t *surface; JSObject *surface_wrapper; if (argc > 0) { gjs_throw(context, "Context.getGroupTarget() takes no arguments"); return JS_FALSE; } cr = gjs_cairo_context_get_context(context, obj); surface = cairo_get_group_target(cr); if (!gjs_cairo_check_status(context, cairo_status(cr), "context")) return JS_FALSE; /* surface belongs to the context, so keep the reference */ surface_wrapper = gjs_cairo_surface_from_surface(context, surface); if (!surface_wrapper) { /* exception already set */ return JS_FALSE; } rec.rval().set(OBJECT_TO_JSVAL(surface_wrapper)); return JS_TRUE; }
static JSBool copyPathFlat_func(JSContext *context, uintN argc, jsval *vp) { jsval *argv = JS_ARGV(context, vp); JSObject *obj = JS_THIS_OBJECT(context, vp); cairo_path_t *path; cairo_t *cr; if (!gjs_parse_args(context, "", "", argc, argv)) return JS_FALSE; cr = gjs_cairo_context_get_context(context, obj); path = cairo_copy_path_flat(cr); JS_SET_RVAL(context, vp, OBJECT_TO_JSVAL(gjs_cairo_path_from_path(context, path))); return JS_TRUE; }
static JSBool copyPathFlat_func(JSContext *context, unsigned argc, jsval *vp) { JS::CallArgs argv = JS::CallArgsFromVp (argc, vp); JSObject *obj = JSVAL_TO_OBJECT(argv.thisv()); cairo_path_t *path; cairo_t *cr; if (!gjs_parse_call_args(context, "", "", argv)) return JS_FALSE; cr = gjs_cairo_context_get_context(context, obj); path = cairo_copy_path_flat(cr); argv.rval().set(OBJECT_TO_JSVAL(gjs_cairo_path_from_path(context, path))); return JS_TRUE; }
static bool context_to_g_argument(JSContext *context, JS::Value value, const char *arg_name, GjsArgumentType argument_type, GITransfer transfer, bool may_be_null, GArgument *arg) { JS::RootedObject obj(context, value.toObjectOrNull()); cairo_t *cr; cr = gjs_cairo_context_get_context(context, obj); if (!cr) return false; if (transfer == GI_TRANSFER_EVERYTHING) cairo_reference(cr); arg->v_pointer = cr; return true; }
static JSBool context_to_g_argument(JSContext *context, jsval value, const char *arg_name, GjsArgumentType argument_type, GITransfer transfer, gboolean may_be_null, GArgument *arg) { JSObject *obj; cairo_t *cr; obj = JSVAL_TO_OBJECT(value); cr = gjs_cairo_context_get_context(context, obj); if (!cr) return JS_FALSE; if (transfer == GI_TRANSFER_EVERYTHING) cairo_reference(cr); arg->v_pointer = cr; return JS_TRUE; }
static JSBool setDash_func(JSContext *context, unsigned argc, jsval *vp) { JS::CallArgs argv = JS::CallArgsFromVp (argc, vp); JSObject *obj = JSVAL_TO_OBJECT(argv.thisv()); guint i; cairo_t *cr; JSObject *dashes; double offset; JSBool retval = JS_FALSE; guint len; GArray *dashes_c = NULL; if (!gjs_parse_call_args(context, "setDash", "of", argv, "dashes", &dashes, "offset", &offset)) return JS_FALSE; JS_AddObjectRoot(context, &dashes); if (!JS_IsArrayObject(context, dashes)) { gjs_throw(context, "dashes must be an array"); goto out; } if (!JS_GetArrayLength(context, dashes, &len)) { gjs_throw(context, "Can't get length of dashes"); goto out; } dashes_c = g_array_sized_new (FALSE, FALSE, sizeof(double), len); for (i = 0; i < len; ++i) { jsval elem; double b; elem = JSVAL_VOID; if (!JS_GetElement(context, dashes, i, &elem)) { goto out; } if (JSVAL_IS_VOID(elem)) continue; if (!JS_ValueToNumber(context, elem, &b)) goto out; if (b <= 0) { gjs_throw(context, "Dash value must be positive"); goto out; } g_array_append_val(dashes_c, b); } cr = gjs_cairo_context_get_context(context, obj); cairo_set_dash(cr, (double*)dashes_c->data, dashes_c->len, offset); argv.rval().set(JSVAL_VOID); retval = JS_TRUE; out: if (dashes_c != NULL) g_array_free (dashes_c, TRUE); JS_RemoveObjectRoot(context, &dashes); return retval; }