[Scummvm-git-logs] scummvm master -> db05a9448bafe4d5eaacb9d2b5a7e6e936997211

sev- sev at scummvm.org
Fri Oct 7 10:49:25 CEST 2016


This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
ee476e9cf0 GRAPHICS: Parse slant from BDF fonts
db05a9448b GRAPHICS: Differentiate Mac fonts by slant


Commit: ee476e9cf0ee1dec3161ef3bed87be12ca9786f1
    https://github.com/scummvm/scummvm/commit/ee476e9cf0ee1dec3161ef3bed87be12ca9786f1
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2016-10-07T10:49:17+02:00

Commit Message:
GRAPHICS: Parse slant from BDF fonts

Changed paths:
    devtools/convbdf.cpp
    graphics/fonts/bdf.cpp
    graphics/fonts/bdf.h
    graphics/fonts/consolefont.cpp
    graphics/fonts/newfont.cpp
    graphics/fonts/newfont_big.cpp



diff --git a/devtools/convbdf.cpp b/devtools/convbdf.cpp
index a3196a9..5fbcd98 100644
--- a/devtools/convbdf.cpp
+++ b/devtools/convbdf.cpp
@@ -39,6 +39,7 @@ struct BdfBoundingBox {
 
 struct BdfFont {
 	char *familyName;
+	char *slant;
 	int maxAdvance;
 	int size;
 	int height;
@@ -53,7 +54,7 @@ struct BdfFont {
 	unsigned char *advances;
 	BdfBoundingBox *boxes;
 
-	BdfFont() : bitmaps(0), advances(0), boxes(0) {
+	BdfFont() : bitmaps(0), advances(0), boxes(0), familyName(0), slant(0) {
 	}
 
 	~BdfFont() {
@@ -65,6 +66,7 @@ struct BdfFont {
 		delete[] advances;
 		delete[] boxes;
 		delete[] familyName;
+		delete[] slant;
 	}
 };
 
@@ -173,6 +175,15 @@ int main(int argc, char *argv[]) {
 			if (p == font.familyName)
 				error("Invalid FAMILY_NAME");
 			*p = '\0'; // Remove last quote
+		} else if (hasPrefix(line, "SLANT \"")) {
+			font.familyName = new char[line.size()]; // We will definitely fit here
+			strncpy(font.familyName, &line.c_str()[7], line.size() - 1);
+			char *p = &font.slant[strlen(font.slant)];
+			while (p != font.slant && *p != '"')
+				p--;
+			if (p == font.slant)
+				error("Invalid SLANT");
+			*p = '\0'; // Remove last quote
 		} else if (hasPrefix(line, "FONT_ASCENT ")) {
 			if (sscanf(line.c_str(), "FONT_ASCENT %d", &font.ascent) != 1)
 				error("Invalid FONT_ASCENT");
@@ -496,6 +507,7 @@ int main(int argc, char *argv[]) {
 	printf("// Font structure\n"
 	       "static const BdfFontData desc = {\n"
 		   "\t\"%s\", // Family name\n"
+		   "\t\"%s\", // Slant\n"
 	       "\t%d, // Max advance\n"
 		   "\t%d, // Size\n"
 	       "\t%d, // Height\n"
@@ -507,7 +519,7 @@ int main(int argc, char *argv[]) {
 	       "\t%d, // Characters\n"
 	       "\n"
 	       "\tbitmapTable, // Bitmaps\n",
-	       font.familyName, font.maxAdvance, font.size, font.height, font.defaultBox.width,
+	       font.familyName, font.slant, font.maxAdvance, font.size, font.height, font.defaultBox.width,
 	       font.defaultBox.height, font.defaultBox.xOffset, font.defaultBox.yOffset,
 	       font.ascent, font.firstCharacter, font.defaultCharacter, font.numCharacters);
 
diff --git a/graphics/fonts/bdf.cpp b/graphics/fonts/bdf.cpp
index a8ffe28..1a23133 100644
--- a/graphics/fonts/bdf.cpp
+++ b/graphics/fonts/bdf.cpp
@@ -42,6 +42,7 @@ BdfFont::~BdfFont() {
 		delete[] _data.advances;
 		delete[] _data.boxes;
 		delete[] _data.familyName;
+		delete[] _data.slant;
 	}
 }
 
@@ -49,6 +50,10 @@ const char *BdfFont::getFamilyName() const {
 	return _data.familyName;
 }
 
+const char *BdfFont::getFontSlant() const {
+	return _data.slant;
+}
+
 int BdfFont::getFontHeight() const {
 	return _data.height;
 }
@@ -294,7 +299,7 @@ BdfFont *BdfFont::loadFont(Common::SeekableReadStream &stream) {
 	memset(bitmaps, 0, sizeof(byte *) * font.numCharacters);
 	byte *advances = new byte[font.numCharacters];
 	BdfBoundingBox *boxes = new BdfBoundingBox[font.numCharacters];
-	char *familyName;
+	char *familyName, *slant;
 
 	int descent = -1;
 
@@ -307,6 +312,8 @@ BdfFont *BdfFont::loadFont(Common::SeekableReadStream &stream) {
 			delete[] bitmaps;
 			delete[] advances;
 			delete[] boxes;
+			delete[] familyName;
+			delete[] slant;
 			return 0;
 		}
 
@@ -321,6 +328,7 @@ BdfFont *BdfFont::loadFont(Common::SeekableReadStream &stream) {
 				delete[] advances;
 				delete[] boxes;
 				delete[] familyName;
+				delete[] slant;
 				return 0;
 			}
 
@@ -337,6 +345,7 @@ BdfFont *BdfFont::loadFont(Common::SeekableReadStream &stream) {
 				delete[] advances;
 				delete[] boxes;
 				delete[] familyName;
+				delete[] slant;
 				return 0;
 			}
 		} else if (line.hasPrefix("FONT_ASCENT ")) {
@@ -347,6 +356,7 @@ BdfFont *BdfFont::loadFont(Common::SeekableReadStream &stream) {
 				delete[] advances;
 				delete[] boxes;
 				delete[] familyName;
+				delete[] slant;
 				return 0;
 			}
 		} else if (line.hasPrefix("FONT_DESCENT ")) {
@@ -357,6 +367,7 @@ BdfFont *BdfFont::loadFont(Common::SeekableReadStream &stream) {
 				delete[] advances;
 				delete[] boxes;
 				delete[] familyName;
+				delete[] slant;
 				return 0;
 			}
 		} else if (line.hasPrefix("DEFAULT_CHAR ")) {
@@ -367,6 +378,7 @@ BdfFont *BdfFont::loadFont(Common::SeekableReadStream &stream) {
 				delete[] advances;
 				delete[] boxes;
 				delete[] familyName;
+				delete[] slant;
 				return 0;
 			}
 		} else if (line.hasPrefix("STARTCHAR ")) {
@@ -392,6 +404,7 @@ BdfFont *BdfFont::loadFont(Common::SeekableReadStream &stream) {
 				delete[] advances;
 				delete[] boxes;
 				delete[] familyName;
+				delete[] slant;
 				return 0;
 			}
 
@@ -413,6 +426,24 @@ BdfFont *BdfFont::loadFont(Common::SeekableReadStream &stream) {
 				delete[] advances;
 				delete[] boxes;
 				delete[] familyName;
+				delete[] slant;
+				return 0;
+			}
+			*p = '\0'; // Remove last quote
+		} else if (line.hasPrefix("SLANT \"")) {
+			slant = new char[line.size()]; // We will definitely fit here
+			Common::strlcpy(slant, &line.c_str()[7], line.size());
+			char *p = &slant[strlen(slant)];
+			while (p != slant && *p != '"')
+				p--;
+			if (p == slant) {
+				warning("BdfFont::loadFont: Invalid SLANT");
+				freeBitmaps(bitmaps, font.numCharacters);
+				delete[] bitmaps;
+				delete[] advances;
+				delete[] boxes;
+				delete[] familyName;
+				delete[] slant;
 				return 0;
 			}
 			*p = '\0'; // Remove last quote
@@ -428,6 +459,7 @@ BdfFont *BdfFont::loadFont(Common::SeekableReadStream &stream) {
 		delete[] advances;
 		delete[] boxes;
 		delete[] familyName;
+		delete[] slant;
 		return 0;
 	}
 
@@ -437,6 +469,7 @@ BdfFont *BdfFont::loadFont(Common::SeekableReadStream &stream) {
 	font.advances = advances;
 	font.boxes = boxes;
 	font.familyName = familyName;
+	font.slant = slant;
 
 	int firstCharacter = font.numCharacters;
 	int lastCharacter = -1;
@@ -470,6 +503,7 @@ BdfFont *BdfFont::loadFont(Common::SeekableReadStream &stream) {
 		delete[] font.advances;
 		delete[] font.boxes;
 		delete[] familyName;
+		delete[] slant;
 		return 0;
 	}
 
diff --git a/graphics/fonts/bdf.h b/graphics/fonts/bdf.h
index bc1ced9..9a3b20e 100644
--- a/graphics/fonts/bdf.h
+++ b/graphics/fonts/bdf.h
@@ -41,6 +41,7 @@ struct BdfBoundingBox {
 
 struct BdfFontData {
 	const char *familyName;
+	const char *slant;
 
 	int maxAdvance;
 	int height;
@@ -69,6 +70,7 @@ public:
 	virtual void drawChar(Surface *dst, uint32 chr, int x, int y, uint32 color) const;
 
 	const char *getFamilyName() const;
+	const char *getFontSlant() const;
 	int getFontSize() const;
 
 	static BdfFont *loadFont(Common::SeekableReadStream &stream);
diff --git a/graphics/fonts/consolefont.cpp b/graphics/fonts/consolefont.cpp
index 9b1f545..9dcf1dc 100644
--- a/graphics/fonts/consolefont.cpp
+++ b/graphics/fonts/consolefont.cpp
@@ -5851,6 +5851,7 @@ const byte *const bitmapTable[] = {
 // Font structure
 static const BdfFontData desc = {
 	"Fixed", // Family name
+	"R", // Slant
 	5, // Max advance
 	8, // Size
 	8, // Height
diff --git a/graphics/fonts/newfont.cpp b/graphics/fonts/newfont.cpp
index 1ee3df4..ff06211 100644
--- a/graphics/fonts/newfont.cpp
+++ b/graphics/fonts/newfont.cpp
@@ -7635,6 +7635,7 @@ const byte *const bitmapTable[] = {
 // Font structure
 static const BdfFontData desc = {
 	"Schumacher", // Family name
+	"R", // Slant
 	6, // Max advance
 	12, // Size
 	12, // Height
diff --git a/graphics/fonts/newfont_big.cpp b/graphics/fonts/newfont_big.cpp
index 4c30141..e44e2ce 100644
--- a/graphics/fonts/newfont_big.cpp
+++ b/graphics/fonts/newfont_big.cpp
@@ -5830,6 +5830,7 @@ static const BdfBoundingBox boxes[] = {
 // Font structure
 static const BdfFontData desc = {
 	"Helvetica", // Family name
+	"R", // Slant
 	13, // Max advance
 	12, // Size
 	14, // Height


Commit: db05a9448bafe4d5eaacb9d2b5a7e6e936997211
    https://github.com/scummvm/scummvm/commit/db05a9448bafe4d5eaacb9d2b5a7e6e936997211
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2016-10-07T10:49:17+02:00

Commit Message:
GRAPHICS: Differentiate Mac fonts by slant

Changed paths:
    graphics/macgui/macfontmanager.cpp
    graphics/macgui/macfontmanager.h



diff --git a/graphics/macgui/macfontmanager.cpp b/graphics/macgui/macfontmanager.cpp
index 7bdb8a9..03fcb41 100644
--- a/graphics/macgui/macfontmanager.cpp
+++ b/graphics/macgui/macfontmanager.cpp
@@ -56,7 +56,7 @@ void MacFontManager::loadFonts() {
 
 		Common::String fontName;
 		if (font->getFamilyName() && *font->getFamilyName()) {
-			fontName = Common::String::format("%s-%d", font->getFamilyName(), font->getFontSize());
+			fontName = Common::String::format("%s-%s-%d", font->getFamilyName(), font->getFontSlant(), font->getFontSize());
 		} else { // Get it from the file name
 			fontName = (*it)->getName();
 
@@ -147,13 +147,27 @@ static const char *const fontNames[] = {
 	"New Century Schoolbook"
 };
 
-const char *MacFontManager::getFontName(int id, int size) {
+const char *MacFontManager::getFontName(int id, int size, int slant) {
 	static char name[128];
+	const char *sslant;
+
+	switch (slant) {
+	case kMacFontItalic:
+		sslant = "I";
+		break;
+	case kMacFontBold:
+		sslant = "B";
+		break;
+	case kMacFontRegular:
+	default:
+		sslant = "R";
+		break;
+	}
 
 	if (id > ARRAYSIZE(fontNames))
 		return NULL;
 
-	snprintf(name, 128, "%s-%d", fontNames[id], size);
+	snprintf(name, 128, "%s-%s-%d", fontNames[id], sslant, size);
 
 	return name;
 }
diff --git a/graphics/macgui/macfontmanager.h b/graphics/macgui/macfontmanager.h
index fab4ce9..568c153 100644
--- a/graphics/macgui/macfontmanager.h
+++ b/graphics/macgui/macfontmanager.h
@@ -31,6 +31,12 @@ enum {
 	kMacFontChicago = 0
 };
 
+enum {
+	kMacFontRegular,
+	kMacFontBold,
+	kMacFontItalic
+};
+
 class MacFont {
 public:
 	MacFont(int id = kMacFontChicago, int size = 12, FontManager::FontUsage fallback = Graphics::FontManager::kBigGUIFont) {
@@ -79,7 +85,7 @@ private:
 	 * @param size size of the font
 	 * @return the font name or NULL if ID goes beyond the mapping
 	 */
-	const char *getFontName(int id, int size);
+	const char *getFontName(int id, int size, int slant = kMacFontRegular);
 
 private:
 	bool _builtInFonts;





More information about the Scummvm-git-logs mailing list