diff --git a/ext/import-font.cpp b/ext/import-font.cpp index 966bc00..379a16e 100644 --- a/ext/import-font.cpp +++ b/ext/import-font.cpp @@ -20,6 +20,7 @@ class FreetypeHandle { friend FreetypeHandle * initializeFreetype(); friend void deinitializeFreetype(FreetypeHandle *library); friend FontHandle * loadFont(FreetypeHandle *library, const char *filename); + friend FontHandle * loadFontData(FreetypeHandle *library, const byte *data, int length); FT_Library library; @@ -28,6 +29,7 @@ class FreetypeHandle { class FontHandle { friend FontHandle * adoptFreetypeFont(FT_Face ftFace); friend FontHandle * loadFont(FreetypeHandle *library, const char *filename); + friend FontHandle * loadFontData(FreetypeHandle *library, const byte *data, int length); friend void destroyFont(FontHandle *font); friend bool getFontMetrics(FontMetrics &metrics, FontHandle *font); friend bool getFontWhitespaceWidth(double &spaceAdvance, double &tabAdvance, FontHandle *font); @@ -129,6 +131,19 @@ FontHandle * loadFont(FreetypeHandle *library, const char *filename) { return handle; } +FontHandle * loadFontData(FreetypeHandle *library, const byte *data, int length) { + if (!library) + return NULL; + FontHandle *handle = new FontHandle; + FT_Error error = FT_New_Memory_Face(library->library, data, length, 0, &handle->face); + if (error) { + delete handle; + return NULL; + } + handle->ownership = true; + return handle; +} + void destroyFont(FontHandle *font) { if (font->ownership) FT_Done_Face(font->face); diff --git a/ext/import-font.h b/ext/import-font.h index e27df99..de8a9a3 100644 --- a/ext/import-font.h +++ b/ext/import-font.h @@ -6,6 +6,7 @@ namespace msdfgen { +typedef unsigned char byte; typedef unsigned unicode_t; class FreetypeHandle; @@ -46,6 +47,8 @@ FontHandle * adoptFreetypeFont(FT_Face ftFace); #endif /// Loads a font file and returns its handle. FontHandle * loadFont(FreetypeHandle *library, const char *filename); +/// Loads a font from binary data and returns its handle. +FontHandle * loadFontData(FreetypeHandle *library, const byte *data, int length); /// Unloads a font file. void destroyFont(FontHandle *font); /// Outputs the metrics of a font file.