Improve Cairo bindings to hold a GC reference to Fonts used

This commit is contained in:
Joshua Granick
2015-09-22 14:38:41 -07:00
parent 1ef975cb93
commit b6881c39bc

View File

@@ -9,6 +9,9 @@
namespace lime {
cairo_user_data_key_t userData;
void gc_cairo (value handle) {
if (!val_is_null (handle)) {
@@ -69,6 +72,14 @@ namespace lime {
}
void gc_user_data (void* data) {
AutoGCRoot* reference = (AutoGCRoot*)data;
delete reference;
}
void lime_cairo_arc (value handle, double xc, double yc, double radius, double angle1, double angle2) {
cairo_arc ((cairo_t*)val_data (handle), xc, yc, radius, angle1, angle2);
@@ -231,8 +242,12 @@ namespace lime {
value lime_cairo_ft_font_face_create (value face, int flags) {
#ifdef LIME_FREETYPE
Font *font = (Font*)val_data (face);
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);
value handle = cffi::alloc_pointer (cairoFont);
val_gc (handle, gc_cairo_font_face);
return handle;