diff options
| -rw-r--r-- | scumm/gfx.cpp | 45 | 
1 files changed, 21 insertions, 24 deletions
| diff --git a/scumm/gfx.cpp b/scumm/gfx.cpp index 6246806a17..d4171f386e 100644 --- a/scumm/gfx.cpp +++ b/scumm/gfx.cpp @@ -29,6 +29,7 @@  namespace Scumm {  static void blit(byte *dst, int dstPitch, const byte *src, int srcPitch, int w, int h); +static void fill(byte *dst, int dstPitch, byte color, int w, int h);  struct StripTable {  	int offsets[160]; @@ -633,8 +634,8 @@ void ScummEngine::restoreBG(Common::Rect rect, byte backColor) {  	screenBuf = vs->getPixels(rect.left, rect.top); -	int height = rect.height(); -	int width = rect.width(); +	const int height = rect.height(); +	const int width = rect.width();  	if (!height)  		return; @@ -642,18 +643,11 @@ void ScummEngine::restoreBG(Common::Rect rect, byte backColor) {  	if (vs->hasTwoBuffers && _currentRoom != 0 && isLightOn()) {  		blit(screenBuf, vs->pitch, vs->getBackPixels(rect.left, rect.top), vs->pitch, width, height);  		if (vs->number == kMainVirtScreen && _charset->_hasMask) { -			const int mask_width = rect.width();  			byte *mask = (byte *)gdi._textSurface.pixels + gdi._textSurface.pitch * rect.top + rect.left; -			while (height--) { -				memset(mask, CHARSET_MASK_TRANSPARENCY, mask_width); -				mask += gdi._textSurface.pitch; -			} +			fill(mask, gdi._textSurface.pitch, CHARSET_MASK_TRANSPARENCY, width, height);  		}  	} else { -		while (height--) { -			memset(screenBuf, backColor, width); -			screenBuf += vs->pitch; -		} +		fill(screenBuf, vs->pitch, backColor, width, height);  	}  } @@ -717,10 +711,6 @@ static void blit(byte *dst, int dstPitch, const byte *src, int srcPitch, int w,  	assert(src != NULL);  	assert(dst != NULL); -	// TODO: This function currently always assumes that srcPitch == dstPitch -	// and furthermore that both equal _screenWidth. -	//if (w==_screenWidth) -  	if (w == srcPitch && w == dstPitch) {  		memcpy(dst, src, w*h);  	} else { @@ -732,6 +722,20 @@ static void blit(byte *dst, int dstPitch, const byte *src, int srcPitch, int w,  	}  } +static void fill(byte *dst, int dstPitch, byte color, int w, int h) { +	assert(h > 0); +	assert(dst != NULL); +	 +	if (w == dstPitch) { +		memset(dst, color, w*h); +	} else { +		do { +			memset(dst, color, w); +			dst += dstPitch; +		} while (--h); +	} +} +  void ScummEngine::drawBox(int x, int y, int x2, int y2, int color) {  	int width, height;  	VirtScreen *vs; @@ -786,10 +790,7 @@ void ScummEngine::drawBox(int x, int y, int x2, int y2, int color) {  		bgbuff = vs->getBackPixels(x, y);  		blit(backbuff, vs->pitch, bgbuff, vs->pitch, width, height);  	} else { -		while (height--) { -			memset(backbuff, color, width); -			backbuff += vs->pitch; -		} +		fill(backbuff, vs->pitch, color, width, height);  	}  } @@ -803,11 +804,7 @@ void ScummEngine::drawFlashlight() {  										_flashlight.y, _flashlight.y + _flashlight.h, USAGE_BIT_DIRTY);  		if (_flashlight.buffer) { -			i = _flashlight.h; -			do { -				memset(_flashlight.buffer, 0, _flashlight.w); -				_flashlight.buffer += vs->pitch; -			} while (--i); +			fill(_flashlight.buffer, vs->pitch, 0, _flashlight.w, _flashlight.h);  		}  		_flashlight.isDrawn = false;  	} | 
