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 from_gbytes_func(JSContext *context, unsigned argc, jsval *vp) { JS::CallArgs argv = JS::CallArgsFromVp (argc, vp); JSObject *bytes_obj; GBytes *gbytes; ByteArrayInstance *priv; JSObject *obj; JSBool ret = JS_FALSE; if (!gjs_parse_call_args(context, "overrides_gbytes_to_array", "o", argv, "bytes", &bytes_obj)) return JS_FALSE; if (!gjs_typecheck_boxed(context, bytes_obj, NULL, G_TYPE_BYTES, TRUE)) return JS_FALSE; gbytes = (GBytes*) gjs_c_struct_from_boxed(context, bytes_obj); obj = byte_array_new(context); if (obj == NULL) return JS_FALSE; priv = priv_from_js(context, obj); g_assert (priv != NULL); priv->bytes = g_bytes_ref(gbytes); ret = JS_TRUE; argv.rval().set(OBJECT_TO_JSVAL(obj)); return ret; }
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 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 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 bool selectFontFace_func(JSContext *context, unsigned argc, JS::Value *vp) { GJS_GET_PRIV(context, argc, vp, argv, obj, GjsCairoContext, priv); char *family; cairo_font_slant_t slant; cairo_font_weight_t weight; cairo_t *cr = priv ? priv->cr : NULL; if (!gjs_parse_call_args(context, "selectFontFace", argv, "sii", "family", &family, "slang", &slant, "weight", &weight)) return false; cairo_select_font_face(cr, family, slant, weight); g_free(family); if (!gjs_cairo_check_status(context, cairo_status(cr), "context")) return false; argv.rval().setUndefined(); return true; }
static bool setSourceSurface_func(JSContext *context, unsigned argc, JS::Value *vp) { GJS_GET_PRIV(context, argc, vp, argv, obj, GjsCairoContext, priv); JS::RootedObject surface_wrapper(context); double x, y; cairo_surface_t *surface; cairo_t *cr = priv ? priv->cr : NULL; if (!gjs_parse_call_args(context, "setSourceSurface", argv, "off", "surface", &surface_wrapper, "x", &x, "y", &y)) return false; surface = gjs_cairo_surface_get_surface(context, surface_wrapper); if (!surface) { gjs_throw(context, "first argument to setSourceSurface() should be a surface"); return false; } cairo_set_source_surface(cr, surface, x, y); if (!gjs_cairo_check_status(context, cairo_status(cr), "context")) return false; argv.rval().setUndefined(); return true; }
static bool setSource_func(JSContext *context, unsigned argc, JS::Value *vp) { GJS_GET_PRIV(context, argc, vp, argv, obj, GjsCairoContext, priv); JS::RootedObject pattern_wrapper(context); cairo_pattern_t *pattern; cairo_t *cr = priv ? priv->cr : NULL; if (!gjs_parse_call_args(context, "setSource", argv, "o", "pattern", &pattern_wrapper)) return false; pattern = gjs_cairo_pattern_get_pattern(context, pattern_wrapper); if (!pattern) { gjs_throw(context, "first argument to setSource() should be a pattern"); return false; } cairo_set_source(cr, pattern); if (!gjs_cairo_check_status(context, cairo_status(cr), "context")) return false; argv.rval().setUndefined(); return true; }
static bool setDash_func(JSContext *context, unsigned argc, JS::Value *vp) { GJS_GET_PRIV(context, argc, vp, argv, obj, GjsCairoContext, priv); guint i; cairo_t *cr = priv ? priv->cr : NULL; JS::RootedObject dashes(context); double offset; guint len; if (!gjs_parse_call_args(context, "setDash", argv, "of", "dashes", &dashes, "offset", &offset)) return false; if (!JS_IsArrayObject(context, dashes)) { gjs_throw(context, "dashes must be an array"); return false; } if (!JS_GetArrayLength(context, dashes, &len)) { gjs_throw(context, "Can't get length of dashes"); return false; } std::vector<double> dashes_c; dashes_c.reserve(len); JS::RootedValue elem(context); for (i = 0; i < len; ++i) { double b; elem.setUndefined(); if (!JS_GetElement(context, dashes, i, &elem)) { return false; } if (elem.isUndefined()) continue; if (!JS::ToNumber(context, elem, &b)) return false; if (b <= 0) { gjs_throw(context, "Dash value must be positive"); return false; } dashes_c.push_back(b); } cairo_set_dash(cr, &dashes_c[0], dashes_c.size(), offset); argv.rval().setUndefined(); return true; }
static bool copyPathFlat_func(JSContext *context, unsigned argc, JS::Value *vp) { GJS_GET_PRIV(context, argc, vp, argv, obj, GjsCairoContext, priv); cairo_path_t *path; cairo_t *cr = priv ? priv->cr : NULL; if (!gjs_parse_call_args(context, "", argv, "")) return false; path = cairo_copy_path_flat(cr); argv.rval().setObjectOrNull(gjs_cairo_path_from_path(context, path)); return true; }
static JSBool num_rectangles_func(JSContext *context, unsigned argc, jsval *vp) { PRELUDE; int n_rects; jsval retval; if (!gjs_parse_call_args(context, "num_rectangles", "", argv)) return JS_FALSE; n_rects = cairo_region_num_rectangles(this_region); retval = INT_TO_JSVAL(n_rects); argv.rval().set(retval); RETURN_STATUS; }
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 JSBool get_rectangle_func(JSContext *context, unsigned argc, jsval *vp) { PRELUDE; int i; JSObject *rect_obj; cairo_rectangle_int_t rect; jsval retval; if (!gjs_parse_call_args(context, "get_rectangle", "i", argv, "rect", &i)) return JS_FALSE; cairo_region_get_rectangle(this_region, i, &rect); rect_obj = make_rectangle(context, &rect); retval = OBJECT_TO_JSVAL(rect_obj); argv.rval().set(retval); RETURN_STATUS; }
static bool showText_func(JSContext *context, unsigned argc, JS::Value *vp) { GJS_GET_PRIV(context, argc, vp, argv, obj, GjsCairoContext, priv); char *utf8; cairo_t *cr = priv ? priv->cr : NULL; if (!gjs_parse_call_args(context, "showText", argv, "s", "utf8", &utf8)) return false; cairo_show_text(cr, utf8); g_free(utf8); if (!gjs_cairo_check_status(context, cairo_status(cr), "context")) return false; argv.rval().setUndefined(); return true; }
/* Methods */ static bool writeToPNG_func(JSContext *context, unsigned argc, JS::Value *vp) { GJS_GET_THIS(context, argc, vp, argv, obj); GjsAutoChar filename; cairo_surface_t *surface; if (!gjs_parse_call_args(context, "writeToPNG", argv, "F", "filename", &filename)) return false; surface = gjs_cairo_surface_get_surface(context, obj); if (!surface) return false; cairo_surface_write_to_png(surface, filename); if (!gjs_cairo_check_status(context, cairo_surface_status(surface), "surface")) return false; argv.rval().setUndefined(); return true; }
static bool appendPath_func(JSContext *context, unsigned argc, JS::Value *vp) { GJS_GET_PRIV(context, argc, vp, argv, obj, GjsCairoContext, priv); JS::RootedObject path_wrapper(context); cairo_path_t *path; cairo_t *cr = priv ? priv->cr : NULL; if (!gjs_parse_call_args(context, "path", argv, "o", "path", &path_wrapper)) return false; path = gjs_cairo_path_get_path(context, path_wrapper); if (!path) { gjs_throw(context, "first argument to appendPath() should be a path"); return false; } cairo_append_path(cr, path); argv.rval().setUndefined(); return 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; }