mirror of
https://github.com/love2d/love.git
synced 2026-08-15 15:51:12 +02:00
Slightly reduced the memory usage of Fonts / Rasterizers created using the default font.
--HG-- branch : minor
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user