Slightly reduced the memory usage of Fonts / Rasterizers created using the default font.

--HG--
branch : minor
This commit is contained in:
Alex Szpakowski
2015-02-16 04:19:07 -04:00
parent fb79788d74
commit 24cb934fa6
7 changed files with 27 additions and 14 deletions
+10 -3
View File
@@ -33,13 +33,20 @@ namespace font
// Default TrueType font. // Default TrueType font.
#include "Vera.ttf.h" #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) Rasterizer *Font::newTrueTypeRasterizer(int size)
{ {
StrongRef<filesystem::FileData> data(new filesystem::FileData(sizeof(Vera_ttf), "Vera.ttf")); StrongRef<DefaultFontData> data(new DefaultFontData);
data->release(); data->release();
memcpy(data->getData(), Vera_ttf, sizeof(Vera_ttf));
return newTrueTypeRasterizer(data.get(), size); return newTrueTypeRasterizer(data.get(), size);
} }
+1 -1
View File
@@ -47,7 +47,7 @@ public:
virtual Rasterizer *newRasterizer(love::filesystem::FileData *data) = 0; virtual Rasterizer *newRasterizer(love::filesystem::FileData *data) = 0;
virtual Rasterizer *newTrueTypeRasterizer(int size); 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<image::ImageData *> &images); virtual Rasterizer *newBMFontRasterizer(love::filesystem::FileData *fontdef, const std::vector<image::ImageData *> &images);
+1 -1
View File
@@ -53,7 +53,7 @@ Rasterizer *Font::newRasterizer(love::filesystem::FileData *data)
throw love::Exception("Invalid font file: %s", data->getFilename().c_str()); 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); return new TrueTypeRasterizer(library, data, size);
} }
+1 -1
View File
@@ -45,7 +45,7 @@ public:
// Implements Font // Implements Font
Rasterizer *newRasterizer(love::filesystem::FileData *data); Rasterizer *newRasterizer(love::filesystem::FileData *data);
Rasterizer *newTrueTypeRasterizer(love::filesystem::FileData *data, int size); Rasterizer *newTrueTypeRasterizer(love::Data *data, int size);
// Implement Module // Implement Module
const char *getName() const; const char *getName() const;
@@ -30,7 +30,7 @@ namespace font
namespace freetype 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) : data(data)
{ {
if (size <= 0) if (size <= 0)
@@ -159,7 +159,7 @@ bool TrueTypeRasterizer::hasGlyph(uint32 glyph) const
return FT_Get_Char_Index(face, glyph) != 0; 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(); const FT_Byte *fbase = (const FT_Byte *) data->getData();
FT_Long fsize = (FT_Long) data->getSize(); FT_Long fsize = (FT_Long) data->getSize();
@@ -22,7 +22,7 @@
#define LOVE_FONT_FREETYPE_TRUE_TYPE_RASTERIZER_H #define LOVE_FONT_FREETYPE_TRUE_TYPE_RASTERIZER_H
// LOVE // LOVE
#include "filesystem/File.h" #include "filesystem/FileData.h"
#include "font/Rasterizer.h" #include "font/Rasterizer.h"
// FreeType2 // FreeType2
@@ -44,7 +44,7 @@ class TrueTypeRasterizer : public Rasterizer
{ {
public: public:
TrueTypeRasterizer(FT_Library library, love::filesystem::FileData *data, int size); TrueTypeRasterizer(FT_Library library, love::Data *data, int size);
virtual ~TrueTypeRasterizer(); virtual ~TrueTypeRasterizer();
// Implement Rasterizer // Implement Rasterizer
@@ -53,15 +53,15 @@ public:
virtual int getGlyphCount() const; virtual int getGlyphCount() const;
virtual bool hasGlyph(uint32 glyph) 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: private:
// TrueType face // TrueType face
FT_Face face; FT_Face face;
// File data // Font data
StrongRef<love::filesystem::FileData> data; StrongRef<love::Data> data;
}; // TrueTypeRasterizer }; // TrueTypeRasterizer
+7 -1
View File
@@ -80,7 +80,13 @@ int w_newTrueTypeRasterizer(lua_State *L)
} }
else 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); int size = luaL_optint(L, 2, 12);
luax_catchexcept(L, luax_catchexcept(L,