Browse Source

LÖVE will now try to guess the line height for BMFont files which are missing the 'lineHeight' attribute.

--HG--
branch : minor
Alex Szpakowski 11 years ago
parent
commit
4c6e688870
2 changed files with 10 additions and 4 deletions
  1. 9 4
      src/modules/font/BMFontRasterizer.cpp
  2. 1 0
      src/modules/font/BMFontRasterizer.h

+ 9 - 4
src/modules/font/BMFontRasterizer.cpp

@@ -26,6 +26,7 @@
 // C++
 // C++
 #include <sstream>
 #include <sstream>
 #include <vector>
 #include <vector>
+#include <algorithm>
 
 
 // C
 // C
 #include <cstdlib>
 #include <cstdlib>
@@ -174,7 +175,6 @@ void BMFontRasterizer::parseConfig(const std::string &configtext)
 		{
 		{
 			lineHeight = cline.getAttributeInt("lineHeight");
 			lineHeight = cline.getAttributeInt("lineHeight");
 			metrics.ascent = cline.getAttributeInt("base");
 			metrics.ascent = cline.getAttributeInt("base");
-			metrics.height = lineHeight;
 		}
 		}
 		else if (tag == "page")
 		else if (tag == "page")
 		{
 		{
@@ -230,12 +230,12 @@ void BMFontRasterizer::parseConfig(const std::string &configtext)
 		}
 		}
 	}
 	}
 
 
-	if (lineHeight == 0)
-		throw love::Exception("Invalid BMFont file (missing line height attribute?)");
-
 	if (characters.size() == 0)
 	if (characters.size() == 0)
 		throw love::Exception("Invalid BMFont file (no character definitions?)");
 		throw love::Exception("Invalid BMFont file (no character definitions?)");
 
 
+	// Try to guess the line height if the lineheight attribute isn't found.
+	bool guessheight = lineHeight == 0;
+
 	// Verify the glyph character attributes.
 	// Verify the glyph character attributes.
 	for (const auto &cpair : characters)
 	for (const auto &cpair : characters)
 	{
 	{
@@ -251,7 +251,12 @@ void BMFontRasterizer::parseConfig(const std::string &configtext)
 
 
 		if (!id->inside(c.x, c.y) || !id->inside(c.x + c.metrics.width, c.y + c.metrics.height))
 		if (!id->inside(c.x, c.y) || !id->inside(c.x + c.metrics.width, c.y + c.metrics.height))
 			throw love::Exception("Invalid BMFont character coordinates.");
 			throw love::Exception("Invalid BMFont character coordinates.");
+
+		if (guessheight)
+			lineHeight = std::max(lineHeight, c.metrics.height);
 	}
 	}
+
+	metrics.height = lineHeight;
 }
 }
 
 
 int BMFontRasterizer::getLineHeight() const
 int BMFontRasterizer::getLineHeight() const

+ 1 - 0
src/modules/font/BMFontRasterizer.h

@@ -22,6 +22,7 @@
 #define LOVE_FONT_BMFONT_RASTERIZER_H
 #define LOVE_FONT_BMFONT_RASTERIZER_H
 
 
 // LOVE
 // LOVE
+#include "common/config.h"
 #include "Rasterizer.h"
 #include "Rasterizer.h"
 #include "image/ImageData.h"
 #include "image/ImageData.h"