diff options
| author | Torbjörn Andersson | 2006-05-27 12:55:28 +0000 | 
|---|---|---|
| committer | Torbjörn Andersson | 2006-05-27 12:55:28 +0000 | 
| commit | 1da221279cac046e6aadf05d75fbdf21b643cfab (patch) | |
| tree | 1bcfb1dc8c38ad6920330d3ffa01cd6a0e2b7b77 | |
| parent | 1b2485f4af2010f262bd4f6e149a8c2d96b893cc (diff) | |
| download | scummvm-rg350-1da221279cac046e6aadf05d75fbdf21b643cfab.tar.gz scummvm-rg350-1da221279cac046e6aadf05d75fbdf21b643cfab.tar.bz2 scummvm-rg350-1da221279cac046e6aadf05d75fbdf21b643cfab.zip  | |
The dirty rect produced by drawMouse() is updated without going through any
scaling or aspect-ratio correction, so it has to be added using real surface
coordinates. So I had to re-introduce the extra parameter to addDirtyRect().
svn-id: r22681
| -rw-r--r-- | backends/sdl/graphics.cpp | 23 | ||||
| -rw-r--r-- | backends/sdl/sdl-common.h | 2 | 
2 files changed, 15 insertions, 10 deletions
diff --git a/backends/sdl/graphics.cpp b/backends/sdl/graphics.cpp index e61e673ea2..05bf1bc0e0 100644 --- a/backends/sdl/graphics.cpp +++ b/backends/sdl/graphics.cpp @@ -854,7 +854,7 @@ bool OSystem_SDL::grabRawScreen(Graphics::Surface *surf) {  	return true;  } -void OSystem_SDL::addDirtyRect(int x, int y, int w, int h) { +void OSystem_SDL::addDirtyRect(int x, int y, int w, int h, bool realCoordinates) {  	if (_forceFull)  		return; @@ -865,7 +865,7 @@ void OSystem_SDL::addDirtyRect(int x, int y, int w, int h) {  	int height, width; -	if (!_overlayVisible) { +	if (!_overlayVisible && !realCoordinates) {  		width = _screenWidth;  		height = _screenHeight;  	} else { @@ -875,7 +875,7 @@ void OSystem_SDL::addDirtyRect(int x, int y, int w, int h) {  	// Extend the dirty region by 1 pixel for scalers  	// that "smear" the screen, e.g. 2xSAI -	if (_modeFlags & DF_UPDATE_EXPAND_1_PIXEL) { +	if ((_modeFlags & DF_UPDATE_EXPAND_1_PIXEL) && !realCoordinates) {  		x--;  		y--;  		w+=2; @@ -902,7 +902,7 @@ void OSystem_SDL::addDirtyRect(int x, int y, int w, int h) {  	}  #ifndef DISABLE_SCALERS -	if (_adjustAspectRatio && !_overlayVisible) { +	if (_adjustAspectRatio && !_overlayVisible && !realCoordinates) {  		makeRectStretchable(x, y, w, h);  	}  #endif @@ -1479,7 +1479,7 @@ void OSystem_SDL::drawMouse() {  		_mouseBackup.x = _mouseBackup.y = _mouseBackup.w = _mouseBackup.h = 0;    		return;  	} -   +  	SDL_Rect dst;  	int scale;  	int width, height; @@ -1502,15 +1502,14 @@ void OSystem_SDL::drawMouse() {  		dst.h = _mouseCurState.hH;  	} -	// Note that addDirtyRect() will perform any necessary clipping +	// The mouse is undrawn using virtual coordinates, i.e. they may be +	// scaled and aspect-ratio corrected.  	_mouseBackup.x = dst.x;  	_mouseBackup.y = dst.y;  	_mouseBackup.w = dst.w;  	_mouseBackup.h = dst.h; -	addDirtyRect(_mouseBackup.x, _mouseBackup.y, _mouseBackup.w, _mouseBackup.h); -  	// We draw the pre-scaled cursor image, so now we need to adjust for  	// scaling, shake position and aspect ratio correction manually. @@ -1526,10 +1525,16 @@ void OSystem_SDL::drawMouse() {  	dst.w = _mouseCurState.hW;  	dst.h = _mouseCurState.hH; -	// Note that SDL_BlitSurface() will perform any clipping necessary +	// Note that SDL_BlitSurface() and addDirtyRect() will both perform any +	// clipping necessary  	if (SDL_BlitSurface(_mouseSurface, NULL, _hwscreen, &dst) != 0)  		error("SDL_BlitSurface failed: %s", SDL_GetError()); + +	// The screen will be updated using real surface coordinates, i.e. +	// they will not be scaled or aspect-ratio corrected. + +	addDirtyRect(dst.x, dst.y, dst.w, dst.h, true);  }  #pragma mark - diff --git a/backends/sdl/sdl-common.h b/backends/sdl/sdl-common.h index 91d1169169..12a93faa1c 100644 --- a/backends/sdl/sdl-common.h +++ b/backends/sdl/sdl-common.h @@ -339,7 +339,7 @@ protected:  	void addDirtyRgnAuto(const byte *buf);  	void makeChecksums(const byte *buf); -	virtual void addDirtyRect(int x, int y, int w, int h); // overloaded by CE backend +	virtual void addDirtyRect(int x, int y, int w, int h, bool realCoordinates = false); // overloaded by CE backend  	virtual void drawMouse(); // overloaded by CE backend  	virtual void undrawMouse(); // overloaded by CE backend (FIXME)  | 
