Improve Cairo bindings to hold a GC reference to Fonts used
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user