diff options
author | Max Horn | 2009-02-24 21:43:07 +0000 |
---|---|---|
committer | Max Horn | 2009-02-24 21:43:07 +0000 |
commit | c102e30e735c52b110e5f31ac0eba90727d6c405 (patch) | |
tree | ded3aa2674079ef46f371c43119792b42337b07c /backends | |
parent | 6eef86ef4ce95e1b6b904acf2c94d29128812681 (diff) | |
download | scummvm-rg350-c102e30e735c52b110e5f31ac0eba90727d6c405.tar.gz scummvm-rg350-c102e30e735c52b110e5f31ac0eba90727d6c405.tar.bz2 scummvm-rg350-c102e30e735c52b110e5f31ac0eba90727d6c405.zip |
SDL: Tweak the way the mouse is drawn/erased, so that it is not erase and drawn again if nothing changed
svn-id: r38861
Diffstat (limited to 'backends')
-rw-r--r-- | backends/platform/sdl/graphics.cpp | 15 | ||||
-rw-r--r-- | backends/platform/sdl/sdl.cpp | 2 | ||||
-rw-r--r-- | backends/platform/sdl/sdl.h | 2 |
3 files changed, 11 insertions, 8 deletions
diff --git a/backends/platform/sdl/graphics.cpp b/backends/platform/sdl/graphics.cpp index d498c8f62a..cd8b91a8e2 100644 --- a/backends/platform/sdl/graphics.cpp +++ b/backends/platform/sdl/graphics.cpp @@ -652,6 +652,11 @@ void OSystem_SDL::internUpdateScreen() { scale1 = 1; } + // Add the area covered by the mouse cursor to the list of dirty rects if + // we have to redraw the mouse. + if (_mouseNeedsRedraw) + undrawMouse(); + // Force a full redraw if requested if (_forceFull) { _numDirtyRects = 1; @@ -659,8 +664,7 @@ void OSystem_SDL::internUpdateScreen() { _dirtyRectList[0].y = 0; _dirtyRectList[0].w = width; _dirtyRectList[0].h = height; - } else - undrawMouse(); + } // Only draw anything if necessary if (_numDirtyRects > 0) { @@ -736,14 +740,11 @@ void OSystem_SDL::internUpdateScreen() { #endif // Finally, blit all our changes to the screen SDL_UpdateRects(_hwscreen, _numDirtyRects, _dirtyRectList); - } else { - drawMouse(); - if (_numDirtyRects) - SDL_UpdateRects(_hwscreen, _numDirtyRects, _dirtyRectList); } _numDirtyRects = 0; _forceFull = false; + _mouseNeedsRedraw = false; } bool OSystem_SDL::saveScreenshot(const char *filename) { @@ -1281,6 +1282,7 @@ bool OSystem_SDL::showMouse(bool visible) { void OSystem_SDL::setMousePos(int x, int y) { if (x != _mouseCurState.x || y != _mouseCurState.y) { + _mouseNeedsRedraw = true; _mouseCurState.x = x; _mouseCurState.y = y; } @@ -1313,6 +1315,7 @@ void OSystem_SDL::setMouseCursor(const byte *buf, uint w, uint h, int hotspot_x, if (w == 0 || h == 0) return; + _mouseNeedsRedraw = true; _mouseCurState.hotX = hotspot_x; _mouseCurState.hotY = hotspot_y; diff --git a/backends/platform/sdl/sdl.cpp b/backends/platform/sdl/sdl.cpp index 38f7203aa5..d1bf1dfc0b 100644 --- a/backends/platform/sdl/sdl.cpp +++ b/backends/platform/sdl/sdl.cpp @@ -205,7 +205,7 @@ OSystem_SDL::OSystem_SDL() _overlayscreen(0), _tmpscreen2(0), _samplesPerSec(0), _cdrom(0), _scalerProc(0), _modeChanged(false), _screenChangeCount(0), _dirtyChecksums(0), - _mouseVisible(false), _mouseDrawn(false), _mouseData(0), _mouseSurface(0), + _mouseVisible(false), _mouseNeedsRedraw(false), _mouseData(0), _mouseSurface(0), _mouseOrigSurface(0), _cursorTargetScale(1), _cursorPaletteDisabled(true), _joystick(0), _currentShakePos(0), _newShakePos(0), diff --git a/backends/platform/sdl/sdl.h b/backends/platform/sdl/sdl.h index d657a964ba..507e56400d 100644 --- a/backends/platform/sdl/sdl.h +++ b/backends/platform/sdl/sdl.h @@ -341,7 +341,7 @@ protected: // mouse KbdMouse _km; bool _mouseVisible; - bool _mouseDrawn; + bool _mouseNeedsRedraw; byte *_mouseData; SDL_Rect _mouseBackup; MousePos _mouseCurState; |