IoCairoSurface *IoCairoSurface_newWithRawSurface_(void *state, IoMessage *m, cairo_surface_t *surface) { IoObject *self = 0; IoStateProtoFunc *initFunc = 0; checkStatus_(state, m, cairo_surface_status(surface)); switch(cairo_surface_get_type(surface)) { case CAIRO_SURFACE_TYPE_IMAGE: initFunc = IoCairoImageSurface_proto; break; case CAIRO_SURFACE_TYPE_PS: initFunc = IoCairoPSSurface_proto; break; case CAIRO_SURFACE_TYPE_PDF: initFunc = IoCairoPDFSurface_proto; break; case CAIRO_SURFACE_TYPE_SVG: initFunc = IoCairoSVGSurface_proto; break; default: IoState_error_(state, 0, "Unsupported surface type"); } self = IOCLONE(IoState_protoWithId_(state, protoId)); IoObject_setDataPointer_(self, surface); return self; }
IoCairoContext *IoCairoContext_newWithSurface_(void *state, IoCairoImageSurface *surface) { IoCairoContext *self = IOCLONE(IoState_protoWithInitFunction_(state, IoCairoContext_proto)); cairo_t *rawContext = cairo_create(IoCairoSurface_rawSurface(surface)); checkStatus_(state, 0, cairo_status(rawContext)); IoObject_setDataPointer_(self, rawContext); return self; }