Skip to content

Commit

Permalink
GRAPHICS: Refactor Mac font loading into per file method
Browse files Browse the repository at this point in the history
  • Loading branch information
sev- committed Jan 26, 2017
1 parent d99036a commit 2991871
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 40 deletions.
84 changes: 44 additions & 40 deletions graphics/macgui/macfontmanager.cpp
Expand Up @@ -158,68 +158,72 @@ void MacFontManager::loadFonts() {
for (Common::ArchiveMemberList::iterator it = list.begin(); it != list.end(); ++it) {
Common::SeekableReadStream *stream = dat->createReadStreamForMember((*it)->getName());

Common::MacResManager *fontFile = new Common::MacResManager();
loadFontsFromStream(stream);
}

if (!fontFile->loadFromMacBinary(*stream))
continue;
_builtInFonts = false;

Common::MacResIDArray fonds = fontFile->getResIDArray(MKTAG('F','O','N','D'));
if (fonds.size() > 0) {
for (Common::Array<uint16>::iterator iterator = fonds.begin(); iterator != fonds.end(); ++iterator) {
Common::SeekableReadStream *fond = fontFile->getResource(MKTAG('F', 'O', 'N', 'D'), *iterator);
delete dat;
}

Common::String familyName = fontFile->getResName(MKTAG('F', 'O', 'N', 'D'), *iterator);
void MacFontManager::loadFontsFromStream(Common::SeekableReadStream *stream) {
Common::MacResManager *fontFile = new Common::MacResManager();

Graphics::MacFontFamily *fontFamily = new MacFontFamily();
fontFamily->load(*fond);
if (!fontFile->loadFromMacBinary(*stream))
return;

Common::Array<Graphics::MacFontFamily::AsscEntry> *assoc = fontFamily->getAssocTable();
Common::MacResIDArray fonds = fontFile->getResIDArray(MKTAG('F','O','N','D'));
if (fonds.size() > 0) {
for (Common::Array<uint16>::iterator iterator = fonds.begin(); iterator != fonds.end(); ++iterator) {
Common::SeekableReadStream *fond = fontFile->getResource(MKTAG('F', 'O', 'N', 'D'), *iterator);

for (uint i = 0; i < assoc->size(); i++) {
debug("size: %d style: %d id: %d", (*assoc)[i]._fontSize, (*assoc)[i]._fontStyle,
(*assoc)[i]._fontID);
Common::String familyName = fontFile->getResName(MKTAG('F', 'O', 'N', 'D'), *iterator);

Common::SeekableReadStream *fontstream;
MacFont *macfont;
Graphics::MacFONTFont *font;
Graphics::MacFontFamily *fontFamily = new MacFontFamily();
fontFamily->load(*fond);

fontstream = fontFile->getResource(MKTAG('N', 'F', 'N', 'T'), (*assoc)[i]._fontID);
Common::Array<Graphics::MacFontFamily::AsscEntry> *assoc = fontFamily->getAssocTable();

if (!fontstream)
fontstream = fontFile->getResource(MKTAG('F', 'O', 'N', 'T'), (*assoc)[i]._fontID);
for (uint i = 0; i < assoc->size(); i++) {
debug("size: %d style: %d id: %d", (*assoc)[i]._fontSize, (*assoc)[i]._fontStyle,
(*assoc)[i]._fontID);

if (!fontstream) {
warning("Unknown FontId: %d", (*assoc)[i]._fontID);
Common::SeekableReadStream *fontstream;
MacFont *macfont;
Graphics::MacFONTFont *font;

continue;
}
fontstream = fontFile->getResource(MKTAG('N', 'F', 'N', 'T'), (*assoc)[i]._fontID);

font = new Graphics::MacFONTFont;
font->loadFont(*fontstream, fontFamily, (*assoc)[i]._fontSize, (*assoc)[i]._fontStyle);
if (!fontstream)
fontstream = fontFile->getResource(MKTAG('F', 'O', 'N', 'T'), (*assoc)[i]._fontID);

delete fontstream;
if (!fontstream) {
warning("Unknown FontId: %d", (*assoc)[i]._fontID);

Common::String fontName = Common::String::format("%s-%d-%d", familyName.c_str(), (*assoc)[i]._fontStyle, (*assoc)[i]._fontSize);
continue;
}

macfont = new MacFont(_fontNames.getVal(familyName, kMacFontNonStandard), (*assoc)[i]._fontSize, (*assoc)[i]._fontStyle);
font = new Graphics::MacFONTFont;
font->loadFont(*fontstream, fontFamily, (*assoc)[i]._fontSize, (*assoc)[i]._fontStyle);

FontMan.assignFontToName(fontName, font);
macfont->setFont(font);
_fontRegistry.setVal(fontName, macfont);
delete fontstream;

debug(2, " %s", fontName.c_str());
}
Common::String fontName = Common::String::format("%s-%d-%d", familyName.c_str(), (*assoc)[i]._fontStyle, (*assoc)[i]._fontSize);

delete fond;
macfont = new MacFont(_fontNames.getVal(familyName, kMacFontNonStandard), (*assoc)[i]._fontSize, (*assoc)[i]._fontStyle);

FontMan.assignFontToName(fontName, font);
macfont->setFont(font);
_fontRegistry.setVal(fontName, macfont);

debug(2, " %s", fontName.c_str());
}
}

delete fontFile;
delete fond;
}
}

_builtInFonts = false;

delete dat;
delete fontFile;
}

const Font *MacFontManager::getFont(MacFont macFont) {
Expand Down
6 changes: 6 additions & 0 deletions graphics/macgui/macfontmanager.h
Expand Up @@ -25,6 +25,10 @@

#include "graphics/fontman.h"

namespace Common {
class SeekableReadStream;
}

namespace Graphics {

class MacFONTFont;
Expand Down Expand Up @@ -122,6 +126,8 @@ class MacFontManager {
const char *getFontName(MacFont &font);
int getFontIdByName(Common::String name);

void loadFontsFromStream(Common::SeekableReadStream *stream);

private:
void loadFontsBDF();
void loadFonts();
Expand Down

0 comments on commit 2991871

Please sign in to comment.