@@ -62,7 +62,9 @@ namespace lime {
|
|||||||
int RenderGlyphs (value indices, Bytes *bytes);
|
int RenderGlyphs (value indices, Bytes *bytes);
|
||||||
void SetSize (size_t size);
|
void SetSize (size_t size);
|
||||||
|
|
||||||
|
void* library;
|
||||||
void* face;
|
void* face;
|
||||||
|
void* faceMemory;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
|||||||
@@ -292,7 +292,10 @@ namespace lime {
|
|||||||
|
|
||||||
#ifdef LIME_FREETYPE
|
#ifdef LIME_FREETYPE
|
||||||
Font *font = (Font*)(intptr_t)fontHandle;
|
Font *font = (Font*)(intptr_t)fontHandle;
|
||||||
return alloc_wstring (font->GetFamilyName ());
|
wchar_t *name = font->GetFamilyName ();
|
||||||
|
value result = alloc_wstring (name);
|
||||||
|
delete name;
|
||||||
|
return result;
|
||||||
#else
|
#else
|
||||||
return 0;
|
return 0;
|
||||||
#endif
|
#endif
|
||||||
@@ -1377,4 +1380,4 @@ extern "C" int lime_register_prims () {
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -355,7 +355,9 @@ namespace lime {
|
|||||||
|
|
||||||
Font::Font (Resource *resource, int faceIndex) {
|
Font::Font (Resource *resource, int faceIndex) {
|
||||||
|
|
||||||
|
this->library = 0;
|
||||||
this->face = 0;
|
this->face = 0;
|
||||||
|
this->faceMemory = 0;
|
||||||
|
|
||||||
if (resource) {
|
if (resource) {
|
||||||
|
|
||||||
@@ -372,6 +374,7 @@ namespace lime {
|
|||||||
|
|
||||||
FT_Face face;
|
FT_Face face;
|
||||||
FILE_HANDLE *file = NULL;
|
FILE_HANDLE *file = NULL;
|
||||||
|
unsigned char *faceMemory = NULL;
|
||||||
|
|
||||||
if (resource->path) {
|
if (resource->path) {
|
||||||
|
|
||||||
@@ -379,6 +382,7 @@ namespace lime {
|
|||||||
|
|
||||||
if (!file) {
|
if (!file) {
|
||||||
|
|
||||||
|
FT_Done_FreeType (library);
|
||||||
return;
|
return;
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -390,19 +394,21 @@ namespace lime {
|
|||||||
} else {
|
} else {
|
||||||
|
|
||||||
Bytes data = Bytes (resource->path);
|
Bytes data = Bytes (resource->path);
|
||||||
unsigned char *buffer = (unsigned char*)malloc (data.Length ());
|
faceMemory = (unsigned char*)malloc (data.Length ());
|
||||||
memcpy (buffer, data.Data (), data.Length ());
|
memcpy (faceMemory, data.Data (), data.Length ());
|
||||||
|
|
||||||
lime::fclose (file);
|
lime::fclose (file);
|
||||||
file = 0;
|
file = 0;
|
||||||
error = FT_New_Memory_Face (library, buffer, data.Length (), faceIndex, &face);
|
|
||||||
|
error = FT_New_Memory_Face (library, faceMemory, data.Length (), faceIndex, &face);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
unsigned char *buffer = (unsigned char*)malloc (resource->data->Length ());
|
faceMemory = (unsigned char*)malloc (resource->data->Length ());
|
||||||
memcpy (buffer, resource->data->Data (), resource->data->Length ());
|
memcpy (faceMemory, resource->data->Data (), resource->data->Length ());
|
||||||
error = FT_New_Memory_Face (library, buffer, resource->data->Length (), faceIndex, &face);
|
error = FT_New_Memory_Face (library, faceMemory, resource->data->Length (), faceIndex, &face);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -415,7 +421,9 @@ namespace lime {
|
|||||||
|
|
||||||
if (!error) {
|
if (!error) {
|
||||||
|
|
||||||
|
this->library = library;
|
||||||
this->face = face;
|
this->face = face;
|
||||||
|
this->faceMemory = faceMemory;
|
||||||
|
|
||||||
/* Set charmap
|
/* Set charmap
|
||||||
*
|
*
|
||||||
@@ -439,6 +447,12 @@ namespace lime {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
FT_Done_FreeType (library);
|
||||||
|
|
||||||
|
free (faceMemory);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -449,12 +463,17 @@ namespace lime {
|
|||||||
|
|
||||||
|
|
||||||
Font::~Font () {
|
Font::~Font () {
|
||||||
|
|
||||||
if (face) {
|
if (library) {
|
||||||
|
|
||||||
//FT_Done_Face ((FT_Face)face);
|
FT_Done_FreeType ((FT_Library)library);
|
||||||
|
library = 0;
|
||||||
|
face = 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
free (faceMemory);
|
||||||
|
faceMemory = 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user