aboutsummaryrefslogtreecommitdiff
path: root/graphics
diff options
context:
space:
mode:
Diffstat (limited to 'graphics')
-rw-r--r--graphics/macgui/mactext.cpp75
-rw-r--r--graphics/macgui/mactext.h21
-rw-r--r--graphics/macgui/mactextwindow.cpp35
-rw-r--r--graphics/macgui/mactextwindow.h14
4 files changed, 99 insertions, 46 deletions
diff --git a/graphics/macgui/mactext.cpp b/graphics/macgui/mactext.cpp
index 366a79ba33..fa2b92f2fc 100644
--- a/graphics/macgui/mactext.cpp
+++ b/graphics/macgui/mactext.cpp
@@ -52,7 +52,7 @@ MacText::~MacText() {
delete _macFont;
}
-MacText::MacText(Common::String s, MacWindowManager *wm, const MacFont *macFont, int fgcolor, int bgcolor, int maxWidth, TextAlign textAlignment, int interlinear) {
+MacText::MacText(Common::U32String s, MacWindowManager *wm, const MacFont *macFont, int fgcolor, int bgcolor, int maxWidth, TextAlign textAlignment, int interlinear) {
_str = s;
_wm = wm;
_macFont = macFont;
@@ -83,6 +83,37 @@ MacText::MacText(Common::String s, MacWindowManager *wm, const MacFont *macFont,
_fullRefresh = true;
}
+MacText::MacText(const Common::String &s, MacWindowManager *wm, const MacFont *macFont, int fgcolor, int bgcolor, int maxWidth, TextAlign textAlignment, int interlinear) {
+ _str = Common::U32String(s);
+ _wm = wm;
+ _macFont = macFont;
+ _fgcolor = fgcolor;
+ _bgcolor = bgcolor;
+ _maxWidth = maxWidth;
+ _textMaxWidth = 0;
+ _textMaxHeight = 0;
+ _surface = nullptr;
+ _textAlignment = textAlignment;
+ _interLinear = interlinear;
+
+ if (macFont) {
+ _defaultFormatting.font = wm->_fontMan->getFont(*macFont);
+ } else {
+ _defaultFormatting.font = NULL;
+ }
+
+ _defaultFormatting.wm = wm;
+
+ _currentFormatting = _defaultFormatting;
+
+ if (!_str.empty())
+ splitString(_str);
+
+ recalcDims();
+
+ _fullRefresh = true;
+}
+
void MacText::setMaxWidth(int maxWidth) {
_maxWidth = maxWidth;
@@ -97,10 +128,10 @@ void MacText::setMaxWidth(int maxWidth) {
}
}
-void MacText::splitString(Common::String &str) {
- const char *s = str.c_str();
+void MacText::splitString(Common::U32String &str) {
+ const Common::U32String::value_type *s = str.c_str();
- Common::String tmp;
+ Common::U32String tmp;
bool prevCR = false;
if (_textLines.empty()) {
@@ -161,7 +192,7 @@ void MacText::splitString(Common::String &str) {
}
if (*s == '\r' || *s == '\n' || nextChunk) {
- Common::Array<Common::String> text;
+ Common::Array<Common::U32String> text;
if (!nextChunk)
previousFormatting = _currentFormatting;
@@ -213,7 +244,7 @@ void MacText::splitString(Common::String &str) {
}
if (tmp.size()) {
- Common::Array<Common::String> text;
+ Common::Array<Common::U32String> text;
int w = getLineWidth(curLine, true);
_currentFormatting.getFont()->wordWrapText(tmp, _maxWidth, text, w);
@@ -369,8 +400,8 @@ void MacText::draw(ManagedSurface *g, int x, int y, int w, int h, int xoff, int
}
// Count newline characters in String
-uint getNewlinesInString(const Common::String &str) {
- Common::String::const_iterator p = str.begin();
+uint getNewlinesInString(const Common::U32String &str) {
+ Common::U32String::const_iterator p = str.begin();
uint newLines = 0;
while (*p) {
if (*p == '\n')
@@ -380,7 +411,7 @@ uint getNewlinesInString(const Common::String &str) {
return newLines;
}
-void MacText::appendText(Common::String str, int fontId, int fontSize, int fontSlant, bool skipAdd) {
+void MacText::appendText(Common::U32String str, int fontId, int fontSize, int fontSlant, bool skipAdd) {
uint oldLen = _textLines.size();
MacFontRun fontRun = MacFontRun(_wm, fontId, fontSlant, fontSize, 0, 0, 0);
@@ -398,7 +429,11 @@ void MacText::appendText(Common::String str, int fontId, int fontSize, int fontS
render(oldLen - 1, _textLines.size());
}
-void MacText::appendTextDefault(Common::String str, bool skipAdd) {
+void MacText::appendText(const Common::String &str, int fontId, int fontSize, int fontSlant, bool skipAdd) {
+ appendText(Common::U32String(str), fontId, fontSize, fontSlant, skipAdd);
+}
+
+void MacText::appendTextDefault(Common::U32String str, bool skipAdd) {
uint oldLen = _textLines.size();
_currentFormatting = _defaultFormatting;
@@ -414,6 +449,10 @@ void MacText::appendTextDefault(Common::String str, bool skipAdd) {
render(oldLen - 1, _textLines.size());
}
+void MacText::appendTextDefault(const Common::String &str, bool skipAdd) {
+ appendTextDefault(Common::U32String(str), skipAdd);
+}
+
void MacText::clearText() {
_textLines.clear();
_str.clear();
@@ -424,7 +463,7 @@ void MacText::clearText() {
recalcDims();
}
-void MacText::replaceLastLine(Common::String str) {
+void MacText::replaceLastLine(Common::U32String str) {
int oldLen = MAX<int>(0, _textLines.size() - 1);
// TODO: Recalc length, adapt to _textLines
@@ -485,7 +524,7 @@ void MacText::getRowCol(int x, int y, int *sx, int *sy, int *row, int *col) {
if (chunk == _textLines[*row].chunks.size())
chunk--;
- Common::String str = _textLines[*row].chunks[chunk].text;
+ Common::U32String str = _textLines[*row].chunks[chunk].text;
*col = mcol;
@@ -501,8 +540,8 @@ void MacText::getRowCol(int x, int y, int *sx, int *sy, int *row, int *col) {
}
}
-Common::String MacText::getTextChunk(int startRow, int startCol, int endRow, int endCol, bool formatted, bool newlines) {
- Common::String res;
+Common::U32String MacText::getTextChunk(int startRow, int startCol, int endRow, int endCol, bool formatted, bool newlines) {
+ Common::U32String res;
startRow = CLIP(startRow, 0, (int)_textLines.size() - 1);
endRow = CLIP(endRow, 0, (int)_textLines.size() - 1);
@@ -517,12 +556,12 @@ Common::String MacText::getTextChunk(int startRow, int startCol, int endRow, int
if (endCol >= (int)_textLines[i].chunks[chunk].text.size())
res += _textLines[i].chunks[chunk].text;
else
- res += Common::String(_textLines[i].chunks[chunk].text.c_str(), endCol);
+ res += Common::U32String(_textLines[i].chunks[chunk].text.c_str(), endCol);
} else if ((int)_textLines[i].chunks[chunk].text.size() > startCol) {
if (formatted)
res += _textLines[i].chunks[chunk].toString();
- res += Common::String(_textLines[i].chunks[chunk].text.c_str() + startCol, endCol - startCol);
+ res += Common::U32String(_textLines[i].chunks[chunk].text.c_str() + startCol, endCol - startCol);
}
startCol -= _textLines[i].chunks[chunk].text.size();
@@ -542,7 +581,7 @@ Common::String MacText::getTextChunk(int startRow, int startCol, int endRow, int
if (formatted)
res += _textLines[i].chunks[chunk].toString();
- res += Common::String(_textLines[i].chunks[chunk].text.c_str() + startCol);
+ res += Common::U32String(_textLines[i].chunks[chunk].text.c_str() + startCol);
}
startCol -= _textLines[i].chunks[chunk].text.size();
@@ -559,7 +598,7 @@ Common::String MacText::getTextChunk(int startRow, int startCol, int endRow, int
if (endCol >= (int)_textLines[i].chunks[chunk].text.size())
res += _textLines[i].chunks[chunk].text;
else
- res += Common::String(_textLines[i].chunks[chunk].text.c_str(), endCol);
+ res += Common::U32String(_textLines[i].chunks[chunk].text.c_str(), endCol);
endCol -= _textLines[i].chunks[chunk].text.size();
diff --git a/graphics/macgui/mactext.h b/graphics/macgui/mactext.h
index 7cb115902e..e66a394c0d 100644
--- a/graphics/macgui/mactext.h
+++ b/graphics/macgui/mactext.h
@@ -32,7 +32,7 @@ namespace Graphics {
class MacWindowManager;
struct MacFontRun {
- Common::String text;
+ Common::U32String text;
uint16 fontId;
byte textSlant;
@@ -88,7 +88,9 @@ struct MacTextLine {
class MacText {
public:
- MacText(Common::String s, MacWindowManager *wm, const MacFont *font, int fgcolor, int bgcolor,
+ MacText(Common::U32String s, MacWindowManager *wm, const MacFont *font, int fgcolor, int bgcolor,
+ int maxWidth = -1, TextAlign textAlignment = kTextAlignLeft, int interlinear = 0);
+ MacText(const Common::String &s, MacWindowManager *wm, const MacFont *font, int fgcolor, int bgcolor,
int maxWidth = -1, TextAlign textAlignment = kTextAlignLeft, int interlinear = 0);
// 0 pixels between the lines by default
~MacText();
@@ -102,10 +104,13 @@ public:
}
void draw(ManagedSurface *g, int x, int y, int w, int h, int xoff, int yoff);
- void appendText(Common::String str, int fontId = kMacFontChicago, int fontSize = 12, int fontSlant = kMacFontRegular, bool skipAdd = false);
- void appendTextDefault(Common::String str, bool skipAdd = false);
+ void appendText(Common::U32String str, int fontId = kMacFontChicago, int fontSize = 12, int fontSlant = kMacFontRegular, bool skipAdd = false);
+ void appendText(const Common::String &str, int fontId = kMacFontChicago, int fontSize = 12, int fontSlant = kMacFontRegular, bool skipAdd = false);
+ void appendTextDefault(Common::U32String str, bool skipAdd = false);
+ void appendTextDefault(const Common::String &str, bool skipAdd = false);
void clearText();
- void replaceLastLine(Common::String str);
+ void replaceLastLine(Common::U32String str);
+ void replaceLastLine(const Common::String &str);
void removeLastLine();
int getLineCount() { return _textLines.size(); }
int getTextHeight() { return _textMaxHeight; }
@@ -116,10 +121,10 @@ public:
void getRowCol(int x, int y, int *sx, int *sy, int *row, int *col);
- Common::String getTextChunk(int startRow, int startCol, int endRow, int endCol, bool formatted = false, bool newlines = true);
+ Common::U32String getTextChunk(int startRow, int startCol, int endRow, int endCol, bool formatted = false, bool newlines = true);
private:
- void splitString(Common::String &s);
+ void splitString(Common::U32String &s);
void render(int from, int to);
void recalcDims();
void reallocSurface();
@@ -128,7 +133,7 @@ private:
private:
MacWindowManager *_wm;
- Common::String _str;
+ Common::U32String _str;
const MacFont *_macFont;
int _fgcolor, _bgcolor;
diff --git a/graphics/macgui/mactextwindow.cpp b/graphics/macgui/mactextwindow.cpp
index ebd3dd2377..12af27a908 100644
--- a/graphics/macgui/mactextwindow.cpp
+++ b/graphics/macgui/mactextwindow.cpp
@@ -90,7 +90,7 @@ void MacTextWindow::resize(int w, int h) {
_mactext->setMaxWidth(_maxWidth);
}
-void MacTextWindow::appendText(Common::String str, const MacFont *macFont, bool skipAdd) {
+void MacTextWindow::appendText(Common::U32String str, const MacFont *macFont, bool skipAdd) {
_mactext->appendText(str, macFont->getId(), macFont->getSize(), macFont->getSlant(), skipAdd);
_contentIsDirty = true;
@@ -102,6 +102,10 @@ void MacTextWindow::appendText(Common::String str, const MacFont *macFont, bool
}
}
+void MacTextWindow::appendText(const Common::String &str, const MacFont *macFont, bool skipAdd) {
+ appendText(Common::U32String(str), macFont, skipAdd);
+}
+
void MacTextWindow::clearText() {
_mactext->clearText();
@@ -223,9 +227,9 @@ void MacTextWindow::drawSelection() {
}
}
-Common::String MacTextWindow::getSelection(bool formatted, bool newlines) {
+Common::U32String MacTextWindow::getSelection(bool formatted, bool newlines) {
if (_selectedText.endY == -1)
- return Common::String("");
+ return Common::U32String("");
SelectedText s = _selectedText;
@@ -249,9 +253,9 @@ bool MacTextWindow::isCutAllowed() {
return false;
}
-Common::String MacTextWindow::cutSelection() {
+Common::U32String MacTextWindow::cutSelection() {
if (!isCutAllowed())
- return Common::String("");
+ return Common::U32String("");
SelectedText s = _selectedText;
@@ -260,18 +264,17 @@ Common::String MacTextWindow::cutSelection() {
SWAP(s.startCol, s.endCol);
}
- Common::String selection = _mactext->getTextChunk(s.startRow, s.startCol, s.endRow, s.endCol, false, false);
+ Common::U32String selection = _mactext->getTextChunk(s.startRow, s.startCol, s.endRow, s.endCol, false, false);
- const char *selStart = strstr(_inputText.c_str(), selection.c_str());
+ uint32 selPos = _inputText.find(selection);
- if (!selStart) {
- warning("Cannot find substring '%s' in '%s'", selection.c_str(), _inputText.c_str());
+ if (selPos == Common::U32String::npos) {
+ //warning("Cannot find substring '%s' in '%s'", selection.c_str(), _inputText.c_str()); // Needed encode method
- return Common::String("");
+ return Common::U32String("");
}
- int selPos = selStart - _inputText.c_str();
- Common::String newInput = Common::String(_inputText.c_str(), selPos) + Common::String(_inputText.c_str() + selPos + selection.size());
+ Common::U32String newInput = Common::U32String(_inputText.c_str(), selPos) + Common::U32String(_inputText.c_str() + selPos + selection.size());
clearSelection();
clearInput();
@@ -459,7 +462,7 @@ void MacTextWindow::undrawInput() {
void MacTextWindow::drawInput() {
undrawInput();
- Common::Array<Common::String> text;
+ Common::Array<Common::U32String> text;
// Now recalc new text height
_fontRef->wordWrapText(_inputText, _maxWidth, text);
@@ -482,12 +485,16 @@ void MacTextWindow::clearInput() {
_inputText.clear();
}
-void MacTextWindow::appendInput(Common::String str) {
+void MacTextWindow::appendInput(Common::U32String str) {
_inputText += str;
drawInput();
}
+void MacTextWindow::appendInput(const Common::String &str) {
+ appendInput(Common::U32String(str));
+}
+
//////////////////
// Cursor stuff
static void cursorTimerHandler(void *refCon) {
diff --git a/graphics/macgui/mactextwindow.h b/graphics/macgui/mactextwindow.h
index c236f47e47..9ff7e7fbd1 100644
--- a/graphics/macgui/mactextwindow.h
+++ b/graphics/macgui/mactextwindow.h
@@ -60,7 +60,8 @@ public:
void setTextWindowFont(const MacFont *macFont);
const MacFont *getTextWindowFont();
- void appendText(Common::String str, const MacFont *macFont, bool skipAdd = false);
+ void appendText(Common::U32String str, const MacFont *macFont, bool skipAdd = false);
+ void appendText(const Common::String &str, const MacFont *macFont, bool skipAdd = false);
void clearText();
void setEditable(bool editable) { _editable = editable; }
@@ -68,13 +69,14 @@ public:
void undrawCursor();
- const Common::String getInput() { return _inputText; }
+ const Common::U32String getInput() { return _inputText; }
void clearInput();
- void appendInput(Common::String str);
+ void appendInput(Common::U32String str);
+ void appendInput(const Common::String &str);
- Common::String getSelection(bool formatted = false, bool newlines = true);
+ Common::U32String getSelection(bool formatted = false, bool newlines = true);
void clearSelection();
- Common::String cutSelection();
+ Common::U32String cutSelection();
const SelectedText *getSelectedText() { return &_selectedText; }
private:
@@ -113,7 +115,7 @@ private:
SelectedText _selectedText;
int _maxWidth;
- Common::String _inputText;
+ Common::U32String _inputText;
uint _inputTextHeight;
bool _inputIsDirty;