mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-04 01:46:42 +00:00
ZVISION: Delete unused code
This commit is contained in:
parent
e0cb8f52f7
commit
f4fe0b008f
@ -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;
|
||||
|
@ -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:
|
||||
|
@ -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];
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -28,10 +28,6 @@
|
||||
#include "zvision/graphics/truetype_font.h"
|
||||
#include "zvision/zvision.h"
|
||||
|
||||
namespace Graphics {
|
||||
class FontManager;
|
||||
}
|
||||
|
||||
namespace ZVision {
|
||||
|
||||
class ZVision;
|
||||
|
Loading…
x
Reference in New Issue
Block a user