mirror of
https://github.com/love2d/love.git
synced 2026-08-17 19:23:38 +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.
|
// 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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user