[Scummvm-cvs-logs] scummvm master -> d4c1162d7029ce171fc210724faff6ba1000c6f8

dreammaster dreammaster at scummvm.org
Mon Aug 10 01:45:36 CEST 2015


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
d4c1162d70 SHERLOCK: RT: Fix for entering savegame in original saves dialog


Commit: d4c1162d7029ce171fc210724faff6ba1000c6f8
    https://github.com/scummvm/scummvm/commit/d4c1162d7029ce171fc210724faff6ba1000c6f8
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2015-08-09T19:44:40-04:00

Commit Message:
SHERLOCK: RT: Fix for entering savegame in original saves dialog

Changed paths:
    engines/sherlock/tattoo/widget_files.cpp



diff --git a/engines/sherlock/tattoo/widget_files.cpp b/engines/sherlock/tattoo/widget_files.cpp
index cf83bb3..606c821 100644
--- a/engines/sherlock/tattoo/widget_files.cpp
+++ b/engines/sherlock/tattoo/widget_files.cpp
@@ -247,10 +247,12 @@ void WidgetFiles::handleEvents() {
 bool WidgetFiles::getFilename() {
 	Events &events = *_vm->_events;
 	TattooScene &scene = *(TattooScene *)_vm->_scene;
+	Screen &screen = *_vm->_screen;
 	Talk &talk = *_vm->_talk;
 	int index = 0;
 	int done = 0;
-	bool flag = false;
+	bool blinkFlag = false;
+	int blinkCountdown = 0;
 	int width;
 	int cursorColor = 192;
 	byte color, textColor;
@@ -260,22 +262,19 @@ bool WidgetFiles::getFilename() {
 	Common::Point pt(_surface.stringWidth("00.") + _surface.widestChar() + 5,
 		_surface.fontHeight() + 14 + (_selector - _savegameIndex) * (_surface.fontHeight() + 1));
 	
-	Common::String str = Common::String::format("%d.", _selector + 1);
-	_surface.writeString(str, Common::Point(_surface.widestChar(), pt.y), COMMAND_HIGHLIGHTED);
+	Common::String numStr = Common::String::format("%d.", _selector + 1);
+	_surface.writeString(numStr, Common::Point(_surface.widestChar(), pt.y), COMMAND_HIGHLIGHTED);
 
-	Common::String saveFile = _savegames[_selector];	
-	Common::String filename = _savegames[_selector];
-	_savegames[_selector] = "";
+	Common::String filename = _savegames[_selector];	
 
 	if (isSlotEmpty(_selector)) {
 		index = 0;
 		_surface.fillRect(Common::Rect(pt.x, pt.y, _bounds.right - BUTTON_SIZE - 9, pt.y + _surface.fontHeight() - 1), TRANSPARENCY);
+		filename = "";
 	} else {
-		index = saveFile.size();
-		_surface.writeString(saveFile, pt, COMMAND_HIGHLIGHTED);
-		pt.x = _surface.stringWidth("00.") + _surface.stringWidth(saveFile) + _surface.widestChar() + 5;
-		
-		//filename[index] = 32;
+		index = filename.size();
+		_surface.writeString(filename, pt, COMMAND_HIGHLIGHTED);
+		pt.x = _surface.stringWidth("00.") + _surface.stringWidth(filename) + _surface.widestChar() + 5;
 	}
 
 	do {
@@ -284,13 +283,11 @@ bool WidgetFiles::getFilename() {
 		if (talk._talkToAbort)
 			return false;
 
-		if (filename[index]) {
-			str = Common::String::format("%c", filename[index]);
-			width = _surface.charWidth(filename[index]);
-		} else {
-			width = 7;
-		}
+		char currentChar = (index == (int)filename.size()) ? ' ' : filename[index];
+		Common::String charString = Common::String::format("%c", currentChar);
+		width = screen.charWidth(currentChar);
 
+		// Wait for keypress
 		while (!events.kbHit()) {
 			events.pollEventsAndWait();
 			events.setButtonState();
@@ -300,19 +297,21 @@ bool WidgetFiles::getFilename() {
 			if (talk._talkToAbort)
 				return false;
 
-			flag = !flag;
-			if (flag) {
-				textColor = 236;
-				color = cursorColor;
-			} else {
-				textColor = COMMAND_HIGHLIGHTED;
-				color = TRANSPARENCY;
-			}
-
-			_surface.fillRect(Common::Rect(pt.x, pt.y, pt.x + width, pt.y + _surface.fontHeight()), color);
-			if (filename[index])
-				_surface.writeString(str, pt, textColor);
+			if (--blinkCountdown <= 0) {
+				blinkCountdown = 3;
+				blinkFlag = !blinkFlag;
+				if (blinkFlag) {
+					textColor = 236;
+					color = cursorColor;
+				} else {
+					textColor = COMMAND_HIGHLIGHTED;
+					color = TRANSPARENCY;
+				}
 
+				_surface.fillRect(Common::Rect(pt.x, pt.y, pt.x + width, pt.y + _surface.fontHeight()), color);
+				if (currentChar != ' ')
+					_surface.writeString(charString, pt, textColor);
+			}
 			if (_vm->shouldQuit())
 				return false;
 		}
@@ -320,14 +319,14 @@ bool WidgetFiles::getFilename() {
 		Common::KeyState keyState = events.getKey();
 		if (keyState.keycode == Common::KEYCODE_BACKSPACE && index > 0) {
 			pt.x -= _surface.charWidth(filename[index - 1]);
-			
+			--index;
+
 			if (insert) {
 				filename.deleteChar(index);
 			} else {
-				filename.setChar(' ', index - 1);
+				filename.setChar(' ', index);
 			}
 
-			--index;
 			_surface.fillRect(Common::Rect(pt.x, pt.y, _surface.w() - BUTTON_SIZE - 9, pt.y + _surface.fontHeight() - 1), TRANSPARENCY);
 			_surface.writeString(filename.c_str() + index, pt, COMMAND_HIGHLIGHTED);
 
@@ -336,8 +335,8 @@ bool WidgetFiles::getFilename() {
 				|| (keyState.keycode == Common::KEYCODE_HOME && index > 0)
 				|| (keyState.keycode == Common::KEYCODE_END)) {
 			_surface.fillRect(Common::Rect(pt.x, pt.y, pt.x + width, pt.y + _surface.fontHeight()), TRANSPARENCY);
-			if (filename[index])
-				_surface.writeString(str, pt, COMMAND_HIGHLIGHTED);
+			if (currentChar)
+				_surface.writeString(charString, pt, COMMAND_HIGHLIGHTED);
 
 			switch (keyState.keycode) {
 			case Common::KEYCODE_LEFT:
@@ -385,25 +384,22 @@ bool WidgetFiles::getFilename() {
 			done = 1;
 
 		} else if (keyState.keycode == Common::KEYCODE_ESCAPE) {
-			filename = saveFile;
 			_selector = -1;
 			render(RENDER_NAMES_AND_SCROLLBAR);
 			done = -1;
 		}
 
-		if ((keyState.keycode >= ' ') && ((keyState.keycode <= 168) || (keyState.keycode == 225)) && (index < 50)) {
-			if (pt.x + _surface.charWidth(keyState.keycode) < _surface.w() - BUTTON_SIZE - 20) {
-				if (insert) {
-					int temp = strlen(filename.c_str() + index) - 1;
-					if (temp)
-						filename.deleteChar(index);
-				}
+		if ((keyState.ascii >= ' ') && ((keyState.ascii <= 168) || (keyState.ascii == 225)) && (index < 50)) {
+			if (pt.x + _surface.charWidth(keyState.ascii) < _surface.w() - BUTTON_SIZE - 20) {
+				if (insert)
+					filename.insertChar(keyState.ascii, index);
+				else
+					filename.setChar(keyState.ascii, index);
 
-				filename.insertChar(keyState.ascii, index);
 				_surface.fillRect(Common::Rect(pt.x, pt.y, _bounds.width() - BUTTON_SIZE - 9, 
 					pt.y + _surface.fontHeight() - 1), TRANSPARENCY);
 				_surface.writeString(filename.c_str() + index, pt, COMMAND_HIGHLIGHTED);
-				pt.x += _surface.charWidth(keyState.keycode);
+				pt.x += _surface.charWidth(keyState.ascii);
 				++index;
 			}
 		}
@@ -415,7 +411,7 @@ bool WidgetFiles::getFilename() {
 		return false;
 
 	if (done == 1)
-		_savegames[_selector] = saveFile;
+		_savegames[_selector] = filename;
 
 	return done == 1;
 }






More information about the Scummvm-git-logs mailing list