diff options
author | Peter Kohaut | 2019-04-13 01:03:48 +0200 |
---|---|---|
committer | Peter Kohaut | 2019-04-17 22:51:18 +0200 |
commit | e86ee33999f33ad66bb7c018b4d4b7604b48badb (patch) | |
tree | fbc44cf5d597c7aaed1ee230bad4e5918ee92b4b /engines/bladerunner/font.cpp | |
parent | 955bf0c6694cca49e5031ec9866b343cc86f596d (diff) | |
download | scummvm-rg350-e86ee33999f33ad66bb7c018b4d4b7604b48badb.tar.gz scummvm-rg350-e86ee33999f33ad66bb7c018b4d4b7604b48badb.tar.bz2 scummvm-rg350-e86ee33999f33ad66bb7c018b4d4b7604b48badb.zip |
BLADERUNNER: Abstraction from 555 pixel format
Removing hardcoded 555 pixel format to support Android
Diffstat (limited to 'engines/bladerunner/font.cpp')
-rw-r--r-- | engines/bladerunner/font.cpp | 35 |
1 files changed, 14 insertions, 21 deletions
diff --git a/engines/bladerunner/font.cpp b/engines/bladerunner/font.cpp index 688bed1c45..6fa90e633d 100644 --- a/engines/bladerunner/font.cpp +++ b/engines/bladerunner/font.cpp @@ -44,6 +44,7 @@ bool Font::open(const Common::String &fileName, int screenWidth, int screenHeigh _screenHeight = screenHeight; _spacing1 = spacing1; _spacing2 = spacing2; + _defaultColor = color; _color = color; Common::ScopedPtr<Common::SeekableReadStream> stream(_vm->getResourceStream(fileName)); @@ -69,9 +70,11 @@ bool Font::open(const Common::String &fileName, int screenWidth, int screenHeigh _characters[i].height = stream->readUint32LE(); _characters[i].dataOffset = stream->readUint32LE(); } + for (int i = 0; i < _dataSize; i++) { _data[i] = stream->readUint16LE(); } + return true; } @@ -90,10 +93,7 @@ void Font::setSpacing(int spacing1, int spacing2) { } void Font::setColor(uint16 color) { - if (_data && _color != color) { - replaceColor(_color, color); - _color = color; - } + _color = color; } void Font::draw(const Common::String &text, Graphics::Surface &surface, int x, int y) const { @@ -114,9 +114,7 @@ void Font::draw(const Common::String &text, Graphics::Surface &surface, int x, i } void Font::drawColor(const Common::String &text, Graphics::Surface &surface, int x, int y, uint16 color) { - if (_color != color) { - setColor(color); - } + setColor(color); draw(text, surface, x, y); } @@ -159,23 +157,12 @@ void Font::reset() { _screenHeight = 0; _spacing1 = 0; _spacing2 = 0; - _color = 0x7FFF; + _color = screenPixelForrmat().RGBToColor(255, 255, 255); _intersperse = 0; memset(_characters, 0, 256 * sizeof(Character)); } -void Font::replaceColor(uint16 oldColor, uint16 newColor) { - if (!_data || !_dataSize) { - return; - } - for (int i = 0; i < _dataSize; i++) { - if (_data[i] == oldColor) { - _data[i] = newColor; - } - } -} - void Font::drawCharacter(const uint8 character, Graphics::Surface &surface, int x, int y) const { uint8 characterIndex = character + 1; if (x < 0 || x >= _screenWidth || y < 0 || y >= _screenHeight || !_data || characterIndex >= _characterCount) { @@ -208,8 +195,14 @@ void Font::drawCharacter(const uint8 character, Graphics::Surface &surface, int int currentX = x; int endX = width + x - 1; while (currentX <= endX && currentX < _screenWidth) { - if ((*srcPtr & 0x8000) == 0) { - *dstPtr = *srcPtr; + uint8 a, r, g, b; + gameDataPixelFormat().colorToARGB(*srcPtr, a, r, g, b); + if (!a) { + if (_color == _defaultColor) { + *dstPtr = surface.format.RGBToColor(r, g, b); + } else { + *dstPtr = _color; + } } dstPtr++; srcPtr++; |