[Scummvm-cvs-logs] SF.net SVN: scummvm:[48659] scummvm/trunk/engines/sci

m_kiewitz at users.sourceforge.net m_kiewitz at users.sourceforge.net
Thu Apr 15 18:40:38 CEST 2010


Revision: 48659
          http://scummvm.svn.sourceforge.net/scummvm/?rev=48659&view=rev
Author:   m_kiewitz
Date:     2010-04-15 16:40:37 +0000 (Thu, 15 Apr 2010)

Log Message:
-----------
SCI: split menu/item strings when displaying instead of when initializing - makes on-the-fly menu language changes possible (used by multilingual SCI01 games)

Modified Paths:
--------------
    scummvm/trunk/engines/sci/engine/kmenu.cpp
    scummvm/trunk/engines/sci/graphics/menu.cpp
    scummvm/trunk/engines/sci/graphics/menu.h

Modified: scummvm/trunk/engines/sci/engine/kmenu.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/kmenu.cpp	2010-04-15 02:21:26 UTC (rev 48658)
+++ scummvm/trunk/engines/sci/engine/kmenu.cpp	2010-04-15 16:40:37 UTC (rev 48659)
@@ -34,7 +34,7 @@
 namespace Sci {
 
 reg_t kAddMenu(EngineState *s, int argc, reg_t *argv) {
-	Common::String title = g_sci->strSplit(s->_segMan->getString(argv[0]).c_str());
+	Common::String title = s->_segMan->getString(argv[0]);
 	Common::String content = s->_segMan->getString(argv[1]);
 
 	g_sci->_gfxMenu->kernelAddEntry(title, content, argv[1]);

Modified: scummvm/trunk/engines/sci/graphics/menu.cpp
===================================================================
--- scummvm/trunk/engines/sci/graphics/menu.cpp	2010-04-15 02:21:26 UTC (rev 48658)
+++ scummvm/trunk/engines/sci/graphics/menu.cpp	2010-04-15 16:40:37 UTC (rev 48659)
@@ -190,7 +190,9 @@
 		if (separatorCount == tempPos - beginPos) {
 			itemEntry->separatorLine = true;
 		} else {
-			itemEntry->text = g_sci->strSplit(Common::String(content.c_str() + beginPos, tempPos - beginPos).c_str());
+			// we don't strSplit here, because multilingual SCI01 support language switching on the fly, so we have to do
+			//  this everytime the menu is called
+			itemEntry->text = Common::String(content.c_str() + beginPos, tempPos - beginPos);
 
 			// LSL6 uses "Ctrl-" prefix string instead of ^ like all the other games do
 			tempPtr = itemEntry->text.c_str();
@@ -260,7 +262,7 @@
 		itemEntry->saidVmPtr = value;
 		break;
 	case SCI_MENU_ATTRIBUTE_TEXT:
-		itemEntry->text = g_sci->strSplit(_segMan->getString(value).c_str());
+		itemEntry->text = _segMan->getString(value);
 		itemEntry->textVmPtr = value;
 		// We assume here that no script ever creates a separatorLine dynamically
 		break;
@@ -317,7 +319,7 @@
 	listIterator = _list.begin();
 	while (listIterator != listEnd) {
 		listEntry = *listIterator;
-		_text16->Draw_String(listEntry->text.c_str());
+		_text16->Draw_String(listEntry->textSplit.c_str());
 
 		listIterator++;
 	}
@@ -336,7 +338,8 @@
 	menuIterator = _list.begin();
 	while (menuIterator != menuEnd) {
 		menuEntry = *menuIterator;
-		_text16->StringWidth(menuEntry->text.c_str(), 0, menuEntry->textWidth, dummyHeight);
+		menuEntry->textSplit = g_sci->strSplit(menuEntry->text.c_str());
+		_text16->StringWidth(menuEntry->textSplit.c_str(), 0, menuEntry->textWidth, dummyHeight);
 
 		menuIterator++;
 	}
@@ -344,7 +347,9 @@
 	itemIterator = _itemList.begin();
 	while (itemIterator != itemEnd) {
 		itemEntry = *itemIterator;
-		_text16->StringWidth(itemEntry->text.c_str(), 0, itemEntry->textWidth, dummyHeight);
+		// Split the text now for multilingual SCI01 games
+		itemEntry->textSplit = g_sci->strSplit(itemEntry->text.c_str());
+		_text16->StringWidth(itemEntry->textSplit.c_str(), 0, itemEntry->textWidth, dummyHeight);
 		_text16->StringWidth(itemEntry->textRightAligned.c_str(), 0, itemEntry->textRightAlignedWidth, dummyHeight);
 
 		itemIterator++;
@@ -548,7 +553,7 @@
 			if (!listItemEntry->separatorLine) {
 				_ports->textGreyedOutput(listItemEntry->enabled ? false : true);
 				_ports->moveTo(_menuRect.left, topPos);
-				_text16->Draw_String(listItemEntry->text.c_str());
+				_text16->Draw_String(listItemEntry->textSplit.c_str());
 				_ports->moveTo(_menuRect.right - listItemEntry->textRightAlignedWidth - 5, topPos);
 				_text16->Draw_String(listItemEntry->textRightAligned.c_str());
 			} else {

Modified: scummvm/trunk/engines/sci/graphics/menu.h
===================================================================
--- scummvm/trunk/engines/sci/graphics/menu.h	2010-04-15 02:21:26 UTC (rev 48658)
+++ scummvm/trunk/engines/sci/graphics/menu.h	2010-04-15 16:40:37 UTC (rev 48659)
@@ -45,6 +45,7 @@
 struct GuiMenuEntry {
 	uint16 id;
 	Common::String text;
+	Common::String textSplit;
 	int16 textWidth;
 
 	GuiMenuEntry(uint16 curId)
@@ -62,6 +63,7 @@
 	bool separatorLine;
 	reg_t saidVmPtr;
 	Common::String text;
+	Common::String textSplit;
 	reg_t textVmPtr;
 	int16 textWidth;
 	Common::String textRightAligned;


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list