TOLTECS: More changes to wrapGuiText

This commit is contained in:
Benjamin Haisch 2008-09-16 11:18:09 +00:00 committed by Willem Jan Palenstijn
parent 3c47914648
commit ca49ded9b3
2 changed files with 21 additions and 19 deletions

View file

@ -628,9 +628,9 @@ void Screen::updateVerbLine(int16 slotIndex, int16 slotOffset) {
}
GuiTextWrapState wrapState;
int16 len;
wrapState.width = 0;
wrapState.destString = wrapState.textBuffer;
wrapState.len = 0;
wrapState.len1 = 0;
wrapState.len2 = 0;
@ -640,39 +640,39 @@ void Screen::updateVerbLine(int16 slotIndex, int16 slotOffset) {
for (int16 i = 0; i <= _verbLineNum; i++) {
wrapState.sourceString = _vm->_script->getSlotData(_verbLineItems[i].slotIndex) + _verbLineItems[i].slotOffset;
wrapGuiText(_fontResIndexArray[0], _verbLineWidth, wrapState);
wrapState.len1 += wrapState.len;
len = wrapGuiText(_fontResIndexArray[0], _verbLineWidth, wrapState);
wrapState.len1 += len;
}
if (_verbLineCount != 1) {
int16 charWidth;
if (*wrapState.sourceString < 0xF0) {
while (*wrapState.sourceString > 0x20 && *wrapState.sourceString < 0xF0 && wrapState.len > 0) {
while (*wrapState.sourceString > 0x20 && *wrapState.sourceString < 0xF0 && len > 0) {
byte ch = *wrapState.sourceString--;
wrapState.len1--;
wrapState.len--;
len--;
charWidth = font.getCharWidth(ch) + font.getSpacing() - 1;
wrapState.width -= charWidth;
}
wrapState.width += charWidth;
wrapState.sourceString++;
wrapState.len1 -= wrapState.len;
wrapState.len2 = wrapState.len + 1;
wrapState.len1 -= len;
wrapState.len2 = len + 1;
drawGuiText(_verbLineX - 1 - (wrapState.width / 2), y, 0xF9, 0xFF, _fontResIndexArray[0], wrapState);
wrapState.destString = wrapState.textBuffer;
wrapState.width = 0;
wrapGuiText(_fontResIndexArray[0], _verbLineWidth, wrapState);
wrapState.len1 += wrapState.len;
len = wrapGuiText(_fontResIndexArray[0], _verbLineWidth, wrapState);
wrapState.len1 += len;
y += 9;
}
y += 9;
}
wrapState.len1 -= wrapState.len;
wrapState.len2 = wrapState.len;
wrapState.len1 -= len;
wrapState.len2 = len;
drawGuiText(_verbLineX - 1 - (wrapState.width / 2), y, 0xF9, 0xFF, _fontResIndexArray[0], wrapState);
@ -868,9 +868,8 @@ void Screen::drawGuiTextMulti(byte *textData) {
} else {
wrapState.destString = wrapState.textBuffer;
wrapState.width = 0;
wrapGuiText(_fontResIndexArray[1], 640, wrapState);
wrapState.len1 = 0;
wrapState.len2 = wrapState.len;
wrapState.len2 = wrapGuiText(_fontResIndexArray[1], 640, wrapState);
drawGuiText(x - wrapState.width / 2, y, _fontColor1, _fontColor2, _fontResIndexArray[1], wrapState);
}
@ -878,11 +877,11 @@ void Screen::drawGuiTextMulti(byte *textData) {
}
void Screen::wrapGuiText(uint fontResIndex, int maxWidth, GuiTextWrapState &wrapState) {
int16 Screen::wrapGuiText(uint fontResIndex, int maxWidth, GuiTextWrapState &wrapState) {
Font font(_vm->_res->load(fontResIndex));
wrapState.len = 0;
int16 len = 0;
while (*wrapState.sourceString >= 0x20 && *wrapState.sourceString < 0xF0) {
byte ch = *wrapState.sourceString;
byte charWidth;
@ -892,10 +891,13 @@ void Screen::wrapGuiText(uint fontResIndex, int maxWidth, GuiTextWrapState &wrap
charWidth = font.getCharWidth(ch) + font.getSpacing() - 1;
if (wrapState.width + charWidth >= maxWidth)
break;
wrapState.len++;
len++;
wrapState.width += charWidth;
*wrapState.destString++ = *wrapState.sourceString++;
}
return len;
}
void Screen::drawGuiText(int16 x, int16 y, byte fontColor1, byte fontColor2, uint fontResIndex, GuiTextWrapState &wrapState) {