aboutsummaryrefslogtreecommitdiff
path: root/engines/gob/draw_v2.cpp
diff options
context:
space:
mode:
authorSven Hesse2009-07-09 02:54:10 +0000
committerSven Hesse2009-07-09 02:54:10 +0000
commit3823ae285f92c0b39d141b6132a4187b1e83b6be (patch)
tree1ad3b512f6653ecd5cd7ee80ddc26e11eb9d7c56 /engines/gob/draw_v2.cpp
parentc7eedb573ac3ac1bd4c8f8e64d75ee8ee931bc50 (diff)
downloadscummvm-rg350-3823ae285f92c0b39d141b6132a4187b1e83b6be.tar.gz
scummvm-rg350-3823ae285f92c0b39d141b6132a4187b1e83b6be.tar.bz2
scummvm-rg350-3823ae285f92c0b39d141b6132a4187b1e83b6be.zip
Giving Font its own real class
svn-id: r42277
Diffstat (limited to 'engines/gob/draw_v2.cpp')
-rw-r--r--engines/gob/draw_v2.cpp47
1 files changed, 22 insertions, 25 deletions
diff --git a/engines/gob/draw_v2.cpp b/engines/gob/draw_v2.cpp
index a0be23516c..8fe70589a7 100644
--- a/engines/gob/draw_v2.cpp
+++ b/engines/gob/draw_v2.cpp
@@ -371,14 +371,14 @@ void Draw_v2::printTotText(int16 id) {
if ((((*ptr >= 1) && (*ptr <= 7)) || (*ptr == 10)) && (strPos != 0)) {
str[MAX(strPos, strPos2)] = 0;
strPosBak = strPos;
- width = strlen(str) * _fonts[fontIndex]->itemWidth;
+ width = strlen(str) * _fonts[fontIndex]->getCharWidth();
adjustCoords(1, &width, 0);
if (colCmd & 0x0F) {
rectLeft = offX - 2;
rectTop = offY - 2;
rectRight = offX + width + 1;
- rectBottom = _fonts[fontIndex]->itemHeight;
+ rectBottom = _fonts[fontIndex]->getCharHeight();
adjustCoords(1, &rectBottom, 0);
rectBottom += offY + 1;
adjustCoords(0, &rectLeft, &rectTop);
@@ -404,9 +404,9 @@ void Draw_v2::printTotText(int16 id) {
if (_needAdjust != 2) {
if ((_destSpriteX >= destX) && (_destSpriteY >= destY) &&
- (((_fonts[_fontIndex]->itemHeight / 2) + _destSpriteY - 1) <= spriteBottom)) {
+ (((_fonts[_fontIndex]->getCharHeight() / 2) + _destSpriteY - 1) <= spriteBottom)) {
while (((_destSpriteX + width - 1) > spriteRight) && (width > 0)) {
- width -= _fonts[_fontIndex]->itemWidth / 2;
+ width -= _fonts[_fontIndex]->getCharWidth() / 2;
str[strlen(str) - 1] = '\0';
}
spriteOperation(DRAW_PRINTTEXT);
@@ -419,8 +419,8 @@ void Draw_v2::printTotText(int16 id) {
if (mask[strPos] == '\0')
continue;
- rectLeft = _fonts[fontIndex]->itemWidth;
- rectTop = _fonts[fontIndex]->itemHeight;
+ rectLeft = _fonts[fontIndex]->getCharWidth();
+ rectTop = _fonts[fontIndex]->getCharHeight();
adjustCoords(1, &rectLeft, &rectTop);
_destSpriteX = strPos * rectLeft + offX;
_spriteRight = _destSpriteX + rectLeft - 1;
@@ -430,7 +430,7 @@ void Draw_v2::printTotText(int16 id) {
}
}
- rectLeft = _fonts[_fontIndex]->itemWidth;
+ rectLeft = _fonts[_fontIndex]->getCharWidth();
adjustCoords(1, &rectLeft, 0);
offX += strPosBak * rectLeft;
strPos = 0;
@@ -598,8 +598,6 @@ void Draw_v2::spriteOperation(int16 operation) {
int16 left;
int16 ratio;
Resource *resource;
- // Always assigned to -1 in Game::loadTotFile()
- int16 someHandle = -1;
deltaVeto = (operation & 0x10) != 0;
operation &= 0x0F;
@@ -761,8 +759,13 @@ void Draw_v2::spriteOperation(int16 operation) {
left = _destSpriteX;
if ((_fontIndex >= 4) || (_fontToSprite[_fontIndex].sprite == -1)) {
+ Font *font = _fonts[_fontIndex];
+ if (!font) {
+ warning("Trying to print \"%s\" with undefined font %d", _textToPrint, _fontIndex);
+ break;
+ }
- if (!_fonts[_fontIndex]->charWidths) {
+ if (font->isMonospaced()) {
if (((int8) _textToPrint[0]) == -1) {
_vm->validateLanguage();
@@ -770,26 +773,20 @@ void Draw_v2::spriteOperation(int16 operation) {
len = *dataBuf++;
for (int i = 0; i < len; i++, dataBuf += 2) {
_vm->_video->drawLetter(READ_LE_UINT16(dataBuf), _destSpriteX,
- _destSpriteY, _fonts[_fontIndex], _transparency, _frontColor,
+ _destSpriteY, *font, _transparency, _frontColor,
_backColor, *_spritesArray[_destSurface]);
}
} else {
drawString(_textToPrint, _destSpriteX, _destSpriteY, _frontColor,
- _backColor, _transparency, *_spritesArray[_destSurface],
- _fonts[_fontIndex]);
- _destSpriteX += len * _fonts[_fontIndex]->itemWidth;
+ _backColor, _transparency, *_spritesArray[_destSurface], *font);
+ _destSpriteX += len * font->getCharWidth();
}
} else {
for (int i = 0; i < len; i++) {
- if ((someHandle < 0) || (_textToPrint[i] != ' ')) {
- _vm->_video->drawLetter(_textToPrint[i], _destSpriteX,
- _destSpriteY, _fonts[_fontIndex], _transparency,
- _frontColor, _backColor, *_spritesArray[_destSurface]);
- _destSpriteX += *(_fonts[_fontIndex]->charWidths +
- (_textToPrint[i] - _fonts[_fontIndex]->startItem));
- }
- else
- _destSpriteX += _fonts[_fontIndex]->itemWidth;
+ _vm->_video->drawLetter(_textToPrint[i], _destSpriteX,
+ _destSpriteY, *font, _transparency,
+ _frontColor, _backColor, *_spritesArray[_destSurface]);
+ _destSpriteX += font->getCharWidth(_textToPrint[i]);
}
}
@@ -813,7 +810,7 @@ void Draw_v2::spriteOperation(int16 operation) {
}
dirtiedRect(_destSurface, left, _destSpriteY,
- _destSpriteX - 1, _destSpriteY + _fonts[_fontIndex]->itemHeight - 1);
+ _destSpriteX - 1, _destSpriteY + _fonts[_fontIndex]->getCharHeight() - 1);
break;
case DRAW_DRAWBAR:
@@ -884,7 +881,7 @@ void Draw_v2::spriteOperation(int16 operation) {
_sourceSurface = sourceSurface;
if (operation == DRAW_PRINTTEXT) {
- len = _fonts[_fontIndex]->itemWidth;
+ len = _fonts[_fontIndex]->getCharWidth();
adjustCoords(1, &len, 0);
_destSpriteX += len * strlen(_textToPrint);
}