/** * gjs_cairo_surface_from_surface: * @context: the context * @surface: cairo_surface to attach to the object * * Constructs a surface wrapper given cairo surface. * A reference to @surface will be taken. * */ JSObject * gjs_cairo_surface_from_surface(JSContext *context, cairo_surface_t *surface) { JSObject *object; g_return_val_if_fail(context != NULL, NULL); g_return_val_if_fail(surface != NULL, NULL); switch (cairo_surface_get_type(surface)) { case CAIRO_SURFACE_TYPE_IMAGE: return gjs_cairo_image_surface_from_surface(context, surface); case CAIRO_SURFACE_TYPE_PDF: return gjs_cairo_pdf_surface_from_surface(context, surface); /* case CAIRO_SURFACE_TYPE_PS: return gjs_cairo_ps_surface_from_surface(context, surface); */ case CAIRO_SURFACE_TYPE_SVG: return gjs_cairo_svg_surface_from_surface(context, surface); default: break; } object = JS_NewObject(context, &gjs_cairo_surface_class, NULL, NULL); if (!object) { gjs_throw(context, "failed to create surface"); return NULL; } gjs_cairo_surface_construct(context, object, surface); return object; }
/** * gjs_cairo_surface_from_surface: * @context: the context * @surface: cairo_surface to attach to the object * * Constructs a surface wrapper given cairo surface. * A reference to @surface will be taken. * */ JSObject * gjs_cairo_surface_from_surface(JSContext *context, cairo_surface_t *surface) { g_return_val_if_fail(context != NULL, NULL); g_return_val_if_fail(surface != NULL, NULL); cairo_surface_type_t type = cairo_surface_get_type(surface); if (type == CAIRO_SURFACE_TYPE_IMAGE) return gjs_cairo_image_surface_from_surface(context, surface); if (type == CAIRO_SURFACE_TYPE_PDF) return gjs_cairo_pdf_surface_from_surface(context, surface); if (type == CAIRO_SURFACE_TYPE_PS) return gjs_cairo_ps_surface_from_surface(context, surface); if (type == CAIRO_SURFACE_TYPE_SVG) return gjs_cairo_svg_surface_from_surface(context, surface); JS::RootedObject proto(context, gjs_cairo_surface_get_proto(context)); JS::RootedObject object(context, JS_NewObjectWithGivenProto(context, &gjs_cairo_surface_class, proto)); if (!object) { gjs_throw(context, "failed to create surface"); return NULL; } gjs_cairo_surface_construct(context, object, surface); return object; }