aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/wage/world.cpp2
-rw-r--r--graphics/macgui/macfontmanager.cpp28
-rw-r--r--graphics/macgui/macfontmanager.h12
3 files changed, 39 insertions, 3 deletions
diff --git a/engines/wage/world.cpp b/engines/wage/world.cpp
index 100517b836..90d689720e 100644
--- a/engines/wage/world.cpp
+++ b/engines/wage/world.cpp
@@ -206,7 +206,7 @@ bool World::loadWorld(Common::MacResManager *resMan) {
scene->_textBounds = readRect(res);
int fontType = res->readUint16BE();
int fontSize = res->readUint16BE();
- scene->_font = new Graphics::MacFont(fontType, fontSize, Graphics::FontManager::kConsoleFont);
+ scene->_font = new Graphics::MacFont(fontType, fontSize, Graphics::kMacFontRegular, Graphics::FontManager::kConsoleFont);
Common::String text;
while (res->pos() < res->size()) {
diff --git a/graphics/macgui/macfontmanager.cpp b/graphics/macgui/macfontmanager.cpp
index 03fcb41f91..97da1a6d96 100644
--- a/graphics/macgui/macfontmanager.cpp
+++ b/graphics/macgui/macfontmanager.cpp
@@ -72,6 +72,7 @@ void MacFontManager::loadFonts() {
}
FontMan.assignFontToName(fontName, font);
+ _fontRegistry.setVal(fontName, font);
debug(2, " %s", fontName.c_str());
}
@@ -86,7 +87,10 @@ const Font *MacFontManager::getFont(MacFont macFont) {
if (!_builtInFonts) {
if (macFont.getName().empty())
- macFont.setName(getFontName(macFont.getId(), macFont.getSize()));
+ macFont.setName(getFontName(macFont.getId(), macFont.getSize(), macFont.getSlant()));
+
+ if (!_fontRegistry.contains(macFont.getName()))
+ generateFontSubstitute(macFont);
font = FontMan.getFontByName(macFont.getName());
@@ -172,4 +176,26 @@ const char *MacFontManager::getFontName(int id, int size, int slant) {
return name;
}
+const char *MacFontManager::getFontName(MacFont &font) {
+ return getFontName(font.getId(), font.getSize(), font.getSlant());
+}
+
+void MacFontManager::generateFontSubstitute(MacFont &macFont) {
+ if (_fontRegistry.contains(getFontName(macFont.getId(), macFont.getSize() * 2, macFont.getSlant()))) {
+ generateFont(macFont, MacFont(macFont.getId(), macFont.getSize() * 2, macFont.getSlant()));
+
+ return;
+ }
+
+ if (_fontRegistry.contains(getFontName(macFont.getId(), macFont.getSize() / 2, macFont.getSlant()))) {
+ generateFont(macFont, MacFont(macFont.getId(), macFont.getSize() / 2, macFont.getSlant()));
+
+ return;
+ }
+}
+
+void MacFontManager::generateFont(MacFont fromFont, MacFont toFont) {
+ warning("Found font substitute from font %s to %s", getFontName(fromFont), getFontName(toFont));
+}
+
} // End of namespace Graphics
diff --git a/graphics/macgui/macfontmanager.h b/graphics/macgui/macfontmanager.h
index 568c1530c0..a263ab52ed 100644
--- a/graphics/macgui/macfontmanager.h
+++ b/graphics/macgui/macfontmanager.h
@@ -37,16 +37,20 @@ enum {
kMacFontItalic
};
+class BdfFont;
+
class MacFont {
public:
- MacFont(int id = kMacFontChicago, int size = 12, FontManager::FontUsage fallback = Graphics::FontManager::kBigGUIFont) {
+ MacFont(int id = kMacFontChicago, int size = 12, int slant = kMacFontRegular, FontManager::FontUsage fallback = Graphics::FontManager::kBigGUIFont) {
_id = id;
_size = size;
+ _slant = slant;
_fallback = fallback;
}
int getId() { return _id; };
int getSize() { return _size; }
+ int getSlant() { return _slant; }
Common::String getName() { return _name; }
void setName(Common::String &name) { _name = name; }
void setName(const char *name) { _name = name; }
@@ -55,6 +59,7 @@ public:
private:
int _id;
int _size;
+ int _slant;
Common::String _name;
FontManager::FontUsage _fallback;
};
@@ -86,9 +91,14 @@ private:
* @return the font name or NULL if ID goes beyond the mapping
*/
const char *getFontName(int id, int size, int slant = kMacFontRegular);
+ const char *getFontName(MacFont &font);
+
+ void generateFontSubstitute(MacFont &macFont);
+ void generateFont(MacFont fromFont, MacFont toFont);
private:
bool _builtInFonts;
+ Common::HashMap<Common::String, BdfFont *> _fontRegistry;
};
} // End of namespace Graphics