diff options
Diffstat (limited to 'engines/sci/graphics/screen.cpp')
-rw-r--r-- | engines/sci/graphics/screen.cpp | 52 |
1 files changed, 39 insertions, 13 deletions
diff --git a/engines/sci/graphics/screen.cpp b/engines/sci/graphics/screen.cpp index 6eabc7c9f0..5a96a3167f 100644 --- a/engines/sci/graphics/screen.cpp +++ b/engines/sci/graphics/screen.cpp @@ -122,9 +122,9 @@ GfxScreen::GfxScreen(ResourceManager *resMan) : _resMan(resMan) { // Initialize the actual screen - if (_resMan->isSci11Mac() && getSciVersion() == SCI_VERSION_1_1) { - // For SCI1.1 Mac, we need to expand the screen to accommodate for - // the icon bar. Of course, both KQ6 and QFG1 VGA differ in size. + if (g_sci->hasMacIconBar()) { + // For SCI1.1 Mac games with the custom icon bar, we need to expand the screen + // to accommodate for the icon bar. Of course, both KQ6 and QFG1 VGA differ in size. if (g_sci->getGameId() == GID_KQ6) initGraphics(_displayWidth, _displayHeight + 26, _displayWidth > 320); else if (g_sci->getGameId() == GID_QFG1VGA) @@ -616,6 +616,11 @@ void GfxScreen::dither(bool addToFlag) { } } +// Force a color combination into memorial +void GfxScreen::ditherForceMemorial(byte color) { + _unditherMemorial[color] = 256; +} + void GfxScreen::debugUnditherSetState(bool flag) { _unditherState = flag; } @@ -649,20 +654,41 @@ void GfxScreen::debugShowMap(int mapNo) { copyToScreen(); } -void GfxScreen::scale2x(const byte *src, byte *dst, int16 srcWidth, int16 srcHeight) { +void GfxScreen::scale2x(const byte *src, byte *dst, int16 srcWidth, int16 srcHeight, byte bytesPerPixel) { + assert(bytesPerPixel == 1 || bytesPerPixel == 2); const int newWidth = srcWidth * 2; + const int pitch = newWidth * bytesPerPixel; const byte *srcPtr = src; - for (int y = 0; y < srcHeight; y++) { - for (int x = 0; x < srcWidth; x++) { - const byte color = *srcPtr++; - dst[0] = color; - dst[1] = color; - dst[newWidth] = color; - dst[newWidth + 1] = color; - dst += 2; + if (bytesPerPixel == 1) { + for (int y = 0; y < srcHeight; y++) { + for (int x = 0; x < srcWidth; x++) { + const byte color = *srcPtr++; + dst[0] = color; + dst[1] = color; + dst[newWidth] = color; + dst[newWidth + 1] = color; + dst += 2; + } + dst += newWidth; + } + } else if (bytesPerPixel == 2) { + for (int y = 0; y < srcHeight; y++) { + for (int x = 0; x < srcWidth; x++) { + const byte color = *srcPtr++; + const byte color2 = *srcPtr++; + dst[0] = color; + dst[1] = color2; + dst[2] = color; + dst[3] = color2; + dst[pitch] = color; + dst[pitch + 1] = color2; + dst[pitch + 2] = color; + dst[pitch + 3] = color2; + dst += 4; + } + dst += pitch; } - dst += newWidth; } } |