From 43611724441e880b7283ae195d40f5e63aa6affd Mon Sep 17 00:00:00 2001 From: Einar Johan Trøan Sømåen Date: Mon, 30 Jul 2012 19:41:44 +0200 Subject: WINTERMUTE: Redraw ONLY the indicator when saving/loading. --- engines/wintermute/base/gfx/base_renderer.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'engines/wintermute/base/gfx/base_renderer.cpp') diff --git a/engines/wintermute/base/gfx/base_renderer.cpp b/engines/wintermute/base/gfx/base_renderer.cpp index cd065f3436..5d81c44c25 100644 --- a/engines/wintermute/base/gfx/base_renderer.cpp +++ b/engines/wintermute/base/gfx/base_renderer.cpp @@ -52,6 +52,7 @@ BaseRenderer::BaseRenderer(BaseGame *inGame) : BaseClass(inGame) { _indicatorY = -1; _indicatorWidth = -1; _indicatorHeight = 8; + _indicatorWidthDrawn = 0; _loadImageName = ""; _saveImageName = ""; @@ -103,7 +104,10 @@ void BaseRenderer::setIndicator(int width, int height, int x, int y, uint32 colo } void BaseRenderer::setIndicatorVal(int value) { + bool redisplay = (_indicatorProgress != value); _indicatorProgress = value; + if (redisplay) + displayIndicator(); } void BaseRenderer::setLoadingScreen(const char *filename, int x, int y) { @@ -153,6 +157,7 @@ void BaseRenderer::initSaveLoad(bool isSaving, bool quickSave) { void BaseRenderer::endSaveLoad() { _loadInProgress = false; _indicatorDisplay = false; + _indicatorWidthDrawn = 0; delete _saveLoadImage; _saveLoadImage = NULL; @@ -338,7 +343,7 @@ void BaseRenderer::addRectToList(BaseActiveRect *rect) { ////////////////////////////////////////////////////////////////////////// bool BaseRenderer::displayIndicator() { - if (!_indicatorDisplay) { + if (!_indicatorDisplay || !_indicatorProgress) { return STATUS_OK; } if (_saveLoadImage) { @@ -355,11 +360,16 @@ bool BaseRenderer::displayIndicator() { return STATUS_OK; } setupLines(); + int curWidth = (int)(_indicatorWidth * (float)((float)_indicatorProgress / 100.0f)); for (int i = 0; i < _indicatorHeight; i++) { - drawLine(_indicatorX, _indicatorY + i, _indicatorX + (int)(_indicatorWidth * (float)((float)_indicatorProgress / 100.0f)), _indicatorY + i, _indicatorColor); + drawLine(_indicatorX, _indicatorY + i, _indicatorX + curWidth, _indicatorY + i, _indicatorColor); } setup2D(); + _indicatorWidthDrawn = curWidth; + if (_indicatorWidthDrawn) { + indicatorFlip(); + } return STATUS_OK; } -- cgit v1.2.3