[Scummvm-git-logs] scummvm master -> 719bc03487ca27e98378f7f48f05ba9312cbd432

sev- sev at scummvm.org
Tue Oct 11 20:37:42 CEST 2016


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

Summary:
719bc03487 GRAPHICS: Added stub for BDF font scaler


Commit: 719bc03487ca27e98378f7f48f05ba9312cbd432
    https://github.com/scummvm/scummvm/commit/719bc03487ca27e98378f7f48f05ba9312cbd432
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2016-10-11T18:27:06+02:00

Commit Message:
GRAPHICS: Added stub for BDF font scaler

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



diff --git a/graphics/fonts/bdf.cpp b/graphics/fonts/bdf.cpp
index 9c5105d..a783a22 100644
--- a/graphics/fonts/bdf.cpp
+++ b/graphics/fonts/bdf.cpp
@@ -700,4 +700,61 @@ BdfFont *BdfFont::loadFromCache(Common::SeekableReadStream &stream) {
 	return new BdfFont(data, DisposeAfterUse::YES);
 }
 
+BdfFont *BdfFont::scaleFont(BdfFont *src, int newSize) {
+	if (src->getFontSize()) {
+		warning("Requested to scale 0 size font");
+		return NULL;
+	}
+
+	float scale = newSize / src->getFontSize();
+
+	BdfFontData data;
+
+	data.maxAdvance = src->_data.maxAdvance;
+	data.height = src->_data.height;
+	data.defaultBox.width = src->_data.defaultBox.width;
+	data.defaultBox.height = src->_data.defaultBox.height;
+	data.defaultBox.xOffset = src->_data.defaultBox.xOffset;
+	data.defaultBox.yOffset = src->_data.defaultBox.yOffset;
+	data.ascent = src->_data.ascent;
+	data.firstCharacter = src->_data.firstCharacter;
+	data.defaultCharacter = src->_data.defaultCharacter;
+	data.numCharacters = src->_data.numCharacters;
+
+	BdfBoundingBox *boxes = new BdfBoundingBox[data.numCharacters];
+	for (int i = 0; i < data.numCharacters; ++i) {
+		boxes[i].width = src->_data.boxes[i].width;
+		boxes[i].height = src->_data.boxes[i].height;
+		boxes[i].xOffset = src->_data.boxes[i].xOffset;
+		boxes[i].yOffset = src->_data.boxes[i].yOffset;
+	}
+
+	byte *advances = new byte[data.numCharacters];
+	for (int i = 0; i < data.numCharacters; ++i) {
+		advances[i] = src->_data.advances[i];
+	}
+
+	byte **bitmaps = new byte *[data.numCharacters];
+
+	for (int i = 0; i < data.numCharacters; ++i) {
+		const BdfBoundingBox &box = data.boxes ? data.boxes[i] : data.defaultBox;
+		if (src->_data.bitmaps[i]) {
+			const int bytes = ((box.width + 7) / 8) * box.height;
+			bitmaps[i] = new byte[bytes];
+
+			for (int j = 0; j < bytes; j++)
+				bitmaps[i][j] = src->_data.bitmaps[i][j];
+
+		} else {
+			bitmaps[i] = 0;
+		}
+	}
+
+	data.bitmaps = bitmaps;
+	data.advances = advances;
+	data.boxes = boxes;
+
+	return new BdfFont(data, DisposeAfterUse::YES);
+}
+
 } // End of namespace Graphics
diff --git a/graphics/fonts/bdf.h b/graphics/fonts/bdf.h
index 9a3b20e..d99b5fd 100644
--- a/graphics/fonts/bdf.h
+++ b/graphics/fonts/bdf.h
@@ -76,6 +76,7 @@ public:
 	static BdfFont *loadFont(Common::SeekableReadStream &stream);
 	static bool cacheFontData(const BdfFont &font, const Common::String &filename);
 	static BdfFont *loadFromCache(Common::SeekableReadStream &stream);
+	static BdfFont *scaleFont(BdfFont *src, int newSize);
 private:
 	int mapToIndex(uint32 ch) const;
 
diff --git a/graphics/macgui/macfontmanager.cpp b/graphics/macgui/macfontmanager.cpp
index bf3532d..ce94935 100644
--- a/graphics/macgui/macfontmanager.cpp
+++ b/graphics/macgui/macfontmanager.cpp
@@ -259,9 +259,18 @@ void MacFontManager::generateFontSubstitute(MacFont &macFont) {
 	generateFont(macFont, MacFont(macFont.getId(), maxSize, macFont.getSlant()));
 }
 
-void MacFontManager::generateFont(MacFont fromFont, MacFont toFont) {
+void MacFontManager::generateFont(MacFont toFont, MacFont fromFont) {
 	debugN("Found font substitute for font %s ", getFontName(fromFont));
 	debug("as %s", getFontName(toFont));
+
+	Graphics::BdfFont *bdfFont = (Graphics::BdfFont *)getFont(fromFont);
+
+	Graphics::BdfFont *font = Graphics::BdfFont::scaleFont(bdfFont, toFont.getSize());
+
+	toFont.setGenerated(true);
+
+	FontMan.assignFontToName(getFontName(toFont), font);
+	_fontRegistry.setVal(getFontName(toFont), &toFont);
 }
 
 } // End of namespace Graphics





More information about the Scummvm-git-logs mailing list