diff options
author | Paul Gilbert | 2016-10-02 18:01:52 -0400 |
---|---|---|
committer | Paul Gilbert | 2016-10-02 18:01:52 -0400 |
commit | 78a3ac6c5daf1b091813c6cebce4b1d7894cee86 (patch) | |
tree | 962197c690734c65623b5243bed38259c7cafda0 | |
parent | dd2ee74cc099e1cf7b6a179886581188b5dfbca3 (diff) | |
download | scummvm-rg350-78a3ac6c5daf1b091813c6cebce4b1d7894cee86.tar.gz scummvm-rg350-78a3ac6c5daf1b091813c6cebce4b1d7894cee86.tar.bz2 scummvm-rg350-78a3ac6c5daf1b091813c6cebce4b1d7894cee86.zip |
TITANIC: Fixes to transBlitRect
-rw-r--r-- | engines/titanic/support/video_surface.cpp | 31 |
1 files changed, 14 insertions, 17 deletions
diff --git a/engines/titanic/support/video_surface.cpp b/engines/titanic/support/video_surface.cpp index 8e2fb40a27..7021eac1b7 100644 --- a/engines/titanic/support/video_surface.cpp +++ b/engines/titanic/support/video_surface.cpp @@ -184,16 +184,17 @@ void CVideoSurface::blitRect2(const Rect &srcRect, const Rect &destRect, CVideoS } void CVideoSurface::transBlitRect(const Rect &srcRect, const Rect &destRect, CVideoSurface *src, bool flipFlag) { + assert(srcRect.width() == destRect.width() && srcRect.height() == destRect.height()); + if (lock()) { if (src->lock()) { Graphics::ManagedSurface *srcSurface = src->_rawSurface; Graphics::ManagedSurface *destSurface = _rawSurface; Graphics::Surface destArea = destSurface->getSubArea(destRect); - const uint16 *srcPtr = flipFlag ? - (const uint16 *)srcSurface->getBasePtr(srcRect.left, srcRect.top) : - (const uint16 *)srcSurface->getBasePtr(srcRect.left, srcRect.bottom); - uint16 *destPtr = (uint16 *)destSurface->getBasePtr(destArea.w, destArea.h - 1); + const uint16 *srcPtr = (const uint16 *)srcSurface->getBasePtr( + srcRect.left, flipFlag ? srcRect.top : srcRect.bottom - 1); + uint16 *destPtr = (uint16 *)destSurface->getBasePtr(0, destArea.h - 1); bool is16Bit = src->getPixelDepth() == 2; bool isAlpha = src->_transparencyMode == TRANS_ALPHA0 || src->_transparencyMode == TRANS_ALPHA255; @@ -204,27 +205,23 @@ void CVideoSurface::transBlitRect(const Rect &srcRect, const Rect &destRect, CVi else transSurface.setRow(src->getHeight() - srcRect.bottom); - for (int srcY = srcRect.top; srcY < srcRect.bottom; ++srcY) { + for (int yCtr = 0; yCtr < srcRect.height(); ++yCtr) { // Prepare for copying the line const uint16 *lineSrcP = srcPtr; uint16 *lineDestP = destPtr; - transSurface.setRow(srcY); + transSurface.setRow(flipFlag ? srcRect.top + yCtr : srcRect.bottom - yCtr - 1); transSurface.setCol(srcRect.left); - int srcWidth = srcRect.width(); - while (srcWidth > 0) { - int move = transSurface.moveX(); + for (int srcX = srcRect.left; srcX < srcRect.right; ++srcX) { + transSurface.moveX(); - if (move <= 1) { - if (!transSurface.isPixelTransparent2()) { - copyPixel(lineDestP, lineSrcP, transSurface.getPixel() >> 3, - is16Bit, isAlpha); - } + if (!transSurface.isPixelTransparent2()) { + copyPixel(lineDestP, lineSrcP, transSurface.getPixel() >> 3, + is16Bit, isAlpha); } - lineSrcP += move; - lineDestP += move; - srcWidth -= move; + ++lineSrcP; + ++lineDestP; } // Move to next line |