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.
#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<filesystem::FileData> data(new filesystem::FileData(sizeof(Vera_ttf), "Vera.ttf"));
StrongRef<DefaultFontData> data(new DefaultFontData);
data->release();
memcpy(data->getData(), Vera_ttf, sizeof(Vera_ttf));
return newTrueTypeRasterizer(data.get(), size);
}
+1 -1
View File
@@ -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<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());
}
Rasterizer *Font::newTrueTypeRasterizer(love::filesystem::FileData *data, int size)
Rasterizer *Font::newTrueTypeRasterizer(love::Data *data, int size)
{
return new TrueTypeRasterizer(library, data, size);
}
+1 -1
View File
@@ -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;
@@ -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();
@@ -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<love::filesystem::FileData> data;
// Font data
StrongRef<love::Data> data;
}; // TrueTypeRasterizer
+7 -1
View File
@@ -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,