Browse Source

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

--HG--
branch : minor
Alex Szpakowski 10 years ago
parent
commit
24cb934fa6

+ 10 - 3
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<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
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<image::ImageData *> &images);
 

+ 1 - 1
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);
 }

+ 1 - 1
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;

+ 2 - 2
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();

+ 5 - 5
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<love::filesystem::FileData> data;
+	// Font data
+	StrongRef<love::Data> data;
 
 }; // TrueTypeRasterizer
 

+ 7 - 1
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,