ZVISION: Delete unused code

This commit is contained in:
Marisa-Chan 2014-12-19 10:46:43 +06:00
parent e0cb8f52f7
commit f4fe0b008f
5 changed files with 2 additions and 344 deletions

View File

@ -36,82 +36,6 @@
namespace ZVision {
TruetypeFont::TruetypeFont(ZVision *engine, int32 fontHeight)
: _engine(engine),
_fontHeight(fontHeight),
_font(0),
_lineHeight(0),
_maxCharWidth(0),
_maxCharHeight(0) {
}
TruetypeFont::~TruetypeFont(void) {
delete _font;
}
bool TruetypeFont::loadFile(const Common::String &filename) {
Common::File file;
bool fileOpened = false;
if (!Common::File::exists(filename)) {
debug("TTF font file %s was not found. Reverting to arial.ttf", filename.c_str());
fileOpened = file.open("arial.ttf");
} else {
fileOpened = file.open(filename);
}
if (!fileOpened) {
debug("TTF file could not be opened");
return false;
}
_font = Graphics::loadTTFFont(file, _fontHeight);
_lineHeight = _font->getFontHeight();
return true;
}
Graphics::Surface *TruetypeFont::drawTextToSurface(const Common::String &text, uint16 textColor, int maxWidth, int maxHeight, Graphics::TextAlign align, bool wrap) {
if (text.equals("")) {
return nullptr;
}
Graphics::Surface *surface = new Graphics::Surface();
if (!wrap) {
int width = MIN(_font->getStringWidth(text), maxWidth);
surface->create(width, _lineHeight, Graphics::PixelFormat(2, 5, 6, 5, 0, 11, 5, 0, 0));
// TODO: Add better alpha support by getting the pixels from the backbuffer.
// However doing that requires some kind of caching system so future text doesn't try to use this text as it's alpha background.
surface->fillRect(Common::Rect(0, 0, surface->w, surface->h), 0);
_font->drawString(surface, text, 0, 0, maxWidth, textColor, align);
return surface;
}
Common::Array<Common::String> lines;
_font->wordWrapText(text, maxWidth, lines);
while (maxHeight > 0 && (int)lines.size() * _lineHeight > maxHeight) {
lines.pop_back();
}
if (lines.size() == 0) {
delete surface;
return nullptr;
}
surface->create(maxWidth, lines.size() * _lineHeight, Graphics::PixelFormat(2, 5, 6, 5, 0, 11, 5, 0, 0));
surface->fillRect(Common::Rect(0, 0, surface->w, surface->h), 0);
int heightOffset = 0;
for (Common::Array<Common::String>::iterator it = lines.begin(); it != lines.end(); it++) {
_font->drawString(surface, *it, 0, 0 + heightOffset, maxWidth, textColor, align);
heightOffset += _lineHeight;
}
return surface;
}
StyledTTFont::StyledTTFont(ZVision *engine) {
_engine = engine;
_style = 0;

View File

@ -36,45 +36,6 @@ namespace ZVision {
class ZVision;
class TruetypeFont {
public:
TruetypeFont(ZVision *engine, int32 fontHeight);
~TruetypeFont();
private:
ZVision *_engine;
Graphics::Font *_font;
int _lineHeight;
size_t _maxCharWidth;
size_t _maxCharHeight;
public:
int32 _fontHeight;
public:
/**
* Loads a .ttf file into memory. This must be called
* before any calls to drawTextToSurface
*
* @param filename The file name of the .ttf file to load
*/
bool loadFile(const Common::String &filename);
/**
* Renders the supplied text to a Surface using 0x0 as the
* background color.
*
* @param text The to render
* @param textColor The color to render the text with
* @param maxWidth The max width the text should take up.
* @param maxHeight The max height the text should take up.
* @param align The alignment of the text within the bounds of maxWidth
* @param wrap If true, any words extending past maxWidth will wrap to a new line. If false, ellipses will be rendered to show that the text didn't fit
* @return A Surface containing the rendered text
*/
Graphics::Surface *drawTextToSurface(const Common::String &text, uint16 textColor, int maxWidth, int maxHeight, Graphics::TextAlign align, bool wrap);
};
// Styled TTF
class StyledTTFont {
public:

View File

@ -30,7 +30,7 @@
#include "zvision/zvision.h"
#include "zvision/file/search_manager.h"
#include "zvision/text/string_manager.h"
#include "zvision/graphics/truetype_font.h"
#include "zvision/text/text.h"
namespace ZVision {
@ -39,9 +39,7 @@ StringManager::StringManager(ZVision *engine)
}
StringManager::~StringManager() {
for (Common::HashMap<Common::String, TruetypeFont *>::iterator iter = _fonts.begin(); iter != _fonts.end(); ++iter) {
delete iter->_value;
}
}
void StringManager::initialize(ZVisionGameId gameId) {
@ -69,202 +67,6 @@ void StringManager::loadStrFile(const Common::String &fileName) {
}
}
void StringManager::parseStrFile(const Common::String &fileName) {
Common::File file;
if (!file.open(fileName)) {
warning("%s does not exist. String parsing failed", fileName.c_str());
return;
}
uint lineNumber = 0;
while (!file.eos()) {
_lastStyle.align = Graphics::kTextAlignLeft;
_lastStyle.color = 0;
_lastStyle.font = nullptr;
Common::String asciiLine = readWideLine(file);
if (asciiLine.empty()) {
continue;
}
char tagString[150];
uint tagStringCursor = 0;
char textString[150];
uint textStringCursor = 0;
bool inTag = false;
for (uint i = 0; i < asciiLine.size(); ++i) {
switch (asciiLine[i]) {
case '<':
inTag = true;
if (!_inGameText[lineNumber].fragments.empty()) {
_inGameText[lineNumber].fragments.back().text = Common::String(textString, textStringCursor);
textStringCursor = 0;
}
break;
case '>':
inTag = false;
parseTag(Common::String(tagString, tagStringCursor), lineNumber);
tagStringCursor = 0;
break;
default:
if (inTag) {
tagString[tagStringCursor] = asciiLine[i];
tagStringCursor++;
} else {
textString[textStringCursor] = asciiLine[i];
textStringCursor++;
}
break;
}
}
if (textStringCursor > 0) {
_inGameText[lineNumber].fragments.back().text = Common::String(textString, textStringCursor);
}
lineNumber++;
assert(lineNumber <= NUM_TEXT_LINES);
}
}
void StringManager::parseTag(const Common::String &tagString, uint lineNumber) {
Common::StringTokenizer tokenizer(tagString);
Common::String token = tokenizer.nextToken();
Common::String fontName;
bool bold = false;
Graphics::TextAlign align = _lastStyle.align;
int point = _lastStyle.font != nullptr ? _lastStyle.font->_fontHeight : 12;
int red = 0;
int green = 0;
int blue = 0;
while (!token.empty()) {
if (token.matchString("font", true)) {
fontName = tokenizer.nextToken();
} else if (token.matchString("bold", true)) {
token = tokenizer.nextToken();
if (token.matchString("on", false)) {
bold = true;
}
} else if (token.matchString("justify", true)) {
token = tokenizer.nextToken();
if (token.matchString("center", false)) {
align = Graphics::kTextAlignCenter;
} else if (token.matchString("right", false)) {
align = Graphics::kTextAlignRight;
}
} else if (token.matchString("point", true)) {
point = atoi(tokenizer.nextToken().c_str());
} else if (token.matchString("red", true)) {
red = atoi(tokenizer.nextToken().c_str());
} else if (token.matchString("green", true)) {
green = atoi(tokenizer.nextToken().c_str());
} else if (token.matchString("blue", true)) {
blue = atoi(tokenizer.nextToken().c_str());
}
token = tokenizer.nextToken();
}
TextFragment fragment;
if (fontName.empty()) {
fragment.style.font = _lastStyle.font;
} else {
Common::String newFontName;
if (fontName.matchString("*times new roman*", true)) {
if (bold) {
newFontName = "timesbd.ttf";
} else {
newFontName = "times.ttf";
}
} else if (fontName.matchString("*courier new*", true)) {
if (bold) {
newFontName = "courbd.ttf";
} else {
newFontName = "cour.ttf";
}
} else if (fontName.matchString("*century schoolbook*", true)) {
if (bold) {
newFontName = "censcbkbd.ttf";
} else {
newFontName = "censcbk.ttf";
}
} else if (fontName.matchString("*garamond*", true)) {
if (bold) {
newFontName = "garabd.ttf";
} else {
newFontName = "gara.ttf";
}
} else {
debug("Could not identify font: %s. Reverting to Arial", fontName.c_str());
if (bold) {
newFontName = "zorknorm.ttf";
} else {
newFontName = "arial.ttf";
}
}
Common::String fontKey = Common::String::format("%s-%d", newFontName.c_str(), point);
if (_fonts.contains(fontKey)) {
fragment.style.font = _fonts[fontKey];
} else {
fragment.style.font = new TruetypeFont(_engine, point);
fragment.style.font->loadFile(newFontName);
_fonts[fontKey] = fragment.style.font;
}
}
fragment.style.align = align;
fragment.style.color = Graphics::ARGBToColor<Graphics::ColorMasks<565> >(0, red, green, blue);
_inGameText[lineNumber].fragments.push_back(fragment);
_lastStyle = fragment.style;
}
Common::String StringManager::readWideLine(Common::SeekableReadStream &stream) {
Common::String asciiString;
// Don't spam the user with warnings about UTF-16 support.
// Just do one warning per String
bool charOverflowWarning = false;
uint16 value = stream.readUint16LE();
while (!stream.eos()) {
// Check for CRLF
if (value == 0x0A0D) {
// Read in the extra NULL char
stream.readByte(); // \0
// End of the line. Break
break;
}
// Crush each octet pair to a single octet with a simple cast
if (value > 255) {
charOverflowWarning = true;
value = '?';
}
char charValue = (char)value;
asciiString += charValue;
value = stream.readUint16LE();
}
if (charOverflowWarning) {
warning("UTF-16 is not supported. Characters greater than 255 are replaced with '?'");
}
return asciiString;
}
StringManager::TextStyle StringManager::getTextStyle(uint stringNumber) {
return _inGameText[stringNumber].fragments.front().style;
}
const Common::String StringManager::getTextLine(uint stringNumber) {
return _lines[stringNumber];
}

View File

@ -40,17 +40,6 @@ public:
~StringManager();
public:
struct TextStyle {
TruetypeFont *font;
uint16 color; // In RBG 565
Graphics::TextAlign align;
};
struct TextFragment {
TextStyle style;
Common::String text;
};
enum {
ZVISION_STR_SAVEEXIST = 23,
ZVISION_STR_SAVED = 4,
@ -59,10 +48,6 @@ public:
};
private:
struct InGameText {
Common::List<TextFragment> fragments;
};
enum {
NUM_TEXT_LINES = 56 // Max number of lines in a .str file. We hardcode this number because we know ZNem uses 42 strings and ZGI uses 56
};
@ -71,22 +56,12 @@ private:
ZVision *_engine;
Common::String _lines[NUM_TEXT_LINES];
InGameText _inGameText[NUM_TEXT_LINES];
Common::HashMap<Common::String, TruetypeFont *> _fonts;
TextStyle _lastStyle;
public:
void initialize(ZVisionGameId gameId);
StringManager::TextStyle getTextStyle(uint stringNumber);
const Common::String getTextLine(uint stringNumber);
private:
void loadStrFile(const Common::String &fileName);
void parseStrFile(const Common::String &fileName);
void parseTag(const Common::String &tagString, uint lineNumber);
static Common::String readWideLine(Common::SeekableReadStream &stream);
};
} // End of namespace ZVision

View File

@ -28,10 +28,6 @@
#include "zvision/graphics/truetype_font.h"
#include "zvision/zvision.h"
namespace Graphics {
class FontManager;
}
namespace ZVision {
class ZVision;