static JSBool gjs_cairo_surface_pattern_constructor(JSContext *context, JSObject *obj, uintN argc, jsval *argv, jsval *retval) { JSObject *surface_wrapper; cairo_surface_t *surface; cairo_pattern_t *pattern; if (!gjs_check_constructing(context)) return JS_FALSE; if (!gjs_parse_args(context, "SurfacePattern", "o", argc, argv, "surface", &surface_wrapper)) return JS_FALSE; surface = gjs_cairo_surface_get_surface(context, surface_wrapper); if (!surface) { gjs_throw(context, "first argument to SurfacePattern() should be a surface"); return JS_FALSE; } pattern = cairo_pattern_create_for_surface(surface); if (!gjs_cairo_check_status(context, cairo_pattern_status(pattern), "pattern")) return JS_FALSE; gjs_cairo_pattern_construct(context, obj, pattern); cairo_pattern_destroy(pattern); return JS_TRUE; }
JSObject * gjs_cairo_surface_pattern_from_pattern(JSContext *context, cairo_pattern_t *pattern) { JSObject *object; g_return_val_if_fail(context != NULL, NULL); g_return_val_if_fail(pattern != NULL, NULL); g_return_val_if_fail(cairo_pattern_get_type(pattern) == CAIRO_PATTERN_TYPE_SURFACE, NULL); object = JS_NewObject(context, &gjs_cairo_surface_pattern_class, NULL, NULL); if (!object) { gjs_throw(context, "failed to create surface pattern"); return NULL; } gjs_cairo_pattern_construct(context, object, pattern); return object; }