Skip to content

Commit

Permalink
GRAPHICS: Search for font substitution for MacFonts
Browse files Browse the repository at this point in the history
  • Loading branch information
sev- committed Oct 7, 2016
1 parent 6de4334 commit 086963f
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 3 deletions.
2 changes: 1 addition & 1 deletion engines/wage/world.cpp
Expand Up @@ -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()) {
Expand Down
28 changes: 27 additions & 1 deletion graphics/macgui/macfontmanager.cpp
Expand Up @@ -72,6 +72,7 @@ void MacFontManager::loadFonts() {
}

FontMan.assignFontToName(fontName, font);
_fontRegistry.setVal(fontName, font);

debug(2, " %s", fontName.c_str());
}
Expand All @@ -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());

Expand Down Expand Up @@ -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
12 changes: 11 additions & 1 deletion graphics/macgui/macfontmanager.h
Expand Up @@ -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; }
Expand All @@ -55,6 +59,7 @@ class MacFont {
private:
int _id;
int _size;
int _slant;
Common::String _name;
FontManager::FontUsage _fallback;
};
Expand Down Expand Up @@ -86,9 +91,14 @@ class MacFontManager {
* @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
Expand Down

0 comments on commit 086963f

Please sign in to comment.