value lime_cairo_get_font_face (value handle) { cairo_font_face_t* face = cairo_get_font_face ((cairo_t*)val_data (handle)); cairo_font_face_reference (face); return CFFIPointer (face, gc_cairo_font_face); }
value lime_alc_open_device (HxString devicename) { ALCdevice* alcDevice = alcOpenDevice (devicename.__s); atexit (lime_al_cleanup); return CFFIPointer (alcDevice); }
value lime_alc_create_context (value device, value attrlist) { ALCdevice* alcDevice = (ALCdevice*)val_data (device); ALCint* list = NULL; if (val_is_null (attrlist) == false) { int size = val_array_size (attrlist); list = new ALCint[size]; for (int i = 0; i < size; ++i) { list[i] = (ALCint)val_int( val_array_i (attrlist, i) ); } } ALCcontext* alcContext = alcCreateContext (alcDevice, list); if (list != NULL) { delete[] list; } return CFFIPointer (alcContext); }
value lime_alc_get_contexts_device (value context) { ALCcontext* alcContext = (ALCcontext*)val_data (context); ALCdevice* alcDevice = alcGetContextsDevice (alcContext); return CFFIPointer (alcDevice); }
value lime_application_create (value callback) { Application* application = CreateApplication (); Application::callback = new AutoGCRoot (callback); return CFFIPointer (application, gc_application); }
value lime_cairo_get_font_options (value handle) { cairo_font_options_t* options = 0; cairo_get_font_options ((cairo_t*)val_data (handle), options); return CFFIPointer (options, gc_cairo_font_options); }
value lime_cairo_get_target (value handle) { cairo_surface_t* surface = cairo_get_target ((cairo_t*)val_data (handle)); cairo_surface_reference (surface); return CFFIPointer (surface, gc_cairo_surface); }
value lime_cairo_pop_group (value handle) { cairo_pattern_t* pattern = cairo_pop_group ((cairo_t*)val_data (handle)); cairo_pattern_reference (pattern); return CFFIPointer (pattern, gc_cairo_pattern); }
value lime_text_layout_create (int direction, HxString script, HxString language) { #if defined(LIME_FREETYPE) && defined(LIME_HARFBUZZ) TextLayout *text = new TextLayout (direction, script.__s, language.__s); return CFFIPointer (text, gc_text_layout); #else return alloc_null (); #endif }
value lime_cairo_ft_font_face_create (value face, int flags) { #ifdef LIME_FREETYPE Font* font = (Font*)val_data (face); cairo_font_face_t* cairoFont = cairo_ft_font_face_create_for_ft_face ((FT_Face)font->face, flags); AutoGCRoot* fontReference = new AutoGCRoot (face); cairo_font_face_set_user_data (cairoFont, &userData, fontReference, gc_user_data); return CFFIPointer (cairoFont, gc_cairo_font_face); #else return 0; #endif }
value lime_cairo_image_surface_create_for_data (value inData, int format, int width, int height, int stride) { Bytes *data = new Bytes (inData); cairo_surface_t *surface = cairo_image_surface_create_for_data (data->Data (), (cairo_format_t)format, width, height, stride); if (!surface) { delete data; return alloc_null (); } data->Pin (); cairo_surface_set_user_data (surface, &userData, data, gc_bytes); return CFFIPointer (surface, gc_cairo_surface); }
value lime_font_load (value data) { #ifdef LIME_FREETYPE Resource resource; Bytes bytes; if (val_is_string (data)) { resource = Resource (val_string (data)); } else { bytes.Set (data); resource = Resource (&bytes); } Font *font = new Font (&resource, 0); if (font) { if (font->face) { return CFFIPointer (font, gc_font); } else { delete font; } } #endif return alloc_null (); }
value lime_cairo_pattern_create_for_surface (value surface) { cairo_pattern_t* pattern = cairo_pattern_create_for_surface ((cairo_surface_t*)val_data (surface)); return CFFIPointer (pattern, gc_cairo_pattern); }
value lime_cairo_image_surface_create_for_data (double data, int format, int width, int height, int stride) { cairo_surface_t* surface = cairo_image_surface_create_for_data ((unsigned char*)(intptr_t)data, (cairo_format_t)format, width, height, stride); return CFFIPointer (surface, gc_cairo_surface); }
value lime_cairo_image_surface_create (int format, int width, int height) { cairo_surface_t* surface = cairo_image_surface_create ((cairo_format_t)format, width, height); return CFFIPointer (surface, gc_cairo_surface); }
value lime_window_create (value application, int width, int height, int flags, HxString title) { Window* window = CreateWindow ((Application*)val_data (application), width, height, flags, title.__s); return CFFIPointer (window, gc_window); }
value lime_alc_get_current_context () { ALCcontext* alcContext = alcGetCurrentContext (); return CFFIPointer (alcContext); }
value lime_cairo_pattern_create_linear (double x0, double y0, double x1, double y1) { cairo_pattern_t* pattern = cairo_pattern_create_linear (x0, y0, x1, y1); return CFFIPointer (pattern, gc_cairo_pattern); }
value lime_cairo_pattern_create_rgba (double r, double g, double b, double a) { cairo_pattern_t* pattern = cairo_pattern_create_rgba (r, g, b, a); return CFFIPointer (pattern, gc_cairo_pattern); }
value lime_cairo_pattern_create_radial (double cx0, double cy0, double radius0, double cx1, double cy1, double radius1) { cairo_pattern_t* pattern = cairo_pattern_create_radial (cx0, cy0, radius0, cx1, cy1, radius1); return CFFIPointer (pattern, gc_cairo_pattern); }
value lime_cairo_create (value surface) { cairo_t* cairo = cairo_create ((cairo_surface_t*)val_data (surface)); return CFFIPointer (cairo, gc_cairo); }
value lime_cairo_font_options_create () { return CFFIPointer (cairo_font_options_create (), gc_cairo_font_options); }
value lime_renderer_create (value window) { Renderer* renderer = CreateRenderer ((Window*)val_data (window)); return CFFIPointer (renderer, gc_renderer); }