diff --git a/src/modules/font/Font.cpp b/src/modules/font/Font.cpp index 89ffdb084..159abe983 100644 --- a/src/modules/font/Font.cpp +++ b/src/modules/font/Font.cpp @@ -33,13 +33,20 @@ namespace font // Default TrueType font. #include "Vera.ttf.h" +class DefaultFontData : public love::Data +{ +public: + + virtual void *getData() const { return Vera_ttf; } + virtual size_t getSize() const { return sizeof(Vera_ttf); } + +}; + Rasterizer *Font::newTrueTypeRasterizer(int size) { - StrongRef data(new filesystem::FileData(sizeof(Vera_ttf), "Vera.ttf")); + StrongRef data(new DefaultFontData); data->release(); - memcpy(data->getData(), Vera_ttf, sizeof(Vera_ttf)); - return newTrueTypeRasterizer(data.get(), size); } diff --git a/src/modules/font/Font.h b/src/modules/font/Font.h index b846a1603..cfbd135c2 100644 --- a/src/modules/font/Font.h +++ b/src/modules/font/Font.h @@ -47,7 +47,7 @@ public: virtual Rasterizer *newRasterizer(love::filesystem::FileData *data) = 0; virtual Rasterizer *newTrueTypeRasterizer(int size); - virtual Rasterizer *newTrueTypeRasterizer(love::filesystem::FileData *data, int size) = 0; + virtual Rasterizer *newTrueTypeRasterizer(love::Data *data, int size) = 0; virtual Rasterizer *newBMFontRasterizer(love::filesystem::FileData *fontdef, const std::vector &images); diff --git a/src/modules/font/freetype/Font.cpp b/src/modules/font/freetype/Font.cpp index 3972ef39e..0498e3e51 100644 --- a/src/modules/font/freetype/Font.cpp +++ b/src/modules/font/freetype/Font.cpp @@ -53,7 +53,7 @@ Rasterizer *Font::newRasterizer(love::filesystem::FileData *data) throw love::Exception("Invalid font file: %s", data->getFilename().c_str()); } -Rasterizer *Font::newTrueTypeRasterizer(love::filesystem::FileData *data, int size) +Rasterizer *Font::newTrueTypeRasterizer(love::Data *data, int size) { return new TrueTypeRasterizer(library, data, size); } diff --git a/src/modules/font/freetype/Font.h b/src/modules/font/freetype/Font.h index 9acab2f86..097ef4176 100644 --- a/src/modules/font/freetype/Font.h +++ b/src/modules/font/freetype/Font.h @@ -45,7 +45,7 @@ public: // Implements Font Rasterizer *newRasterizer(love::filesystem::FileData *data); - Rasterizer *newTrueTypeRasterizer(love::filesystem::FileData *data, int size); + Rasterizer *newTrueTypeRasterizer(love::Data *data, int size); // Implement Module const char *getName() const; diff --git a/src/modules/font/freetype/TrueTypeRasterizer.cpp b/src/modules/font/freetype/TrueTypeRasterizer.cpp index 520296507..c6104ee1e 100644 --- a/src/modules/font/freetype/TrueTypeRasterizer.cpp +++ b/src/modules/font/freetype/TrueTypeRasterizer.cpp @@ -30,7 +30,7 @@ namespace font namespace freetype { -TrueTypeRasterizer::TrueTypeRasterizer(FT_Library library, love::filesystem::FileData *data, int size) +TrueTypeRasterizer::TrueTypeRasterizer(FT_Library library, love::Data *data, int size) : data(data) { if (size <= 0) @@ -159,7 +159,7 @@ bool TrueTypeRasterizer::hasGlyph(uint32 glyph) const return FT_Get_Char_Index(face, glyph) != 0; } -bool TrueTypeRasterizer::accepts(FT_Library library, love::filesystem::FileData *data) +bool TrueTypeRasterizer::accepts(FT_Library library, love::Data *data) { const FT_Byte *fbase = (const FT_Byte *) data->getData(); FT_Long fsize = (FT_Long) data->getSize(); diff --git a/src/modules/font/freetype/TrueTypeRasterizer.h b/src/modules/font/freetype/TrueTypeRasterizer.h index f4a088ed7..8f1668784 100644 --- a/src/modules/font/freetype/TrueTypeRasterizer.h +++ b/src/modules/font/freetype/TrueTypeRasterizer.h @@ -22,7 +22,7 @@ #define LOVE_FONT_FREETYPE_TRUE_TYPE_RASTERIZER_H // LOVE -#include "filesystem/File.h" +#include "filesystem/FileData.h" #include "font/Rasterizer.h" // FreeType2 @@ -44,7 +44,7 @@ class TrueTypeRasterizer : public Rasterizer { public: - TrueTypeRasterizer(FT_Library library, love::filesystem::FileData *data, int size); + TrueTypeRasterizer(FT_Library library, love::Data *data, int size); virtual ~TrueTypeRasterizer(); // Implement Rasterizer @@ -53,15 +53,15 @@ public: virtual int getGlyphCount() const; virtual bool hasGlyph(uint32 glyph) const; - static bool accepts(FT_Library library, love::filesystem::FileData *data); + static bool accepts(FT_Library library, love::Data *data); private: // TrueType face FT_Face face; - // File data - StrongRef data; + // Font data + StrongRef data; }; // TrueTypeRasterizer diff --git a/src/modules/font/wrap_Font.cpp b/src/modules/font/wrap_Font.cpp index 4c4cd0d23..313bb77ba 100644 --- a/src/modules/font/wrap_Font.cpp +++ b/src/modules/font/wrap_Font.cpp @@ -80,7 +80,13 @@ int w_newTrueTypeRasterizer(lua_State *L) } else { - filesystem::FileData *d = filesystem::luax_getfiledata(L, 1); + love::Data *d = nullptr; + + if (luax_istype(L, 1, DATA_T)) + d = luax_checkdata(L, 1); + else + d = filesystem::luax_getfiledata(L, 1); + int size = luaL_optint(L, 2, 12); luax_catchexcept(L,