Pārlūkot izejas kodu

Added API to load a font from bytes

Chlumsky 4 gadi atpakaļ
vecāks
revīzija
cf78977b47
2 mainītis faili ar 18 papildinājumiem un 0 dzēšanām
  1. 15 0
      ext/import-font.cpp
  2. 3 0
      ext/import-font.h

+ 15 - 0
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);

+ 3 - 0
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.