Explorar o código

font rasterizer: initialize advance and descent metrics for BMFont and image font rasterizers.

Fixes #2209.
Sasha Szpakowski hai 1 mes
pai
achega
305082b6e9

+ 3 - 0
src/modules/font/BMFontRasterizer.cpp

@@ -191,6 +191,7 @@ void BMFontRasterizer::parseConfig(const std::string &configtext)
 		{
 			lineHeight = cline.getAttributeInt("lineHeight");
 			metrics.ascent = cline.getAttributeInt("base");
+			metrics.descent = metrics.ascent - lineHeight; // Negative.
 		}
 		else if (tag == "page")
 		{
@@ -250,6 +251,8 @@ void BMFontRasterizer::parseConfig(const std::string &configtext)
 
 			characters.push_back(c);
 			characterIndices[id] = (int) characters.size() - 1;
+
+			metrics.advance = std::max(metrics.advance, c.metrics.advance);
 		}
 		else if (tag == "kerning")
 		{

+ 3 - 0
src/modules/font/ImageRasterizer.cpp

@@ -24,6 +24,7 @@
 #include "common/Exception.h"
 
 #include <string.h>
+#include <algorithm>
 
 namespace love
 {
@@ -160,6 +161,8 @@ void ImageRasterizer::load(const uint32 *glyphs, int glyphcount)
 
 		imageGlyphs.push_back(imageGlyph);
 		glyphIndices[glyphs[i]] = (int) imageGlyphs.size() - 1;
+
+		metrics.advance = std::max(metrics.advance, imageGlyph.width + extraSpacing);
 	}
 }
 

+ 3 - 3
src/modules/font/Rasterizer.h

@@ -145,9 +145,9 @@ public:
 
 protected:
 
-	FontMetrics metrics;
-	float dpiScale;
-	bool sdf;
+	FontMetrics metrics = {};
+	float dpiScale = 1.0f;
+	bool sdf = false;
 
 }; // Rasterizer