[Scummvm-git-logs] scummvm master -> dfaadb176385761503906bdc90a1916c6c7e628e

sev- sev at scummvm.org
Fri Aug 4 22:05:30 CEST 2017


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

Summary:
4897f6618b GRAPHICS: MACGUI: Pass default formatting to MacText
77932d5838 GRAPHICS: MACGUI: Mark content as dirty when text is changed
fe8ef60e08 GRAPHICS: MACGUI: Added more debug output to MacText
2e458671f6 GRAPHICS: MACGUI: Fix copy/paste bug in MacText
e236db8c3f GRAPHICS: MACGUI: Fixed appendText() in MacGui: formatting was not passed
cb48575c91 WAGE: Switched console rendering to MacTextWindow
a95899c1b6 GRAPHICS: MACGUI: Fix formatting of the first added text in MacText
61eb58186c GRAPHICS: MACGUI: Cleanup
bc8d059f38 GRAPHICS: MACGUI: Draw input on MacTextWindow redraw
737c2e4f88 WAGE: Now we need to render newline at the end of each text
94a57f534f WAGE: Make drawInput() a noop with MacTextWindow
f79a7d049b GRAPHICS: MACGUI: Fixed input line replacement in MacTextWindow
50078a808c GRAPHICS: MACGUI: Remove unused variable
b8f6ce5f00 WAGE: Remove redundant code
47d87e059d GRAPHICS: MACGUI: Fix input text displaying
b6970ade92 GRAPHICS: MACGUI: Remove redundant method from MacTextWindow
8609572b87 GRAPHICS: MACGUI: Correctly set MacTextWindow internal MacText size
d9e7cbaf96 GRAPHICS: MACGUI: Implement MacText resize
59d6b63b0f GRAPHICS: MACGUI: undraw input text before resizing MacTextWindow
4e044d7bd3 GRAPHICS: MACGUI: Do not add input line to the original MacText content
7333a68636 GRAPHICS: MACGUI: Fix bug in MacText with adding newlines
df36b2d7e0 GRAPHICS: MACGUI: Clear rendered text when lines are removed in MacText
ef1ea04b8c GRAPHICS: MACGUI: Fixed Enter key behavior in MacTextWindow
91615eb940 WAGE: Remove now redundant input processing
085eea68c3 GRAPHICS: MACGUI: Use proper dimensions for maxTextWidth in MacTextWindow
d4207b1e62 GRAPHICS: MACGUI: Implement autoscrolling in MacTextWindow
e316fb4b16 GRAPHICS: MACGUI: Do not pass to the upstream backspace key event in MacTextWindow
7b7117d5b8 GRAPHICS: MACGUI: Implement scrolling in MacTextWindow
04bb7c3e7a GRAPHICS: MACGUI: Reduce constant scope
20734108e3 GRAPHICS: MACGUI: Incapsulate MacWindow internals
c25a26d11c GRAPHICS: MACGUI: Event processing code for text selection in MacTextWindow
08293015e7 GRAPHICS: MACGUI: Implement MacText::getRowCol() method
db38a36369 WAGE: Remove redundant call
c5da0bece4 GRAPHICS: MACGUI: Remove redundant method from MacTextWindow
b3c8a8e129 GRAPHICS: MACGUI: Align and store MacText selection coordinates
145b7c9ec9 GRAPHICS: MACGUI: Initial selection drawing code to MacTextWindow
49ad5ff0cf GRAPHICS: MACGUI: Do not draw text selection at beginning of selection
0be9566a5a GRAPHICS: MACGUI: Simplified selection drawing code
71aadb5645 GRAPHICS: MACGUI: Correctly calculate row in MacText::getRowCol()
676b6082ab GRAPHICS: GUI: Mark beginning and end column of selection in MacTextWindow
aab404864e GRAPHICS: GUI: Fix flicker in selection
afb664df29 GRAPHICS: MACGUI: Made selection affecting the MacMenu
66f59aa893 GRAPHICS: MACGUI: Correctly display selection during scrolling
23649e8d87 GRAPHICS: MACGUI: Initial code for copying selection to clipboard
951244ac3f WAGE: Use MacTextWindow code for copying to clipboard
a5fa164b8e GRAPHICS: MACGUI: Bugfixes for selection copying in MacText
dd2123f8bf GRAPHICS: MACGUI: Added method to append input to MacTextWindow
532af0bb60 WAGE: Use MacTextWindow for Undo and Paste
b284895100 GRAPHICS: MACGUI: Leave text highlight after selection is made
55a241494e GRAPHICS: MACGUI: Improved text selection edge case behaviour
9e81f4de89 GRAPHICS: MACGUI: Better selection row detection
410efd9ff5 GRAPHICS: MACGUI: Fix detection for Cut command enablement
c7f83cd435 GRAPHICS: MACGUI: Fix end line text selection hihglight
1241ada63a GRAPHICS: MACGUI: Fixed bug with column detection in text selection
2aac665a2b GRAPHICS: MACGUI: Fix displaying two line text selections
dfaadb1763 GRAPHICS: MACGUI: Fix compilation


Commit: 4897f6618b6d4613f54a1ea323231454ece0c0c3
    https://github.com/scummvm/scummvm/commit/4897f6618b6d4613f54a1ea323231454ece0c0c3
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-08-04T21:54:19+02:00

Commit Message:
GRAPHICS: MACGUI: Pass default formatting to MacText

Changed paths:
    graphics/macgui/mactext.h
    graphics/macgui/mactextwindow.cpp


diff --git a/graphics/macgui/mactext.h b/graphics/macgui/mactext.h
index fdb90d4..8e25dcf 100644
--- a/graphics/macgui/mactext.h
+++ b/graphics/macgui/mactext.h
@@ -95,6 +95,10 @@ public:
 
 	int getInterLinear() { return _interLinear; }
 	void setInterLinear(int interLinear);
+	void setDefaultFormatting(uint16 fontId_, byte textSlant_, uint16 fontSize_,
+			uint16 palinfo1_, uint16 palinfo2_, uint16 palinfo3_) {
+				_defaultFormatting.setValues(_defaultFormatting.wm, fontId_, textSlant_, fontSize_, palinfo1_, palinfo2_, palinfo3_);
+			}
 
 	void draw(ManagedSurface *g, int x, int y, int w, int h, int xoff, int yoff);
 	void resizeAndFormatLines(uint numNewLines, MacFontRun * fontRun);
diff --git a/graphics/macgui/mactextwindow.cpp b/graphics/macgui/mactextwindow.cpp
index c8e3a93..182f1e0 100644
--- a/graphics/macgui/mactextwindow.cpp
+++ b/graphics/macgui/mactextwindow.cpp
@@ -100,6 +100,8 @@ void MacTextWindow::setTextWindowFont(const MacFont *font) {
 	_font = font;
 
 	_fontRef = _wm->_fontMan->getFont(*font);
+
+	_mactext->setDefaultFormatting(font->getId(), font->getSlant(), font->getSize(), 0, 0, 0);
 }
 
 const MacFont *MacTextWindow::getTextWindowFont() {


Commit: 77932d58388f2b68f74b540026f6b58b33b8fd86
    https://github.com/scummvm/scummvm/commit/77932d58388f2b68f74b540026f6b58b33b8fd86
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-08-04T21:54:19+02:00

Commit Message:
GRAPHICS: MACGUI: Mark content as dirty when text is changed

Changed paths:
    graphics/macgui/mactextwindow.cpp


diff --git a/graphics/macgui/mactextwindow.cpp b/graphics/macgui/mactextwindow.cpp
index 182f1e0..0d801ab 100644
--- a/graphics/macgui/mactextwindow.cpp
+++ b/graphics/macgui/mactextwindow.cpp
@@ -74,12 +74,16 @@ void MacTextWindow::drawText(ManagedSurface *g, int x, int y, int w, int h, int
 void MacTextWindow::appendText(Common::String str, const MacFont *macFont) {
 	_mactext->appendText(str, macFont->getId(), macFont->getSize(), macFont->getSlant());
 
+	_contentIsDirty = true;
+
 	updateCursorPos();
 }
 
 void MacTextWindow::clearText() {
 	_mactext->clearText();
 
+	_contentIsDirty = true;
+
 	updateCursorPos();
 }
 


Commit: fe8ef60e08446c725c4bdedcf152ab60f49c0f17
    https://github.com/scummvm/scummvm/commit/fe8ef60e08446c725c4bdedcf152ab60f49c0f17
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-08-04T21:54:19+02:00

Commit Message:
GRAPHICS: MACGUI: Added more debug output to MacText

Changed paths:
    graphics/macgui/mactext.cpp


diff --git a/graphics/macgui/mactext.cpp b/graphics/macgui/mactext.cpp
index ea02e9e..ad3a3a3 100644
--- a/graphics/macgui/mactext.cpp
+++ b/graphics/macgui/mactext.cpp
@@ -262,6 +262,8 @@ void MacText::render(int from, int to) {
 
 		// TODO: _textMaxWidth, when -1, was not rendering ANY text.
 		for (uint j = 0; j < _textLines[i].chunks.size(); j++) {
+			debug(5, "line %d[%d]/%d at %d,%d (%s)", i, j, xOffset, _textLines[i].chunks[j].fontId, _textLines[i].y, _textLines[i].chunks[j].text.c_str());
+
 			if (_textLines[i].chunks[j].text.empty())
 				continue;
 


Commit: 2e458671f6317a2a8195b9a328cf796add5d81fd
    https://github.com/scummvm/scummvm/commit/2e458671f6317a2a8195b9a328cf796add5d81fd
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-08-04T21:54:19+02:00

Commit Message:
GRAPHICS: MACGUI: Fix copy/paste bug in MacText

Changed paths:
    graphics/macgui/mactext.cpp


diff --git a/graphics/macgui/mactext.cpp b/graphics/macgui/mactext.cpp
index ad3a3a3..59e7d67 100644
--- a/graphics/macgui/mactext.cpp
+++ b/graphics/macgui/mactext.cpp
@@ -347,7 +347,7 @@ void MacText::draw(ManagedSurface *g, int x, int y, int w, int h, int xoff, int
 	}
 
 	g->blitFrom(*_surface, Common::Rect(MIN<int>(_surface->w, x), MIN<int>(_surface->h, y),
-									    MIN<int>(_surface->w, x + w), MIN<int>(_surface->h, y + w)),
+									    MIN<int>(_surface->w, x + w), MIN<int>(_surface->h, y + h)),
 										Common::Point(xoff, yoff));
 }
 


Commit: e236db8c3fc37bd9326f88e4fad7ac57454c70bf
    https://github.com/scummvm/scummvm/commit/e236db8c3fc37bd9326f88e4fad7ac57454c70bf
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-08-04T21:54:19+02:00

Commit Message:
GRAPHICS: MACGUI: Fixed appendText() in MacGui: formatting was not passed

Changed paths:
    graphics/macgui/mactext.cpp


diff --git a/graphics/macgui/mactext.cpp b/graphics/macgui/mactext.cpp
index 59e7d67..3c410f6 100644
--- a/graphics/macgui/mactext.cpp
+++ b/graphics/macgui/mactext.cpp
@@ -380,30 +380,34 @@ void MacText::appendText(Common::String str, int fontId = kMacFontChicago, int f
 
 	MacFontRun fontRun = MacFontRun(_wm, fontId, fontSlant, fontSize, 0, 0, 0);
 
+	_currentFormatting = fontRun;
+
 	_str += fontRun.toString();
 	_str += str;
 
-	resizeAndFormatLines(newLines, &fontRun);
+	//resizeAndFormatLines(newLines, &fontRun);
 
 	splitString(str);
 	recalcDims();
 
-	render(oldLen, _textLines.size());
+	render(oldLen - 1, _textLines.size());
 }
 
 void MacText::appendTextDefault(Common::String str) {
 	uint oldLen = _textLines.size();
 	uint newLines = 1 + getNewlinesInString(str);
 
+	_currentFormatting = _defaultFormatting;
+
 	_str += _defaultFormatting.toString();
 	_str += str;
 
-	resizeAndFormatLines(newLines, &_defaultFormatting);
+	//resizeAndFormatLines(newLines, &_defaultFormatting);
 
 	splitString(str);
 	recalcDims();
 
-	render(oldLen, _textLines.size());
+	render(oldLen - 1, _textLines.size());
 }
 
 void MacText::clearText() {


Commit: cb48575c91071421f89ea394094072995a6e2c9b
    https://github.com/scummvm/scummvm/commit/cb48575c91071421f89ea394094072995a6e2c9b
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-08-04T21:54:19+02:00

Commit Message:
WAGE: Switched console rendering to MacTextWindow

Changed paths:
    engines/wage/gui-console.cpp
    engines/wage/gui.cpp


diff --git a/engines/wage/gui-console.cpp b/engines/wage/gui-console.cpp
index c2f1753..e86e6ab 100644
--- a/engines/wage/gui-console.cpp
+++ b/engines/wage/gui-console.cpp
@@ -81,6 +81,9 @@ void Gui::clearOutput() {
 }
 
 void Gui::appendText(const char *s) {
+#ifdef USE_MACTEXTWINDOW
+	_consoleWindow->appendText(s, getConsoleMacFont());
+#else
 	Common::String str(s);
 	_consoleDirty = true;
 
@@ -107,9 +110,6 @@ void Gui::appendText(const char *s) {
 	// Process last/leftover line
 	_out.push_back(tmp);
 	flowText(tmp);
-
-#ifdef USE_MACTEXTWINDOW1
-	_consoleWindow->appendText(s, getConsoleMacFont());
 #endif // USE_MACTEXTWINDOW
 }
 
@@ -164,7 +164,7 @@ void Gui::reflowText() {
 	for (uint i = 0; i < _out.size(); i++)
 		flowText(_out[i]);
 
-#ifdef USE_MACTEXTWINDOW
+#ifdef USE_MACTEXTWINDOW1
 	// Append _lines content to MacTextWindow after it has
 	// been processed by flowText above
 	_consoleWindow->clearText();
diff --git a/engines/wage/gui.cpp b/engines/wage/gui.cpp
index 04419d5..e6e439b 100644
--- a/engines/wage/gui.cpp
+++ b/engines/wage/gui.cpp
@@ -231,7 +231,9 @@ void Gui::draw() {
 	}
 
 	drawScene();
+#ifndef USE_MACTEXTWINDOW
 	drawConsole();
+#endif
 
 	_wm.draw();
 


Commit: a95899c1b65c1558e4f23ab9cbdb315270a152c2
    https://github.com/scummvm/scummvm/commit/a95899c1b65c1558e4f23ab9cbdb315270a152c2
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-08-04T21:54:19+02:00

Commit Message:
GRAPHICS: MACGUI: Fix formatting of the first added text in MacText

Changed paths:
    graphics/macgui/mactext.cpp


diff --git a/graphics/macgui/mactext.cpp b/graphics/macgui/mactext.cpp
index 3c410f6..75d41e0 100644
--- a/graphics/macgui/mactext.cpp
+++ b/graphics/macgui/mactext.cpp
@@ -74,7 +74,8 @@ MacText::MacText(Common::String s, MacWindowManager *wm, const MacFont *macFont,
 
 	_currentFormatting = _defaultFormatting;
 
-	splitString(_str);
+	if (!_str.empty())
+		splitString(_str);
 
 	recalcDims();
 


Commit: 61eb58186c64364f39688ceb7c6122192ef5c36b
    https://github.com/scummvm/scummvm/commit/61eb58186c64364f39688ceb7c6122192ef5c36b
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-08-04T21:54:19+02:00

Commit Message:
GRAPHICS: MACGUI: Cleanup

Changed paths:
    graphics/macgui/mactext.cpp
    graphics/macgui/mactext.h


diff --git a/graphics/macgui/mactext.cpp b/graphics/macgui/mactext.cpp
index 75d41e0..d7fcb5c 100644
--- a/graphics/macgui/mactext.cpp
+++ b/graphics/macgui/mactext.cpp
@@ -364,17 +364,6 @@ uint getNewlinesInString(const Common::String &str) {
 	return newLines;
 }
 
-// Appends numNewLines new lines in _textLines, formatted with the MacFontRun specified
-void MacText::resizeAndFormatLines(uint numNewLines, MacFontRun *fontRun) {
-	uint oldLen = _textLines.size();
-
-	// Resize _textLines appropriately
-	for (uint curLine = 0; curLine < numNewLines; ++curLine) {
-		_textLines.resize(oldLen + numNewLines);
-		_textLines[oldLen + curLine].chunks.push_back(*fontRun);
-	}
-}
-
 void MacText::appendText(Common::String str, int fontId = kMacFontChicago, int fontSize = 12, int fontSlant = kMacFontRegular) {
 	uint oldLen = _textLines.size();
 	uint newLines = 1 + getNewlinesInString(str);
@@ -386,8 +375,6 @@ void MacText::appendText(Common::String str, int fontId = kMacFontChicago, int f
 	_str += fontRun.toString();
 	_str += str;
 
-	//resizeAndFormatLines(newLines, &fontRun);
-
 	splitString(str);
 	recalcDims();
 
@@ -403,8 +390,6 @@ void MacText::appendTextDefault(Common::String str) {
 	_str += _defaultFormatting.toString();
 	_str += str;
 
-	//resizeAndFormatLines(newLines, &_defaultFormatting);
-
 	splitString(str);
 	recalcDims();
 
diff --git a/graphics/macgui/mactext.h b/graphics/macgui/mactext.h
index 8e25dcf..43804ff 100644
--- a/graphics/macgui/mactext.h
+++ b/graphics/macgui/mactext.h
@@ -101,7 +101,6 @@ public:
 			}
 
 	void draw(ManagedSurface *g, int x, int y, int w, int h, int xoff, int yoff);
-	void resizeAndFormatLines(uint numNewLines, MacFontRun * fontRun);
 	void appendText(Common::String str, int fontId, int fontSize, int fontSlant);
 	void appendTextDefault(Common::String str);
 	void clearText();


Commit: bc8d059f38f4904af588522ebbc284ad1749f5cf
    https://github.com/scummvm/scummvm/commit/bc8d059f38f4904af588522ebbc284ad1749f5cf
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-08-04T21:54:19+02:00

Commit Message:
GRAPHICS: MACGUI: Draw input on MacTextWindow redraw

Changed paths:
    graphics/macgui/mactextwindow.cpp
    graphics/macgui/mactextwindow.h


diff --git a/graphics/macgui/mactextwindow.cpp b/graphics/macgui/mactextwindow.cpp
index 0d801ab..6d25701 100644
--- a/graphics/macgui/mactextwindow.cpp
+++ b/graphics/macgui/mactextwindow.cpp
@@ -47,9 +47,11 @@ MacTextWindow::MacTextWindow(MacWindowManager *wm, const MacFont *font, int fgco
 
 	_fontRef = wm->_fontMan->getFont(*font);
 
-	_inputTextHeight = 1;
+	_inputTextHeight = 0;
 	_maxWidth = maxWidth;
 
+	_inputIsDirty = true;
+
 	_scrollPos = 0;
 
 	_cursorX = 0;
@@ -113,7 +115,7 @@ const MacFont *MacTextWindow::getTextWindowFont() {
 }
 
 bool MacTextWindow::draw(ManagedSurface *g, bool forceRedraw) {
-	if (!_borderIsDirty && !_contentIsDirty && !_cursorDirty && !forceRedraw)
+	if (!_borderIsDirty && !_contentIsDirty && !_cursorDirty && !_inputIsDirty && !forceRedraw)
 		return false;
 
 	if (_borderIsDirty || forceRedraw) {
@@ -122,6 +124,11 @@ bool MacTextWindow::draw(ManagedSurface *g, bool forceRedraw) {
 		_composeSurface.clear(kColorWhite);
 	}
 
+	if (_inputIsDirty || forceRedraw) {
+		drawInput();
+		_inputIsDirty = false;
+	}
+
 	_contentIsDirty = false;
 
 	// Compose
@@ -147,7 +154,7 @@ bool MacTextWindow::processEvent(Common::Event &event) {
 		case Common::KEYCODE_BACKSPACE:
 			if (!_inputText.empty()) {
 				_inputText.deleteLastChar();
-				drawInput();
+				_inputIsDirty = true;
 			}
 			break;
 
@@ -160,7 +167,7 @@ bool MacTextWindow::processEvent(Common::Event &event) {
 
 			if (event.kbd.ascii >= 0x20 && event.kbd.ascii <= 0x7f) {
 				_inputText += (char)event.kbd.ascii;
-				drawInput();
+				_inputIsDirty = true;
 
 				return true;
 			}
diff --git a/graphics/macgui/mactextwindow.h b/graphics/macgui/mactextwindow.h
index db9b5a1..5ed507b 100644
--- a/graphics/macgui/mactextwindow.h
+++ b/graphics/macgui/mactextwindow.h
@@ -100,6 +100,7 @@ private:
 	int _maxWidth;
 	Common::String _inputText;
 	uint _inputTextHeight;
+	bool _inputIsDirty;
 
 };
 


Commit: 737c2e4f88ebffd266c0dc52522122760c35f717
    https://github.com/scummvm/scummvm/commit/737c2e4f88ebffd266c0dc52522122760c35f717
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-08-04T21:54:19+02:00

Commit Message:
WAGE: Now we need to render newline at the end of each text

Changed paths:
    engines/wage/wage.cpp


diff --git a/engines/wage/wage.cpp b/engines/wage/wage.cpp
index 8d5a1e0..13489d2 100644
--- a/engines/wage/wage.cpp
+++ b/engines/wage/wage.cpp
@@ -219,7 +219,11 @@ void WageEngine::setMenu(Common::String menu) {
 }
 
 void WageEngine::appendText(const char *str) {
-	_gui->appendText(str);
+	Common::String s(str);
+
+	s += '\n';
+
+	_gui->appendText(s.c_str());
 
 	_inputText.clear();
 }


Commit: 94a57f534f938fd59d2cd766f77e79ff29c53f84
    https://github.com/scummvm/scummvm/commit/94a57f534f938fd59d2cd766f77e79ff29c53f84
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-08-04T21:54:19+02:00

Commit Message:
WAGE: Make drawInput() a noop with MacTextWindow

Changed paths:
    engines/wage/gui-console.cpp


diff --git a/engines/wage/gui-console.cpp b/engines/wage/gui-console.cpp
index e86e6ab..dd761f0 100644
--- a/engines/wage/gui-console.cpp
+++ b/engines/wage/gui-console.cpp
@@ -329,6 +329,8 @@ void Gui::renderConsole(Graphics::ManagedSurface *g, const Common::Rect &r) {
 }
 
 void Gui::drawInput() {
+#ifndef USE_MACTEXTWINDOW
+
 	if (!_screen.getPixels())
 		return;
 	_wm.setActive(_consoleWindow->getId());
@@ -338,7 +340,6 @@ void Gui::drawInput() {
 	appendText(_engine->_inputText.c_str());
 	_inputTextLineNum = _out.size() - 1;
 
-#ifndef USE_MACTEXTWINDOW
 	const Graphics::Font *font = getConsoleFont();
 
 	if (_engine->_inputText.contains('\n')) {
@@ -371,7 +372,8 @@ void Gui::drawInput() {
 	}
 
 	_cursorX = font->getStringWidth(_out[_inputTextLineNum]) + kConHPadding;
-
+#else
+	warning("Gui::drawInput()");
 #endif // USE_MACTEXTWINDOW
 }
 


Commit: f79a7d049bb540f51c5ade053f2d4f32b7eca948
    https://github.com/scummvm/scummvm/commit/f79a7d049bb540f51c5ade053f2d4f32b7eca948
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-08-04T21:54:19+02:00

Commit Message:
GRAPHICS: MACGUI: Fixed input line replacement in MacTextWindow

Changed paths:
    graphics/macgui/mactextwindow.cpp


diff --git a/graphics/macgui/mactextwindow.cpp b/graphics/macgui/mactextwindow.cpp
index 6d25701..40bcf12 100644
--- a/graphics/macgui/mactextwindow.cpp
+++ b/graphics/macgui/mactextwindow.cpp
@@ -191,7 +191,7 @@ void MacTextWindow::drawInput() {
 	_inputTextHeight = MAX(1u, text.size()); // We always have line to clean
 
 	// And add new input line to the text
-	appendText(_inputText, _font);
+	appendText(Common::String("\n" + _inputText), _font);
 
 	_cursorX = _inputText.empty() ? 0 : _fontRef->getStringWidth(text[_inputTextHeight - 1]);
 


Commit: 50078a808cff330917cf4a9c0416776a9415b9d5
    https://github.com/scummvm/scummvm/commit/50078a808cff330917cf4a9c0416776a9415b9d5
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-08-04T21:54:19+02:00

Commit Message:
GRAPHICS: MACGUI: Remove unused variable

Changed paths:
    graphics/macgui/mactext.cpp


diff --git a/graphics/macgui/mactext.cpp b/graphics/macgui/mactext.cpp
index d7fcb5c..0763226 100644
--- a/graphics/macgui/mactext.cpp
+++ b/graphics/macgui/mactext.cpp
@@ -366,7 +366,6 @@ uint getNewlinesInString(const Common::String &str) {
 
 void MacText::appendText(Common::String str, int fontId = kMacFontChicago, int fontSize = 12, int fontSlant = kMacFontRegular) {
 	uint oldLen = _textLines.size();
-	uint newLines = 1 + getNewlinesInString(str);
 
 	MacFontRun fontRun = MacFontRun(_wm, fontId, fontSlant, fontSize, 0, 0, 0);
 
@@ -383,7 +382,6 @@ void MacText::appendText(Common::String str, int fontId = kMacFontChicago, int f
 
 void MacText::appendTextDefault(Common::String str) {
 	uint oldLen = _textLines.size();
-	uint newLines = 1 + getNewlinesInString(str);
 
 	_currentFormatting = _defaultFormatting;
 


Commit: b8f6ce5f00b7129e3c2fe1406fe55033556cce3d
    https://github.com/scummvm/scummvm/commit/b8f6ce5f00b7129e3c2fe1406fe55033556cce3d
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-08-04T21:54:19+02:00

Commit Message:
WAGE: Remove redundant code

Changed paths:
    engines/wage/wage.cpp


diff --git a/engines/wage/wage.cpp b/engines/wage/wage.cpp
index 13489d2..e8723d1 100644
--- a/engines/wage/wage.cpp
+++ b/engines/wage/wage.cpp
@@ -526,7 +526,6 @@ void WageEngine::processTurn(Common::String *textInput, Designed *clickInput) {
 	}
 
 	_inputText.clear();
-	_gui->appendText("");
 }
 
 


Commit: 47d87e059d09d15cc065eddf8fb9662b542e7486
    https://github.com/scummvm/scummvm/commit/47d87e059d09d15cc065eddf8fb9662b542e7486
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-08-04T21:54:19+02:00

Commit Message:
GRAPHICS: MACGUI: Fix input text displaying

Changed paths:
    graphics/macgui/mactextwindow.cpp


diff --git a/graphics/macgui/mactextwindow.cpp b/graphics/macgui/mactextwindow.cpp
index 40bcf12..52785ad 100644
--- a/graphics/macgui/mactextwindow.cpp
+++ b/graphics/macgui/mactextwindow.cpp
@@ -181,7 +181,7 @@ bool MacTextWindow::processEvent(Common::Event &event) {
 
 void MacTextWindow::drawInput() {
 	// First, we kill previous input text
-	for (uint i = 0; i < _inputTextHeight; i++)
+	for (uint i = 1; i < _inputTextHeight; i++)
 		_mactext->removeLastLine();
 
 	Common::Array<Common::String> text;
@@ -191,7 +191,7 @@ void MacTextWindow::drawInput() {
 	_inputTextHeight = MAX(1u, text.size()); // We always have line to clean
 
 	// And add new input line to the text
-	appendText(Common::String("\n" + _inputText), _font);
+	appendText(_inputText, _font);
 
 	_cursorX = _inputText.empty() ? 0 : _fontRef->getStringWidth(text[_inputTextHeight - 1]);
 


Commit: b6970ade92a3b92188404b308fa6e839f3063286
    https://github.com/scummvm/scummvm/commit/b6970ade92a3b92188404b308fa6e839f3063286
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-08-04T21:54:19+02:00

Commit Message:
GRAPHICS: MACGUI: Remove redundant method from MacTextWindow

Changed paths:
    graphics/macgui/mactextwindow.cpp
    graphics/macgui/mactextwindow.h


diff --git a/graphics/macgui/mactextwindow.cpp b/graphics/macgui/mactextwindow.cpp
index 52785ad..4d4d5a2 100644
--- a/graphics/macgui/mactextwindow.cpp
+++ b/graphics/macgui/mactextwindow.cpp
@@ -69,10 +69,6 @@ MacTextWindow::MacTextWindow(MacWindowManager *wm, const MacFont *font, int fgco
 	g_system->getTimerManager()->installTimerProc(&cursorTimerHandler, 200000, this, "textWindowCursor");
 }
 
-void MacTextWindow::drawText(ManagedSurface *g, int x, int y, int w, int h, int xoff, int yoff) {
-	_mactext->draw(g, x, y, w, h, xoff, yoff);
-}
-
 void MacTextWindow::appendText(Common::String str, const MacFont *macFont) {
 	_mactext->appendText(str, macFont->getId(), macFont->getSize(), macFont->getSlant());
 
diff --git a/graphics/macgui/mactextwindow.h b/graphics/macgui/mactextwindow.h
index 5ed507b..fecfeb5 100644
--- a/graphics/macgui/mactextwindow.h
+++ b/graphics/macgui/mactextwindow.h
@@ -63,7 +63,6 @@ public:
 	void setTextWindowFont(const MacFont *macFont);
 	const MacFont *getTextWindowFont();
 
-	void drawText(ManagedSurface *g, int x, int y, int w, int h, int xoff, int yoff);
 	void appendText(Common::String str, const MacFont *macFont);
 	void clearText();
 


Commit: 8609572b879e526d94a3331cebce3322754f81be
    https://github.com/scummvm/scummvm/commit/8609572b879e526d94a3331cebce3322754f81be
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-08-04T21:54:19+02:00

Commit Message:
GRAPHICS: MACGUI: Correctly set MacTextWindow internal MacText size

Changed paths:
    graphics/macgui/mactext.cpp
    graphics/macgui/mactext.h
    graphics/macgui/mactextwindow.cpp
    graphics/macgui/mactextwindow.h
    graphics/macgui/macwindow.h


diff --git a/graphics/macgui/mactext.cpp b/graphics/macgui/mactext.cpp
index 0763226..2043702 100644
--- a/graphics/macgui/mactext.cpp
+++ b/graphics/macgui/mactext.cpp
@@ -82,6 +82,10 @@ MacText::MacText(Common::String s, MacWindowManager *wm, const MacFont *macFont,
 	_fullRefresh = true;
 }
 
+void MacText::setMaxWidth(int maxWidth) {
+	_maxWidth = maxWidth;
+}
+
 void MacText::splitString(Common::String &str) {
 	const char *s = str.c_str();
 
diff --git a/graphics/macgui/mactext.h b/graphics/macgui/mactext.h
index 43804ff..98bfd64 100644
--- a/graphics/macgui/mactext.h
+++ b/graphics/macgui/mactext.h
@@ -95,6 +95,7 @@ public:
 
 	int getInterLinear() { return _interLinear; }
 	void setInterLinear(int interLinear);
+	void setMaxWidth(int maxWidth);
 	void setDefaultFormatting(uint16 fontId_, byte textSlant_, uint16 fontSize_,
 			uint16 palinfo1_, uint16 palinfo2_, uint16 palinfo3_) {
 				_defaultFormatting.setValues(_defaultFormatting.wm, fontId_, textSlant_, fontSize_, palinfo1_, palinfo2_, palinfo3_);
diff --git a/graphics/macgui/mactextwindow.cpp b/graphics/macgui/mactextwindow.cpp
index 4d4d5a2..54c8f77 100644
--- a/graphics/macgui/mactextwindow.cpp
+++ b/graphics/macgui/mactextwindow.cpp
@@ -69,6 +69,13 @@ MacTextWindow::MacTextWindow(MacWindowManager *wm, const MacFont *font, int fgco
 	g_system->getTimerManager()->installTimerProc(&cursorTimerHandler, 200000, this, "textWindowCursor");
 }
 
+void MacTextWindow::resize(int w, int h) {
+	_maxWidth = w - kBorderWidth * 2;
+	_mactext->setMaxWidth(_maxWidth);
+
+	MacWindow::resize(w, h);
+}
+
 void MacTextWindow::appendText(Common::String str, const MacFont *macFont) {
 	_mactext->appendText(str, macFont->getId(), macFont->getSize(), macFont->getSlant());
 
diff --git a/graphics/macgui/mactextwindow.h b/graphics/macgui/mactextwindow.h
index fecfeb5..6cdeea4 100644
--- a/graphics/macgui/mactextwindow.h
+++ b/graphics/macgui/mactextwindow.h
@@ -51,6 +51,8 @@ public:
 	MacTextWindow(MacWindowManager *wm, const MacFont *font, int fgcolor, int bgcolor, int maxWidth, TextAlign textAlignment);
 	virtual ~MacTextWindow();
 
+	virtual void resize(int w, int h);
+
 	virtual bool processEvent(Common::Event &event);
 
 	/**
diff --git a/graphics/macgui/macwindow.h b/graphics/macgui/macwindow.h
index 77be0ae..2cda991 100644
--- a/graphics/macgui/macwindow.h
+++ b/graphics/macgui/macwindow.h
@@ -198,7 +198,7 @@ public:
 	 * @param w New width of the window.
 	 * @param h New height of the window.
 	 */
-	void resize(int w, int h);
+	virtual void resize(int w, int h);
 
 	/**
 	 * Change the dimensions of the window ([0, 0, 0, 0] by default).


Commit: d9e7cbaf961554cfd1736921278b008efb94a40b
    https://github.com/scummvm/scummvm/commit/d9e7cbaf961554cfd1736921278b008efb94a40b
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-08-04T21:54:19+02:00

Commit Message:
GRAPHICS: MACGUI: Implement MacText resize

Changed paths:
    graphics/macgui/mactext.cpp


diff --git a/graphics/macgui/mactext.cpp b/graphics/macgui/mactext.cpp
index 2043702..925f21b 100644
--- a/graphics/macgui/mactext.cpp
+++ b/graphics/macgui/mactext.cpp
@@ -84,6 +84,16 @@ MacText::MacText(Common::String s, MacWindowManager *wm, const MacFont *macFont,
 
 void MacText::setMaxWidth(int maxWidth) {
 	_maxWidth = maxWidth;
+
+	_textLines.clear();
+
+	if (!_str.empty()) {
+		splitString(_str);
+
+		recalcDims();
+
+		_fullRefresh = true;
+	}
 }
 
 void MacText::splitString(Common::String &str) {


Commit: 59d6b63b0f63949717e9621578b97c58c1d09ce6
    https://github.com/scummvm/scummvm/commit/59d6b63b0f63949717e9621578b97c58c1d09ce6
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-08-04T21:54:19+02:00

Commit Message:
GRAPHICS: MACGUI: undraw input text before resizing MacTextWindow

Changed paths:
    graphics/macgui/mactextwindow.cpp
    graphics/macgui/mactextwindow.h


diff --git a/graphics/macgui/mactextwindow.cpp b/graphics/macgui/mactextwindow.cpp
index 54c8f77..3a90908 100644
--- a/graphics/macgui/mactextwindow.cpp
+++ b/graphics/macgui/mactextwindow.cpp
@@ -70,6 +70,8 @@ MacTextWindow::MacTextWindow(MacWindowManager *wm, const MacFont *font, int fgco
 }
 
 void MacTextWindow::resize(int w, int h) {
+	undrawInput();
+
 	_maxWidth = w - kBorderWidth * 2;
 	_mactext->setMaxWidth(_maxWidth);
 
@@ -182,11 +184,16 @@ bool MacTextWindow::processEvent(Common::Event &event) {
 	return MacWindow::processEvent(event);
 }
 
-void MacTextWindow::drawInput() {
-	// First, we kill previous input text
-	for (uint i = 1; i < _inputTextHeight; i++)
+void MacTextWindow::undrawInput() {
+	for (uint i = 0; i < _inputTextHeight; i++)
 		_mactext->removeLastLine();
 
+	_inputTextHeight = 0;
+}
+
+void MacTextWindow::drawInput() {
+	undrawInput();
+
 	Common::Array<Common::String> text;
 
 	// Now recalc new text height
diff --git a/graphics/macgui/mactextwindow.h b/graphics/macgui/mactextwindow.h
index 6cdeea4..d52e969 100644
--- a/graphics/macgui/mactextwindow.h
+++ b/graphics/macgui/mactextwindow.h
@@ -76,6 +76,7 @@ public:
 	void clearInput();
 
 private:
+	void undrawInput();
 	void drawInput();
 	void updateCursorPos();
 


Commit: 4e044d7bd3272e95a95feefb407bb2b1ffba23c8
    https://github.com/scummvm/scummvm/commit/4e044d7bd3272e95a95feefb407bb2b1ffba23c8
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-08-04T21:54:19+02:00

Commit Message:
GRAPHICS: MACGUI: Do not add input line to the original MacText content

During resize we were replaying all MacText appends, which was including
whole history of the input. Eek.

Changed paths:
    graphics/macgui/mactext.cpp
    graphics/macgui/mactext.h
    graphics/macgui/mactextwindow.cpp
    graphics/macgui/mactextwindow.h


diff --git a/graphics/macgui/mactext.cpp b/graphics/macgui/mactext.cpp
index 925f21b..7fd129f 100644
--- a/graphics/macgui/mactext.cpp
+++ b/graphics/macgui/mactext.cpp
@@ -378,15 +378,17 @@ uint getNewlinesInString(const Common::String &str) {
 	return newLines;
 }
 
-void MacText::appendText(Common::String str, int fontId = kMacFontChicago, int fontSize = 12, int fontSlant = kMacFontRegular) {
+void MacText::appendText(Common::String str, int fontId, int fontSize, int fontSlant, bool skipAdd) {
 	uint oldLen = _textLines.size();
 
 	MacFontRun fontRun = MacFontRun(_wm, fontId, fontSlant, fontSize, 0, 0, 0);
 
 	_currentFormatting = fontRun;
 
-	_str += fontRun.toString();
-	_str += str;
+	if (!skipAdd) {
+		_str += fontRun.toString();
+		_str += str;
+	}
 
 	splitString(str);
 	recalcDims();
@@ -394,13 +396,15 @@ void MacText::appendText(Common::String str, int fontId = kMacFontChicago, int f
 	render(oldLen - 1, _textLines.size());
 }
 
-void MacText::appendTextDefault(Common::String str) {
+void MacText::appendTextDefault(Common::String str, bool skipAdd) {
 	uint oldLen = _textLines.size();
 
 	_currentFormatting = _defaultFormatting;
 
-	_str += _defaultFormatting.toString();
-	_str += str;
+	if (!skipAdd) {
+		_str += _defaultFormatting.toString();
+		_str += str;
+	}
 
 	splitString(str);
 	recalcDims();
diff --git a/graphics/macgui/mactext.h b/graphics/macgui/mactext.h
index 98bfd64..d93ad13 100644
--- a/graphics/macgui/mactext.h
+++ b/graphics/macgui/mactext.h
@@ -102,8 +102,8 @@ public:
 			}
 
 	void draw(ManagedSurface *g, int x, int y, int w, int h, int xoff, int yoff);
-	void appendText(Common::String str, int fontId, int fontSize, int fontSlant);
-	void appendTextDefault(Common::String str);
+	void appendText(Common::String str, int fontId = kMacFontChicago, int fontSize = 12, int fontSlant = kMacFontRegular, bool skipAdd = false);
+	void appendTextDefault(Common::String str, bool skipAdd = false);
 	void clearText();
 	void replaceLastLine(Common::String str);
 	void removeLastLine();
diff --git a/graphics/macgui/mactextwindow.cpp b/graphics/macgui/mactextwindow.cpp
index 3a90908..7b1c1e5 100644
--- a/graphics/macgui/mactextwindow.cpp
+++ b/graphics/macgui/mactextwindow.cpp
@@ -78,8 +78,8 @@ void MacTextWindow::resize(int w, int h) {
 	MacWindow::resize(w, h);
 }
 
-void MacTextWindow::appendText(Common::String str, const MacFont *macFont) {
-	_mactext->appendText(str, macFont->getId(), macFont->getSize(), macFont->getSlant());
+void MacTextWindow::appendText(Common::String str, const MacFont *macFont, bool skipAdd) {
+	_mactext->appendText(str, macFont->getId(), macFont->getSize(), macFont->getSlant(), skipAdd);
 
 	_contentIsDirty = true;
 
@@ -188,6 +188,9 @@ void MacTextWindow::undrawInput() {
 	for (uint i = 0; i < _inputTextHeight; i++)
 		_mactext->removeLastLine();
 
+	if (_inputTextHeight)
+		appendText("\n", _font, true);
+
 	_inputTextHeight = 0;
 }
 
@@ -201,7 +204,7 @@ void MacTextWindow::drawInput() {
 	_inputTextHeight = MAX(1u, text.size()); // We always have line to clean
 
 	// And add new input line to the text
-	appendText(_inputText, _font);
+	appendText(_inputText, _font, true);
 
 	_cursorX = _inputText.empty() ? 0 : _fontRef->getStringWidth(text[_inputTextHeight - 1]);
 
diff --git a/graphics/macgui/mactextwindow.h b/graphics/macgui/mactextwindow.h
index d52e969..a005ad9 100644
--- a/graphics/macgui/mactextwindow.h
+++ b/graphics/macgui/mactextwindow.h
@@ -65,7 +65,7 @@ public:
 	void setTextWindowFont(const MacFont *macFont);
 	const MacFont *getTextWindowFont();
 
-	void appendText(Common::String str, const MacFont *macFont);
+	void appendText(Common::String str, const MacFont *macFont, bool skipAdd = false);
 	void clearText();
 
 	void setSelection(int selStartX, int selStartY, int selEndX, int selEndY);


Commit: 7333a68636b623891904e61718bc6327a9d8192f
    https://github.com/scummvm/scummvm/commit/7333a68636b623891904e61718bc6327a9d8192f
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-08-04T21:54:19+02:00

Commit Message:
GRAPHICS: MACGUI: Fix bug in MacText with adding newlines

Changed paths:
    graphics/macgui/mactext.cpp


diff --git a/graphics/macgui/mactext.cpp b/graphics/macgui/mactext.cpp
index 7fd129f..7bcc099 100644
--- a/graphics/macgui/mactext.cpp
+++ b/graphics/macgui/mactext.cpp
@@ -172,7 +172,7 @@ void MacText::splitString(Common::String &str) {
 
 			if (text.size()) {
 				for (uint i = 0; i < text.size(); i++) {
-					_textLines[curLine].chunks[curChunk].text = text[i];
+					_textLines[curLine].chunks[curChunk].text += text[i];
 
 					if ((text.size() > 1 || !nextChunk) && !(i == text.size() - 1 && nextChunk)) {
 						curLine++;


Commit: df36b2d7e02ee44591b7bd5e0be1fc7b329b166e
    https://github.com/scummvm/scummvm/commit/df36b2d7e02ee44591b7bd5e0be1fc7b329b166e
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-08-04T21:54:19+02:00

Commit Message:
GRAPHICS: MACGUI: Clear rendered text when lines are removed in MacText

Changed paths:
    graphics/macgui/mactext.cpp


diff --git a/graphics/macgui/mactext.cpp b/graphics/macgui/mactext.cpp
index 7bcc099..4bb9fef 100644
--- a/graphics/macgui/mactext.cpp
+++ b/graphics/macgui/mactext.cpp
@@ -439,6 +439,8 @@ void MacText::removeLastLine() {
 
 	int h = getLineHeight(_textLines.size() - 1) + _interLinear;
 
+	_surface->fillRect(Common::Rect(0, _textMaxHeight - h, _surface->w, _textMaxHeight), _bgcolor);
+
 	_textLines.pop_back();
 	_textMaxHeight -= h;
 }


Commit: ef1ea04b8c219d1c9e0245bbaac023030a2c3752
    https://github.com/scummvm/scummvm/commit/ef1ea04b8c219d1c9e0245bbaac023030a2c3752
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-08-04T21:54:19+02:00

Commit Message:
GRAPHICS: MACGUI: Fixed Enter key behavior in MacTextWindow

Changed paths:
    graphics/macgui/mactextwindow.cpp


diff --git a/graphics/macgui/mactextwindow.cpp b/graphics/macgui/mactextwindow.cpp
index 7b1c1e5..b3824f6 100644
--- a/graphics/macgui/mactextwindow.cpp
+++ b/graphics/macgui/mactextwindow.cpp
@@ -164,6 +164,7 @@ bool MacTextWindow::processEvent(Common::Event &event) {
 			break;
 
 		case Common::KEYCODE_RETURN:
+			undrawInput();
 			return false; // Pass it to the higher level for processing
 
 		default:


Commit: 91615eb940b766135d15f4d56519de35b5c3ce88
    https://github.com/scummvm/scummvm/commit/91615eb940b766135d15f4d56519de35b5c3ce88
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-08-04T21:54:19+02:00

Commit Message:
WAGE: Remove now redundant input processing

Changed paths:
    engines/wage/wage.cpp


diff --git a/engines/wage/wage.cpp b/engines/wage/wage.cpp
index e8723d1..6d153a3 100644
--- a/engines/wage/wage.cpp
+++ b/engines/wage/wage.cpp
@@ -169,13 +169,6 @@ void WageEngine::processEvents() {
 			break;
 		case Common::EVENT_KEYDOWN:
 			switch (event.kbd.keycode) {
-			case Common::KEYCODE_BACKSPACE:
-				if (!_inputText.empty()) {
-					_inputText.deleteLastChar();
-					_gui->drawInput();
-				}
-				break;
-
 			case Common::KEYCODE_RETURN:
 				_inputText = _gui->_consoleWindow->getInput();
 				_inputText += '\n';
@@ -197,11 +190,6 @@ void WageEngine::processEvents() {
 					break;
 				}
 
-				if (event.kbd.ascii >= 0x20 && event.kbd.ascii <= 0x7f) {
-					_inputText += (char)event.kbd.ascii;
-					_gui->drawInput();
-				}
-
 				break;
 			}
 			break;


Commit: 085eea68c36b9d1c3ea55fcdaabd371ec39125f2
    https://github.com/scummvm/scummvm/commit/085eea68c36b9d1c3ea55fcdaabd371ec39125f2
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-08-04T21:54:19+02:00

Commit Message:
GRAPHICS: MACGUI: Use proper dimensions for maxTextWidth in MacTextWindow

Changed paths:
    graphics/macgui/mactextwindow.cpp
    graphics/macgui/macwindow.h


diff --git a/graphics/macgui/mactextwindow.cpp b/graphics/macgui/mactextwindow.cpp
index b3824f6..e12a902 100644
--- a/graphics/macgui/mactextwindow.cpp
+++ b/graphics/macgui/mactextwindow.cpp
@@ -72,10 +72,10 @@ MacTextWindow::MacTextWindow(MacWindowManager *wm, const MacFont *font, int fgco
 void MacTextWindow::resize(int w, int h) {
 	undrawInput();
 
-	_maxWidth = w - kBorderWidth * 2;
-	_mactext->setMaxWidth(_maxWidth);
-
 	MacWindow::resize(w, h);
+
+	_maxWidth = _innerDims.width();
+	_mactext->setMaxWidth(_maxWidth);
 }
 
 void MacTextWindow::appendText(Common::String str, const MacFont *macFont, bool skipAdd) {
diff --git a/graphics/macgui/macwindow.h b/graphics/macgui/macwindow.h
index 2cda991..3e7f474 100644
--- a/graphics/macgui/macwindow.h
+++ b/graphics/macgui/macwindow.h
@@ -308,6 +308,7 @@ protected:
 	ManagedSurface _composeSurface;
 
 	bool _borderIsDirty;
+	Common::Rect _innerDims;
 
 private:
 	MacWindowBorder _macBorder;
@@ -329,8 +330,6 @@ private:
 	WindowClick _highlightedPart;
 	float _scrollPos, _scrollSize;
 
-	Common::Rect _innerDims;
-
 	Common::String _title;
 };
 


Commit: d4207b1e62761d6bc43d3f6078ea5e895b3b09f3
    https://github.com/scummvm/scummvm/commit/d4207b1e62761d6bc43d3f6078ea5e895b3b09f3
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-08-04T21:54:19+02:00

Commit Message:
GRAPHICS: MACGUI: Implement autoscrolling in MacTextWindow

Changed paths:
    graphics/macgui/mactextwindow.cpp


diff --git a/graphics/macgui/mactextwindow.cpp b/graphics/macgui/mactextwindow.cpp
index e12a902..8d736d4 100644
--- a/graphics/macgui/mactextwindow.cpp
+++ b/graphics/macgui/mactextwindow.cpp
@@ -83,6 +83,8 @@ void MacTextWindow::appendText(Common::String str, const MacFont *macFont, bool
 
 	_contentIsDirty = true;
 
+	_scrollPos = MAX(0, _mactext->getTextHeight() - _innerDims.height());
+
 	updateCursorPos();
 }
 
@@ -137,7 +139,7 @@ bool MacTextWindow::draw(ManagedSurface *g, bool forceRedraw) {
 	_contentIsDirty = false;
 
 	// Compose
-	_mactext->draw(&_composeSurface, 0, 0, _surface.w - 2, _surface.h - 2, kConWOverlap - 2, kConWOverlap - 2);
+	_mactext->draw(&_composeSurface, 0, _scrollPos, _surface.w - 2, _scrollPos + _surface.h - 2, kConWOverlap - 2, kConWOverlap - 2);
 
 	if (_cursorState)
 		_composeSurface.blitFrom(*_cursorSurface, *_cursorRect, Common::Point(_cursorX + kConWOverlap, _cursorY + kConHOverlap));


Commit: e316fb4b163dcf1f7250d26fddf6536470a7bf62
    https://github.com/scummvm/scummvm/commit/e316fb4b163dcf1f7250d26fddf6536470a7bf62
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-08-04T21:54:19+02:00

Commit Message:
GRAPHICS: MACGUI: Do not pass to the upstream backspace key event in MacTextWindow

Changed paths:
    graphics/macgui/mactextwindow.cpp


diff --git a/graphics/macgui/mactextwindow.cpp b/graphics/macgui/mactextwindow.cpp
index 8d736d4..d3a1822 100644
--- a/graphics/macgui/mactextwindow.cpp
+++ b/graphics/macgui/mactextwindow.cpp
@@ -163,7 +163,7 @@ bool MacTextWindow::processEvent(Common::Event &event) {
 				_inputText.deleteLastChar();
 				_inputIsDirty = true;
 			}
-			break;
+			return true;
 
 		case Common::KEYCODE_RETURN:
 			undrawInput();


Commit: 7b7117d5b8e28cbecb49ac2539b9aff61f0139c8
    https://github.com/scummvm/scummvm/commit/7b7117d5b8e28cbecb49ac2539b9aff61f0139c8
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-08-04T21:54:19+02:00

Commit Message:
GRAPHICS: MACGUI: Implement scrolling in MacTextWindow

Changed paths:
    graphics/macgui/mactextwindow.cpp


diff --git a/graphics/macgui/mactextwindow.cpp b/graphics/macgui/mactextwindow.cpp
index d3a1822..7ed0424 100644
--- a/graphics/macgui/mactextwindow.cpp
+++ b/graphics/macgui/mactextwindow.cpp
@@ -34,7 +34,8 @@ enum {
 	kConHOverlap = 20,
 	kConWPadding = 3,
 	kConHPadding = 4,
-	kConOverscan = 3
+	kConOverscan = 3,
+	kConScrollStep = 12
 };
 
 static void cursorTimerHandler(void *refCon);
@@ -184,6 +185,44 @@ bool MacTextWindow::processEvent(Common::Event &event) {
 		}
 	}
 
+	if (click == kBorderScrollUp || click == kBorderScrollDown) {
+		if (event.type == Common::EVENT_LBUTTONDOWN) {
+			int consoleHeight = _innerDims.height();
+			int textFullSize = _mactext->getTextHeight();
+			float scrollPos = (float)_scrollPos / textFullSize;
+			float scrollSize = (float)consoleHeight / textFullSize;
+
+			setScroll(scrollPos, scrollSize);
+
+			return true;
+		} else if (event.type == Common::EVENT_LBUTTONUP) {
+			int oldScrollPos = _scrollPos;
+
+			switch (click) {
+			case kBorderScrollUp:
+				_scrollPos = MAX<int>(0, _scrollPos - kConScrollStep);
+				undrawCursor();
+				_cursorY -= (_scrollPos - oldScrollPos);
+				_contentIsDirty = true;
+				_borderIsDirty = true;
+				break;
+			case kBorderScrollDown:
+				_scrollPos = MIN<int>(_mactext->getTextHeight() - kConScrollStep, _scrollPos + kConScrollStep);
+				undrawCursor();
+				_cursorY -= (_scrollPos - oldScrollPos);
+				_contentIsDirty = true;
+				_borderIsDirty = true;
+				break;
+			default:
+				return false;
+			}
+
+			return true;
+		}
+
+		return false;
+	}
+
 	return MacWindow::processEvent(event);
 }
 


Commit: 04bb7c3e7aca4faba3f98a106de52c866794d9c5
    https://github.com/scummvm/scummvm/commit/04bb7c3e7aca4faba3f98a106de52c866794d9c5
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-08-04T21:54:20+02:00

Commit Message:
GRAPHICS: MACGUI: Reduce constant scope

Changed paths:
    graphics/macgui/mactextwindow.cpp
    graphics/macgui/mactextwindow.h


diff --git a/graphics/macgui/mactextwindow.cpp b/graphics/macgui/mactextwindow.cpp
index 7ed0424..668b3c7 100644
--- a/graphics/macgui/mactextwindow.cpp
+++ b/graphics/macgui/mactextwindow.cpp
@@ -35,7 +35,9 @@ enum {
 	kConWPadding = 3,
 	kConHPadding = 4,
 	kConOverscan = 3,
-	kConScrollStep = 12
+	kConScrollStep = 12,
+
+	kCursorHeight = 12
 };
 
 static void cursorTimerHandler(void *refCon);
diff --git a/graphics/macgui/mactextwindow.h b/graphics/macgui/mactextwindow.h
index a005ad9..313b05b 100644
--- a/graphics/macgui/mactextwindow.h
+++ b/graphics/macgui/mactextwindow.h
@@ -28,10 +28,6 @@
 
 namespace Graphics {
 
-enum {
-	kCursorHeight = 12
-};
-
 struct SelectedText {
 	int startX, startY;
 	int endX, endY;
@@ -55,11 +51,6 @@ public:
 
 	virtual bool processEvent(Common::Event &event);
 
-	/**
-	 * Similar to that described in BaseMacWindow.
-	 * @param g See BaseMacWindow.
-	 * @param forceRedraw If true, the borders are guarranteed to redraw.
-	 */
 	virtual bool draw(ManagedSurface *g, bool forceRedraw = false);
 
 	void setTextWindowFont(const MacFont *macFont);


Commit: 20734108e31d1e5a4f6431b0a444912d13f79d09
    https://github.com/scummvm/scummvm/commit/20734108e31d1e5a4f6431b0a444912d13f79d09
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-08-04T21:54:20+02:00

Commit Message:
GRAPHICS: MACGUI: Incapsulate MacWindow internals

Changed paths:
    graphics/macgui/mactextwindow.cpp
    graphics/macgui/macwindow.h


diff --git a/graphics/macgui/mactextwindow.cpp b/graphics/macgui/mactextwindow.cpp
index 668b3c7..1743614 100644
--- a/graphics/macgui/mactextwindow.cpp
+++ b/graphics/macgui/mactextwindow.cpp
@@ -77,7 +77,7 @@ void MacTextWindow::resize(int w, int h) {
 
 	MacWindow::resize(w, h);
 
-	_maxWidth = _innerDims.width();
+	_maxWidth = getInnerDimensions().width();
 	_mactext->setMaxWidth(_maxWidth);
 }
 
@@ -86,7 +86,7 @@ void MacTextWindow::appendText(Common::String str, const MacFont *macFont, bool
 
 	_contentIsDirty = true;
 
-	_scrollPos = MAX(0, _mactext->getTextHeight() - _innerDims.height());
+	_scrollPos = MAX(0, _mactext->getTextHeight() - getInnerDimensions().height());
 
 	updateCursorPos();
 }
@@ -189,7 +189,7 @@ bool MacTextWindow::processEvent(Common::Event &event) {
 
 	if (click == kBorderScrollUp || click == kBorderScrollDown) {
 		if (event.type == Common::EVENT_LBUTTONDOWN) {
-			int consoleHeight = _innerDims.height();
+			int consoleHeight = getInnerDimensions().height();
 			int textFullSize = _mactext->getTextHeight();
 			float scrollPos = (float)_scrollPos / textFullSize;
 			float scrollSize = (float)consoleHeight / textFullSize;
diff --git a/graphics/macgui/macwindow.h b/graphics/macgui/macwindow.h
index 3e7f474..f1e0cac 100644
--- a/graphics/macgui/macwindow.h
+++ b/graphics/macgui/macwindow.h
@@ -308,7 +308,6 @@ protected:
 	ManagedSurface _composeSurface;
 
 	bool _borderIsDirty;
-	Common::Rect _innerDims;
 
 private:
 	MacWindowBorder _macBorder;
@@ -323,6 +322,7 @@ private:
 	bool _closeable;
 
 	int _borderWidth;
+	Common::Rect _innerDims;
 
 	bool _beingDragged, _beingResized;
 	int _draggedX, _draggedY;


Commit: c25a26d11cad273865a1ccf51f2ca8819f3e18ee
    https://github.com/scummvm/scummvm/commit/c25a26d11cad273865a1ccf51f2ca8819f3e18ee
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-08-04T21:54:20+02:00

Commit Message:
GRAPHICS: MACGUI: Event processing code for text selection in MacTextWindow

Changed paths:
    graphics/macgui/mactext.cpp
    graphics/macgui/mactext.h
    graphics/macgui/mactextwindow.cpp
    graphics/macgui/mactextwindow.h


diff --git a/graphics/macgui/mactext.cpp b/graphics/macgui/mactext.cpp
index 4bb9fef..6ebbe18 100644
--- a/graphics/macgui/mactext.cpp
+++ b/graphics/macgui/mactext.cpp
@@ -445,4 +445,8 @@ void MacText::removeLastLine() {
 	_textMaxHeight -= h;
 }
 
+void MacText::getRowCol(int x, int y, int *col, int *row) {
+	warning("getRowCol(%d, %d, ...)", x, y);
+}
+
 } // End of namespace Graphics
diff --git a/graphics/macgui/mactext.h b/graphics/macgui/mactext.h
index d93ad13..fe5c583 100644
--- a/graphics/macgui/mactext.h
+++ b/graphics/macgui/mactext.h
@@ -113,6 +113,8 @@ public:
 	void render();
 	Graphics::ManagedSurface *getSurface() { return _surface; }
 
+	void getRowCol(int x, int y, int *col, int *row);
+
 private:
 	void splitString(Common::String &s);
 	void render(int from, int to);
diff --git a/graphics/macgui/mactextwindow.cpp b/graphics/macgui/mactextwindow.cpp
index 1743614..cc7bd26 100644
--- a/graphics/macgui/mactextwindow.cpp
+++ b/graphics/macgui/mactextwindow.cpp
@@ -54,6 +54,7 @@ MacTextWindow::MacTextWindow(MacWindowManager *wm, const MacFont *font, int fgco
 	_maxWidth = maxWidth;
 
 	_inputIsDirty = true;
+	_inTextSelection = false;
 
 	_scrollPos = 0;
 
@@ -225,9 +226,71 @@ bool MacTextWindow::processEvent(Common::Event &event) {
 		return false;
 	}
 
+	if (click == kBorderInner) {
+		if (event.type == Common::EVENT_LBUTTONDOWN) {
+			startMarking(event.mouse.x, event.mouse.y);
+
+			return true;
+		} else if (event.type == Common::EVENT_LBUTTONUP) {
+			if (_inTextSelection) {
+				_inTextSelection = false;
+
+				if (_selectedText.endY == -1 ||
+						(_selectedText.endX == _selectedText.startX && _selectedText.endY == _selectedText.startY)) {
+					_selectedText.startY = _selectedText.endY = -1;
+					_contentIsDirty = true;
+					//_menu->enableCommand(kMenuEdit, kMenuActionCopy, false);
+				} else {
+					//_menu->enableCommand(kMenuEdit, kMenuActionCopy, true);
+
+					bool cutAllowed = false;
+
+					if (_selectedText.startY == _selectedText.endY && _selectedText.startY == _mactext->getLineCount() - 1)
+						cutAllowed = true;
+
+					//_menu->enableCommand(kMenuEdit, kMenuActionCut, cutAllowed);
+					//_menu->enableCommand(kMenuEdit, kMenuActionClear, cutAllowed);
+				}
+			}
+
+			return true;
+		} else if (event.type == Common::EVENT_MOUSEMOVE) {
+			if (_inTextSelection) {
+				updateTextSelection(event.mouse.x, event.mouse.y);
+				return true;
+			}
+		}
+
+		return false;
+	}
+
 	return MacWindow::processEvent(event);
 }
 
+void MacTextWindow::startMarking(int x, int y) {
+	x -= getInnerDimensions().left;
+	y -= getInnerDimensions().top;
+
+	y += _scrollPos;
+
+	_mactext->getRowCol(x, y, &_selectedText.startX, &_selectedText.startY);
+
+	_selectedText.endY = -1;
+
+	_inTextSelection = true;
+}
+
+void MacTextWindow::updateTextSelection(int x, int y) {
+	x -= getInnerDimensions().left;
+	y -= getInnerDimensions().top;
+
+	y += _scrollPos;
+
+	_mactext->getRowCol(x, y, &_selectedText.endX, &_selectedText.endY);
+
+	_contentIsDirty = true;
+}
+
 void MacTextWindow::undrawInput() {
 	for (uint i = 0; i < _inputTextHeight; i++)
 		_mactext->removeLastLine();
diff --git a/graphics/macgui/mactextwindow.h b/graphics/macgui/mactextwindow.h
index 313b05b..eb3f270 100644
--- a/graphics/macgui/mactextwindow.h
+++ b/graphics/macgui/mactextwindow.h
@@ -71,6 +71,9 @@ private:
 	void drawInput();
 	void updateCursorPos();
 
+	void startMarking(int x, int y);
+	void updateTextSelection(int x, int y);
+
 public:
 	int _cursorX, _cursorY;
 	bool _cursorState;
@@ -88,6 +91,7 @@ private:
 
 	ManagedSurface *_cursorSurface;
 
+	bool _inTextSelection;
 	SelectedText _selectedText;
 
 	int _maxWidth;


Commit: 08293015e7c18202a4783d39d4083077f562cbca
    https://github.com/scummvm/scummvm/commit/08293015e7c18202a4783d39d4083077f562cbca
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-08-04T21:54:20+02:00

Commit Message:
GRAPHICS: MACGUI: Implement MacText::getRowCol() method

Changed paths:
    graphics/macgui/mactext.cpp


diff --git a/graphics/macgui/mactext.cpp b/graphics/macgui/mactext.cpp
index 6ebbe18..7316e5a 100644
--- a/graphics/macgui/mactext.cpp
+++ b/graphics/macgui/mactext.cpp
@@ -362,7 +362,7 @@ void MacText::draw(ManagedSurface *g, int x, int y, int w, int h, int xoff, int
 	}
 
 	g->blitFrom(*_surface, Common::Rect(MIN<int>(_surface->w, x), MIN<int>(_surface->h, y),
-									    MIN<int>(_surface->w, x + w), MIN<int>(_surface->h, y + h)),
+										MIN<int>(_surface->w, x + w), MIN<int>(_surface->h, y + h)),
 										Common::Point(xoff, yoff));
 }
 
@@ -446,7 +446,43 @@ void MacText::removeLastLine() {
 }
 
 void MacText::getRowCol(int x, int y, int *col, int *row) {
-	warning("getRowCol(%d, %d, ...)", x, y);
+	CLIP(y, 0, _textMaxHeight);
+
+	// FIXME: We should use bsearch() here
+	*row = 0;
+
+	while (*row < _textLines.size() - 1 && _textLines[*row].y < y)
+		(*row)++;
+
+	*col = 0;
+
+	int width = 0, pwidth = 0;
+	int mcol = 0, pmcol = 0;
+	uint chunk;
+	for (chunk = 0; chunk < _textLines[*row].chunks.size() - 1; chunk++) {
+		pwidth = width;
+		pmcol = mcol;
+		if (!_textLines[*row].chunks[chunk].text.empty()) {
+			width += _textLines[*row].chunks[chunk].getFont()->getStringWidth(_textLines[*row].chunks[chunk].text);
+			mcol += _textLines[*row].chunks[chunk].text.size();
+		}
+
+		if (width > x)
+			break;
+	}
+
+	Common::String str = _textLines[*row].chunks[chunk].text;
+
+	*col = mcol;
+
+	for (int i = str.size(); i >= 0; i--) {
+		if (_textLines[*row].chunks[chunk].getFont()->getStringWidth(str) + pwidth < x) {
+			*col = mcol + i;
+			break;
+		}
+
+		str.deleteLastChar();
+	}
 }
 
 } // End of namespace Graphics


Commit: db38a363697afd2107e4c0ee874ddec60c53e867
    https://github.com/scummvm/scummvm/commit/db38a363697afd2107e4c0ee874ddec60c53e867
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-08-04T21:54:20+02:00

Commit Message:
WAGE: Remove redundant call

Changed paths:
    engines/wage/gui-console.cpp


diff --git a/engines/wage/gui-console.cpp b/engines/wage/gui-console.cpp
index dd761f0..53ccb55 100644
--- a/engines/wage/gui-console.cpp
+++ b/engines/wage/gui-console.cpp
@@ -192,11 +192,6 @@ void Gui::renderConsole(Graphics::ManagedSurface *g, const Common::Rect &r) {
 		fullRedraw = true;
 	}
 
-#ifdef USE_MACTEXTWINDOW
-	// TODO: Call this at an appropriate place (only when the selection can change)
-	_consoleWindow->setSelection(_selectionStartX, _selectionStartY, _selectionEndX, _selectionEndY);
-#endif // USE_MACTEXTWINDOW
-
 	if (fullRedraw) {
 		_console.clear(kColorWhite);
 	}


Commit: c5da0bece4bc8537335680cb49bd6e5b57e33073
    https://github.com/scummvm/scummvm/commit/c5da0bece4bc8537335680cb49bd6e5b57e33073
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-08-04T21:54:20+02:00

Commit Message:
GRAPHICS: MACGUI: Remove redundant method from MacTextWindow

Changed paths:
    graphics/macgui/mactextwindow.cpp
    graphics/macgui/mactextwindow.h


diff --git a/graphics/macgui/mactextwindow.cpp b/graphics/macgui/mactextwindow.cpp
index cc7bd26..0da3752 100644
--- a/graphics/macgui/mactextwindow.cpp
+++ b/graphics/macgui/mactextwindow.cpp
@@ -100,13 +100,6 @@ void MacTextWindow::clearText() {
 	updateCursorPos();
 }
 
-void MacTextWindow::setSelection(int selStartX, int selStartY, int selEndX, int selEndY) {
-	_selectedText.startX = selStartX;
-	_selectedText.startY = selStartY;
-	_selectedText.endX = selEndX;
-	_selectedText.endY = selEndY;
-}
-
 MacTextWindow::~MacTextWindow() {
 	delete _cursorSurface;
 
diff --git a/graphics/macgui/mactextwindow.h b/graphics/macgui/mactextwindow.h
index eb3f270..d1ee3c1 100644
--- a/graphics/macgui/mactextwindow.h
+++ b/graphics/macgui/mactextwindow.h
@@ -59,8 +59,6 @@ public:
 	void appendText(Common::String str, const MacFont *macFont, bool skipAdd = false);
 	void clearText();
 
-	void setSelection(int selStartX, int selStartY, int selEndX, int selEndY);
-
 	void undrawCursor();
 
 	const Common::String getInput() { return _inputText; }


Commit: b3c8a8e1290eae0ca7628562c887cfa0ad354e6a
    https://github.com/scummvm/scummvm/commit/b3c8a8e1290eae0ca7628562c887cfa0ad354e6a
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-08-04T21:54:20+02:00

Commit Message:
GRAPHICS: MACGUI: Align and store MacText selection coordinates

Changed paths:
    graphics/macgui/mactext.cpp
    graphics/macgui/mactext.h
    graphics/macgui/mactextwindow.cpp
    graphics/macgui/mactextwindow.h


diff --git a/graphics/macgui/mactext.cpp b/graphics/macgui/mactext.cpp
index 7316e5a..45e5249 100644
--- a/graphics/macgui/mactext.cpp
+++ b/graphics/macgui/mactext.cpp
@@ -445,7 +445,7 @@ void MacText::removeLastLine() {
 	_textMaxHeight -= h;
 }
 
-void MacText::getRowCol(int x, int y, int *col, int *row) {
+void MacText::getRowCol(int x, int y, int *sx, int *sy, int *row, int *col) {
 	CLIP(y, 0, _textMaxHeight);
 
 	// FIXME: We should use bsearch() here
@@ -454,6 +454,8 @@ void MacText::getRowCol(int x, int y, int *col, int *row) {
 	while (*row < _textLines.size() - 1 && _textLines[*row].y < y)
 		(*row)++;
 
+	*sy = _textLines[*row].y;
+
 	*col = 0;
 
 	int width = 0, pwidth = 0;
@@ -476,8 +478,10 @@ void MacText::getRowCol(int x, int y, int *col, int *row) {
 	*col = mcol;
 
 	for (int i = str.size(); i >= 0; i--) {
-		if (_textLines[*row].chunks[chunk].getFont()->getStringWidth(str) + pwidth < x) {
+		int strw = _textLines[*row].chunks[chunk].getFont()->getStringWidth(str);
+		if (strw + pwidth < x) {
 			*col = mcol + i;
+			*sx = strw + pwidth;
 			break;
 		}
 
diff --git a/graphics/macgui/mactext.h b/graphics/macgui/mactext.h
index fe5c583..ffc8c8d 100644
--- a/graphics/macgui/mactext.h
+++ b/graphics/macgui/mactext.h
@@ -113,7 +113,7 @@ public:
 	void render();
 	Graphics::ManagedSurface *getSurface() { return _surface; }
 
-	void getRowCol(int x, int y, int *col, int *row);
+	void getRowCol(int x, int y, int *sx, int *sy, int *row, int *col);
 
 private:
 	void splitString(Common::String &s);
diff --git a/graphics/macgui/mactextwindow.cpp b/graphics/macgui/mactextwindow.cpp
index 0da3752..a5f7b05 100644
--- a/graphics/macgui/mactextwindow.cpp
+++ b/graphics/macgui/mactextwindow.cpp
@@ -266,7 +266,7 @@ void MacTextWindow::startMarking(int x, int y) {
 
 	y += _scrollPos;
 
-	_mactext->getRowCol(x, y, &_selectedText.startX, &_selectedText.startY);
+	_mactext->getRowCol(x, y, &_selectedText.endX, &_selectedText.endY, &_selectedText.endRow, &_selectedText.endCol);
 
 	_selectedText.endY = -1;
 
@@ -279,7 +279,7 @@ void MacTextWindow::updateTextSelection(int x, int y) {
 
 	y += _scrollPos;
 
-	_mactext->getRowCol(x, y, &_selectedText.endX, &_selectedText.endY);
+	_mactext->getRowCol(x, y, &_selectedText.endX, &_selectedText.endY, &_selectedText.endRow, &_selectedText.endCol);
 
 	_contentIsDirty = true;
 }
diff --git a/graphics/macgui/mactextwindow.h b/graphics/macgui/mactextwindow.h
index d1ee3c1..b3d9ba8 100644
--- a/graphics/macgui/mactextwindow.h
+++ b/graphics/macgui/mactextwindow.h
@@ -31,10 +31,14 @@ namespace Graphics {
 struct SelectedText {
 	int startX, startY;
 	int endX, endY;
+	int startRow, startCol;
+	int endRow, endCol;
 
 	SelectedText() {
 		startX = startY = 0;
 		endX = endY = 0;
+		startRow = startCol = 0;
+		endRow = endCol = 0;
 	}
 
 	bool needsRender() {


Commit: 145b7c9ec994e97ad36527e177ccaf45f224d398
    https://github.com/scummvm/scummvm/commit/145b7c9ec994e97ad36527e177ccaf45f224d398
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-08-04T21:54:20+02:00

Commit Message:
GRAPHICS: MACGUI: Initial selection drawing code to MacTextWindow

Changed paths:
    graphics/macgui/mactextwindow.cpp
    graphics/macgui/mactextwindow.h


diff --git a/graphics/macgui/mactextwindow.cpp b/graphics/macgui/mactextwindow.cpp
index a5f7b05..4fa8103 100644
--- a/graphics/macgui/mactextwindow.cpp
+++ b/graphics/macgui/mactextwindow.cpp
@@ -141,6 +141,9 @@ bool MacTextWindow::draw(ManagedSurface *g, bool forceRedraw) {
 	if (_cursorState)
 		_composeSurface.blitFrom(*_cursorSurface, *_cursorRect, Common::Point(_cursorX + kConWOverlap, _cursorY + kConHOverlap));
 
+	if (_inTextSelection)
+		drawSelection();
+
 	_composeSurface.transBlitFrom(_borderSurface, kColorGreen);
 
 	g->transBlitFrom(_composeSurface, _composeSurface.getBounds(), Common::Point(_dims.left - 2, _dims.top - 2), kColorGreen2);
@@ -148,6 +151,34 @@ bool MacTextWindow::draw(ManagedSurface *g, bool forceRedraw) {
 	return true;
 }
 
+void MacTextWindow::drawSelection() {
+	int start = MIN(_selectedText.startY, _selectedText.endY);
+	start -= _scrollPos;
+	start = MAX(0, start);
+
+	if (start > getInnerDimensions().height())
+		return;
+
+	int end = MAX(_selectedText.startY, _selectedText.endY);
+
+	end -= _scrollPos;
+
+	if (end < 0)
+		return;
+
+	end = MIN((int)getInnerDimensions().height(), end);
+
+	for (int y = start; y < end; y++) {
+		byte *ptr = (byte *)_composeSurface.getBasePtr(kConWOverlap - 2, kConWOverlap - 2 + y);
+
+		for (int x = 0; x < getInnerDimensions().width(); x++, ptr++)
+			if (*ptr == kColorBlack)
+				*ptr = kColorWhite;
+			else
+				*ptr = kColorBlack;
+	}
+}
+
 bool MacTextWindow::processEvent(Common::Event &event) {
 	/*WindowClick click =*/ isInBorder(event.mouse.x, event.mouse.y);
 
@@ -266,7 +297,7 @@ void MacTextWindow::startMarking(int x, int y) {
 
 	y += _scrollPos;
 
-	_mactext->getRowCol(x, y, &_selectedText.endX, &_selectedText.endY, &_selectedText.endRow, &_selectedText.endCol);
+	_mactext->getRowCol(x, y, &_selectedText.startX, &_selectedText.startY, &_selectedText.startRow, &_selectedText.startCol);
 
 	_selectedText.endY = -1;
 
diff --git a/graphics/macgui/mactextwindow.h b/graphics/macgui/mactextwindow.h
index b3d9ba8..14f9d2c 100644
--- a/graphics/macgui/mactextwindow.h
+++ b/graphics/macgui/mactextwindow.h
@@ -71,6 +71,7 @@ public:
 private:
 	void undrawInput();
 	void drawInput();
+	void drawSelection();
 	void updateCursorPos();
 
 	void startMarking(int x, int y);


Commit: 49ad5ff0cf6f8c943914d22355facb1cfca1c59e
    https://github.com/scummvm/scummvm/commit/49ad5ff0cf6f8c943914d22355facb1cfca1c59e
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-08-04T21:54:20+02:00

Commit Message:
GRAPHICS: MACGUI: Do not draw text selection at beginning of selection

Changed paths:
    graphics/macgui/mactextwindow.cpp


diff --git a/graphics/macgui/mactextwindow.cpp b/graphics/macgui/mactextwindow.cpp
index 4fa8103..36c2bd6 100644
--- a/graphics/macgui/mactextwindow.cpp
+++ b/graphics/macgui/mactextwindow.cpp
@@ -152,6 +152,9 @@ bool MacTextWindow::draw(ManagedSurface *g, bool forceRedraw) {
 }
 
 void MacTextWindow::drawSelection() {
+	if (_selectedText.endY == -1)
+		return;
+
 	int start = MIN(_selectedText.startY, _selectedText.endY);
 	start -= _scrollPos;
 	start = MAX(0, start);


Commit: 0be9566a5a82826199cbb283d3373680c7ead019
    https://github.com/scummvm/scummvm/commit/0be9566a5a82826199cbb283d3373680c7ead019
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-08-04T21:54:20+02:00

Commit Message:
GRAPHICS: MACGUI: Simplified selection drawing code

Changed paths:
    graphics/macgui/mactextwindow.cpp


diff --git a/graphics/macgui/mactextwindow.cpp b/graphics/macgui/mactextwindow.cpp
index 36c2bd6..2194fdd 100644
--- a/graphics/macgui/mactextwindow.cpp
+++ b/graphics/macgui/mactextwindow.cpp
@@ -155,16 +155,22 @@ void MacTextWindow::drawSelection() {
 	if (_selectedText.endY == -1)
 		return;
 
-	int start = MIN(_selectedText.startY, _selectedText.endY);
-	start -= _scrollPos;
+	SelectedText s = _selectedText;
+
+	if (s.startY > s.endY) {
+		SWAP(s.startX, s.endX);
+		SWAP(s.startY, s.endY);
+		SWAP(s.startRow, s.endRow);
+		SWAP(s.startCol, s.endCol);
+	}
+
+	int start = s.startY - _scrollPos;
 	start = MAX(0, start);
 
 	if (start > getInnerDimensions().height())
 		return;
 
-	int end = MAX(_selectedText.startY, _selectedText.endY);
-
-	end -= _scrollPos;
+	int end = s.endY - _scrollPos;
 
 	if (end < 0)
 		return;


Commit: 71aadb5645a8d19ec015b372f5331dbb6440a719
    https://github.com/scummvm/scummvm/commit/71aadb5645a8d19ec015b372f5331dbb6440a719
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-08-04T21:54:20+02:00

Commit Message:
GRAPHICS: MACGUI: Correctly calculate row in MacText::getRowCol()

Changed paths:
    graphics/macgui/mactext.cpp


diff --git a/graphics/macgui/mactext.cpp b/graphics/macgui/mactext.cpp
index 45e5249..b3942f0 100644
--- a/graphics/macgui/mactext.cpp
+++ b/graphics/macgui/mactext.cpp
@@ -454,6 +454,9 @@ void MacText::getRowCol(int x, int y, int *sx, int *sy, int *row, int *col) {
 	while (*row < _textLines.size() - 1 && _textLines[*row].y < y)
 		(*row)++;
 
+	if (*row)
+		(*row)--;
+
 	*sy = _textLines[*row].y;
 
 	*col = 0;


Commit: 676b6082ab0bcbaf2a5303c7471f87c9cfe847dd
    https://github.com/scummvm/scummvm/commit/676b6082ab0bcbaf2a5303c7471f87c9cfe847dd
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-08-04T21:54:20+02:00

Commit Message:
GRAPHICS: GUI: Mark beginning and end column of selection in MacTextWindow

Changed paths:
    graphics/macgui/mactext.h
    graphics/macgui/mactextwindow.cpp


diff --git a/graphics/macgui/mactext.h b/graphics/macgui/mactext.h
index ffc8c8d..7cbf40e 100644
--- a/graphics/macgui/mactext.h
+++ b/graphics/macgui/mactext.h
@@ -109,6 +109,7 @@ public:
 	void removeLastLine();
 	int getLineCount() { return _textLines.size(); }
 	int getTextHeight() { return _textMaxHeight; }
+	int getLineHeight(int line);
 
 	void render();
 	Graphics::ManagedSurface *getSurface() { return _surface; }
@@ -121,7 +122,6 @@ private:
 	void recalcDims();
 	void reallocSurface();
 	int getLineWidth(int line, bool enforce = false);
-	int getLineHeight(int line);
 
 private:
 	MacWindowManager *_wm;
diff --git a/graphics/macgui/mactextwindow.cpp b/graphics/macgui/mactextwindow.cpp
index 2194fdd..7873ea2 100644
--- a/graphics/macgui/mactextwindow.cpp
+++ b/graphics/macgui/mactextwindow.cpp
@@ -164,6 +164,9 @@ void MacTextWindow::drawSelection() {
 		SWAP(s.startCol, s.endCol);
 	}
 
+	int lastLineHeight = _mactext->getLineHeight(s.endRow);
+	s.endY += lastLineHeight;
+
 	int start = s.startY - _scrollPos;
 	start = MAX(0, start);
 
@@ -177,10 +180,29 @@ void MacTextWindow::drawSelection() {
 
 	end = MIN((int)getInnerDimensions().height(), end);
 
+	int numLines = 0;
+	int x1, x2;
+
 	for (int y = start; y < end; y++) {
-		byte *ptr = (byte *)_composeSurface.getBasePtr(kConWOverlap - 2, kConWOverlap - 2 + y);
+		if (!numLines) {
+			x1 = 0;
+			x2 = getInnerDimensions().width();
+
+			if (y + _scrollPos == s.startY && s.startX > 0) {
+				numLines = _mactext->getLineHeight(s.startRow);
+				x1 = s.startX;
+			}
+			if (y + _scrollPos == s.endY - lastLineHeight) {
+				numLines = _mactext->getLineHeight(s.endRow);
+				x2 = s.endX;
+			}
+		} else {
+			numLines--;
+		}
+
+		byte *ptr = (byte *)_composeSurface.getBasePtr(x1 + kConWOverlap - 2, y + kConWOverlap - 2);
 
-		for (int x = 0; x < getInnerDimensions().width(); x++, ptr++)
+		for (int x = x1; x < x2; x++, ptr++)
 			if (*ptr == kColorBlack)
 				*ptr = kColorWhite;
 			else


Commit: aab404864e16f07307e44ed20310037c05e09ceb
    https://github.com/scummvm/scummvm/commit/aab404864e16f07307e44ed20310037c05e09ceb
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-08-04T21:54:20+02:00

Commit Message:
GRAPHICS: GUI: Fix flicker in selection

Changed paths:
    graphics/macgui/mactextwindow.cpp


diff --git a/graphics/macgui/mactextwindow.cpp b/graphics/macgui/mactextwindow.cpp
index 7873ea2..506cd36 100644
--- a/graphics/macgui/mactextwindow.cpp
+++ b/graphics/macgui/mactextwindow.cpp
@@ -186,7 +186,7 @@ void MacTextWindow::drawSelection() {
 	for (int y = start; y < end; y++) {
 		if (!numLines) {
 			x1 = 0;
-			x2 = getInnerDimensions().width();
+			x2 = getInnerDimensions().width() - 1;
 
 			if (y + _scrollPos == s.startY && s.startX > 0) {
 				numLines = _mactext->getLineHeight(s.startRow);


Commit: afb664df290c54febd48b25efe6eeb5fccc0cfcc
    https://github.com/scummvm/scummvm/commit/afb664df290c54febd48b25efe6eeb5fccc0cfcc
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-08-04T21:54:20+02:00

Commit Message:
GRAPHICS: MACGUI: Made selection affecting the MacMenu

Changed paths:
    engines/wage/gui.cpp
    graphics/macgui/macmenu.cpp
    graphics/macgui/macmenu.h
    graphics/macgui/mactextwindow.cpp
    graphics/macgui/mactextwindow.h
    graphics/macgui/macwindowmanager.cpp
    graphics/macgui/macwindowmanager.h


diff --git a/engines/wage/gui.cpp b/engines/wage/gui.cpp
index e6e439b..f4028df 100644
--- a/engines/wage/gui.cpp
+++ b/engines/wage/gui.cpp
@@ -183,7 +183,7 @@ Gui::Gui(WageEngine *engine) {
 
 	uint maxWidth = _screen.w;
 
-	_consoleWindow = _wm.addTextWindow(font, kColorBlack, kColorWhite, maxWidth, Graphics::kTextAlignLeft);
+	_consoleWindow = _wm.addTextWindow(font, kColorBlack, kColorWhite, maxWidth, Graphics::kTextAlignLeft, _menu);
 #else
 	_consoleWindow = _wm.addWindow(true, true, true);
 #endif // USE_MACTEXTWINDOW
diff --git a/graphics/macgui/macmenu.cpp b/graphics/macgui/macmenu.cpp
index 6cb14f9..e42430b 100644
--- a/graphics/macgui/macmenu.cpp
+++ b/graphics/macgui/macmenu.cpp
@@ -591,6 +591,25 @@ void MacMenu::enableCommand(int menunum, int action, bool state) {
 	_contentIsDirty = true;
 }
 
+void MacMenu::enableCommand(const char *menuitem, const char *menuaction, bool state) {
+	int menunum = 0;
+
+	while (menunum < _items.size())
+		if (_items[menunum]->name.equalsIgnoreCase(menuitem))
+			break;
+		else
+			menunum++;
+
+	if (menunum == _items.size())
+		return;
+
+	for (uint i = 0; i < _items[menunum]->subitems.size(); i++)
+		if (_items[menunum]->subitems[i]->text.equalsIgnoreCase(menuaction))
+			_items[menunum]->subitems[i]->enabled = state;
+
+	_contentIsDirty = true;
+}
+
 void MacMenu::disableAllMenus() {
 	for (uint i = 1; i < _items.size(); i++) // Leave About menu on
 		for (uint j = 0; j < _items[i]->subitems.size(); j++)
diff --git a/graphics/macgui/macmenu.h b/graphics/macgui/macmenu.h
index e7dde9a..a25b65a 100644
--- a/graphics/macgui/macmenu.h
+++ b/graphics/macgui/macmenu.h
@@ -59,6 +59,7 @@ public:
 	bool processEvent(Common::Event &event);
 
 	void enableCommand(int menunum, int action, bool state);
+	void enableCommand(const char *menuitem, const char *menuaction, bool state);
 	void disableAllMenus();
 
 	void setActive(bool active) { _menuActivated = active; }
diff --git a/graphics/macgui/mactextwindow.cpp b/graphics/macgui/mactextwindow.cpp
index 506cd36..ce84a5b 100644
--- a/graphics/macgui/mactextwindow.cpp
+++ b/graphics/macgui/mactextwindow.cpp
@@ -26,6 +26,7 @@
 #include "graphics/macgui/macwindowmanager.h"
 #include "graphics/macgui/macfontmanager.h"
 #include "graphics/macgui/mactextwindow.h"
+#include "graphics/macgui/macmenu.h"
 
 namespace Graphics {
 
@@ -42,10 +43,11 @@ enum {
 
 static void cursorTimerHandler(void *refCon);
 
-MacTextWindow::MacTextWindow(MacWindowManager *wm, const MacFont *font, int fgcolor, int bgcolor, int maxWidth, TextAlign textAlignment) :
+MacTextWindow::MacTextWindow(MacWindowManager *wm, const MacFont *font, int fgcolor, int bgcolor, int maxWidth, TextAlign textAlignment, MacMenu *menu) :
 		MacWindow(wm->getLastId(), true, true, true, wm) {
 
 	_font = font;
+	_menu = menu;
 	_mactext = new MacText("", _wm, font, fgcolor, bgcolor, maxWidth, textAlignment);
 
 	_fontRef = wm->_fontMan->getFont(*font);
@@ -294,17 +296,17 @@ bool MacTextWindow::processEvent(Common::Event &event) {
 						(_selectedText.endX == _selectedText.startX && _selectedText.endY == _selectedText.startY)) {
 					_selectedText.startY = _selectedText.endY = -1;
 					_contentIsDirty = true;
-					//_menu->enableCommand(kMenuEdit, kMenuActionCopy, false);
+					_menu->enableCommand("Edit", "Copy", false);
 				} else {
-					//_menu->enableCommand(kMenuEdit, kMenuActionCopy, true);
+					_menu->enableCommand("Edit", "Copy", true);
 
 					bool cutAllowed = false;
 
 					if (_selectedText.startY == _selectedText.endY && _selectedText.startY == _mactext->getLineCount() - 1)
 						cutAllowed = true;
 
-					//_menu->enableCommand(kMenuEdit, kMenuActionCut, cutAllowed);
-					//_menu->enableCommand(kMenuEdit, kMenuActionClear, cutAllowed);
+					_menu->enableCommand("Edit", "Cut", cutAllowed);
+					_menu->enableCommand("Edit", "Clear", cutAllowed);
 				}
 			}
 
diff --git a/graphics/macgui/mactextwindow.h b/graphics/macgui/mactextwindow.h
index 14f9d2c..bc1bf2d 100644
--- a/graphics/macgui/mactextwindow.h
+++ b/graphics/macgui/mactextwindow.h
@@ -48,7 +48,7 @@ struct SelectedText {
 
 class MacTextWindow : public MacWindow {
 public:
-	MacTextWindow(MacWindowManager *wm, const MacFont *font, int fgcolor, int bgcolor, int maxWidth, TextAlign textAlignment);
+	MacTextWindow(MacWindowManager *wm, const MacFont *font, int fgcolor, int bgcolor, int maxWidth, TextAlign textAlignment, MacMenu *menu);
 	virtual ~MacTextWindow();
 
 	virtual void resize(int w, int h);
@@ -102,6 +102,7 @@ private:
 	uint _inputTextHeight;
 	bool _inputIsDirty;
 
+	MacMenu *_menu;
 };
 
 } // End of namespace Graphics
diff --git a/graphics/macgui/macwindowmanager.cpp b/graphics/macgui/macwindowmanager.cpp
index d3f7d22..9a3e711 100644
--- a/graphics/macgui/macwindowmanager.cpp
+++ b/graphics/macgui/macwindowmanager.cpp
@@ -183,8 +183,8 @@ MacWindow *MacWindowManager::addWindow(bool scrollable, bool resizable, bool edi
 	return w;
 }
 
-MacTextWindow *MacWindowManager::addTextWindow(const MacFont *font, int fgcolor, int bgcolor, int maxWidth, TextAlign textAlignment) {
-	MacTextWindow *w = new MacTextWindow(this, font, fgcolor, bgcolor, maxWidth, textAlignment);
+MacTextWindow *MacWindowManager::addTextWindow(const MacFont *font, int fgcolor, int bgcolor, int maxWidth, TextAlign textAlignment, MacMenu *menu) {
+	MacTextWindow *w = new MacTextWindow(this, font, fgcolor, bgcolor, maxWidth, textAlignment, menu);
 
 	addWindowInitialized(w);
 
diff --git a/graphics/macgui/macwindowmanager.h b/graphics/macgui/macwindowmanager.h
index 963fc35..bc0224a 100644
--- a/graphics/macgui/macwindowmanager.h
+++ b/graphics/macgui/macwindowmanager.h
@@ -107,7 +107,7 @@ public:
 	 * @return Pointer to the newly created window.
 	 */
 	MacWindow *addWindow(bool scrollable, bool resizable, bool editable);
-	MacTextWindow *addTextWindow(const MacFont *font, int fgcolor, int bgcolor, int maxWidth, TextAlign textAlignment);
+	MacTextWindow *addTextWindow(const MacFont *font, int fgcolor, int bgcolor, int maxWidth, TextAlign textAlignment, MacMenu *menu);
 
 	/**
 	 * Adds a window that has already been initialized to the registry.


Commit: 66f59aa893449596298a2cee1d8f761bcf8cc9bd
    https://github.com/scummvm/scummvm/commit/66f59aa893449596298a2cee1d8f761bcf8cc9bd
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-08-04T21:54:20+02:00

Commit Message:
GRAPHICS: MACGUI: Correctly display selection during scrolling

Changed paths:
    graphics/macgui/mactextwindow.cpp


diff --git a/graphics/macgui/mactextwindow.cpp b/graphics/macgui/mactextwindow.cpp
index ce84a5b..9d1de2f 100644
--- a/graphics/macgui/mactextwindow.cpp
+++ b/graphics/macgui/mactextwindow.cpp
@@ -166,8 +166,8 @@ void MacTextWindow::drawSelection() {
 		SWAP(s.startCol, s.endCol);
 	}
 
-	int lastLineHeight = _mactext->getLineHeight(s.endRow);
-	s.endY += lastLineHeight;
+	int lastLineStart = s.endY;
+	s.endY += _mactext->getLineHeight(s.endRow);
 
 	int start = s.startY - _scrollPos;
 	start = MAX(0, start);
@@ -194,7 +194,7 @@ void MacTextWindow::drawSelection() {
 				numLines = _mactext->getLineHeight(s.startRow);
 				x1 = s.startX;
 			}
-			if (y + _scrollPos == s.endY - lastLineHeight) {
+			if (y + _scrollPos == lastLineStart) {
 				numLines = _mactext->getLineHeight(s.endRow);
 				x2 = s.endX;
 			}


Commit: 23649e8d87bf2c1d8c93fa0c4a6502285b258429
    https://github.com/scummvm/scummvm/commit/23649e8d87bf2c1d8c93fa0c4a6502285b258429
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-08-04T21:54:20+02:00

Commit Message:
GRAPHICS: MACGUI: Initial code for copying selection to clipboard

Changed paths:
    graphics/macgui/mactext.cpp
    graphics/macgui/mactext.h
    graphics/macgui/mactextwindow.cpp
    graphics/macgui/mactextwindow.h


diff --git a/graphics/macgui/mactext.cpp b/graphics/macgui/mactext.cpp
index b3942f0..f236679 100644
--- a/graphics/macgui/mactext.cpp
+++ b/graphics/macgui/mactext.cpp
@@ -492,4 +492,80 @@ void MacText::getRowCol(int x, int y, int *sx, int *sy, int *row, int *col) {
 	}
 }
 
+Common::String MacText::getTextChunk(int startRow, int startCol, int endRow, int endCol, bool formatted) {
+	Common::String res;
+
+	CLIP(startRow, 0, (int)_textLines.size() - 1);
+	CLIP(endRow, 0, (int)_textLines.size() - 1);
+
+	for (int i = startRow; i <= endRow; i++) {
+		if (i == startRow && i == endRow) {
+			for (uint chunk = 0; chunk < _textLines[i].chunks.size() - 1; chunk++) {
+				if (startCol <= 0) {
+					if (formatted)
+						res += _textLines[i].chunks[chunk].toString();
+
+					if (endCol <= _textLines[i].chunks[chunk].text.size())
+						res += _textLines[i].chunks[chunk].text;
+					else
+						res += Common::String(_textLines[i].chunks[chunk].text.c_str(), endCol);
+				} else if (_textLines[i].chunks[chunk].text.size() > startCol) {
+					if (formatted)
+						res += _textLines[i].chunks[chunk].toString();
+
+					res += Common::String(_textLines[i].chunks[chunk].text.c_str() + startCol);
+				}
+
+				startCol -= _textLines[i].chunks[chunk].text.size();
+				endCol -= _textLines[i].chunks[chunk].text.size();
+
+				if (endCol <= 0)
+					break;
+			}
+		} else if (i == startRow && startCol != 0) {
+			for (uint chunk = 0; chunk < _textLines[i].chunks.size() - 1; chunk++) {
+				if (startCol <= 0) {
+					if (formatted)
+						res += _textLines[i].chunks[chunk].toString();
+
+					res += _textLines[i].chunks[chunk].text;
+				} else if (_textLines[i].chunks[chunk].text.size() > startCol) {
+					if (formatted)
+						res += _textLines[i].chunks[chunk].toString();
+
+					res += Common::String(_textLines[i].chunks[chunk].text.c_str() + startCol);
+				}
+
+				startCol -= _textLines[i].chunks[chunk].text.size();
+			}
+		} else if (i == endRow) {
+			for (uint chunk = 0; chunk < _textLines[i].chunks.size() - 1; chunk++) {
+				if (formatted)
+					res += _textLines[i].chunks[chunk].toString();
+
+				if (endCol <= _textLines[i].chunks[chunk].text.size())
+					res += _textLines[i].chunks[chunk].text;
+				else
+					res += Common::String(_textLines[i].chunks[chunk].text.c_str(), endCol);
+
+				endCol -= _textLines[i].chunks[chunk].text.size();
+
+				if (endCol <= 0)
+					break;
+			}
+		} else {
+			for (uint chunk = 0; chunk < _textLines[i].chunks.size() - 1; chunk++) {
+				if (formatted)
+					res += _textLines[i].chunks[chunk].toString();
+
+				res += _textLines[i].chunks[chunk].text;
+			}
+
+			res += '\n';
+		}
+	}
+
+	return res;
+}
+
 } // End of namespace Graphics
diff --git a/graphics/macgui/mactext.h b/graphics/macgui/mactext.h
index 7cbf40e..eb567cf 100644
--- a/graphics/macgui/mactext.h
+++ b/graphics/macgui/mactext.h
@@ -116,6 +116,8 @@ public:
 
 	void getRowCol(int x, int y, int *sx, int *sy, int *row, int *col);
 
+	Common::String getTextChunk(int startRow, int startCol, int endRow, int endCol, bool formatted = false);
+
 private:
 	void splitString(Common::String &s);
 	void render(int from, int to);
diff --git a/graphics/macgui/mactextwindow.cpp b/graphics/macgui/mactextwindow.cpp
index 9d1de2f..fb75f41 100644
--- a/graphics/macgui/mactextwindow.cpp
+++ b/graphics/macgui/mactextwindow.cpp
@@ -212,6 +212,20 @@ void MacTextWindow::drawSelection() {
 	}
 }
 
+Common::String MacTextWindow::getSelection(bool formatted) {
+	if (_selectedText.endY == -1)
+		return Common::String("");
+
+	SelectedText s = _selectedText;
+
+	if (s.startY > s.endY) {
+		SWAP(s.startRow, s.endRow);
+		SWAP(s.startCol, s.endCol);
+	}
+
+	return _mactext->getTextChunk(s.startRow, s.startCol, s.endRow, s.endCol, formatted);
+}
+
 bool MacTextWindow::processEvent(Common::Event &event) {
 	/*WindowClick click =*/ isInBorder(event.mouse.x, event.mouse.y);
 
diff --git a/graphics/macgui/mactextwindow.h b/graphics/macgui/mactextwindow.h
index bc1bf2d..60ed820 100644
--- a/graphics/macgui/mactextwindow.h
+++ b/graphics/macgui/mactextwindow.h
@@ -68,6 +68,8 @@ public:
 	const Common::String getInput() { return _inputText; }
 	void clearInput();
 
+	Common::String getSelection(bool formatted = false);
+
 private:
 	void undrawInput();
 	void drawInput();


Commit: 951244ac3facbb512966938c0c9acdd1eeb87ff6
    https://github.com/scummvm/scummvm/commit/951244ac3facbb512966938c0c9acdd1eeb87ff6
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-08-04T21:54:20+02:00

Commit Message:
WAGE: Use MacTextWindow code for copying to clipboard

Changed paths:
    engines/wage/gui-console.cpp


diff --git a/engines/wage/gui-console.cpp b/engines/wage/gui-console.cpp
index 53ccb55..56c111e 100644
--- a/engines/wage/gui-console.cpp
+++ b/engines/wage/gui-console.cpp
@@ -373,37 +373,7 @@ void Gui::drawInput() {
 }
 
 void Gui::actionCopy() {
-	if (_selectionStartX == -1)
-		return;
-
-	int startX = _selectionStartX;
-	int startY = _selectionStartY;
-	int endX = _selectionEndX;
-	int endY = _selectionEndY;
-
-	if (startY > endY) {
-		SWAP(startX, endX);
-		SWAP(endX, endY);
-	}
-
-	_clipboard.clear();
-
-	for (int i = startY; i <= endY; i++) {
-		if (startY == endY) {
-			_clipboard = Common::String(&_lines[i].c_str()[startX], &_lines[i].c_str()[endX]);
-			break;
-		}
-
-		if (i == startY) {
-			_clipboard += &_lines[i].c_str()[startX];
-			_clipboard += '\n';
-		} else if (i == endY) {
-			_clipboard += Common::String(_lines[i].c_str(), &_lines[i].c_str()[endX]);
-		} else {
-			_clipboard += _lines[i];
-			_clipboard += '\n';
-		}
-	}
+	_clipboard = _consoleWindow->getSelection();
 
 	_menu->enableCommand(kMenuEdit, kMenuActionPaste, true);
 }


Commit: a5fa164b8e944a710dda6dd3c58c578ba88f72d9
    https://github.com/scummvm/scummvm/commit/a5fa164b8e944a710dda6dd3c58c578ba88f72d9
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-08-04T21:54:20+02:00

Commit Message:
GRAPHICS: MACGUI: Bugfixes for selection copying in MacText

Changed paths:
    graphics/macgui/mactext.cpp


diff --git a/graphics/macgui/mactext.cpp b/graphics/macgui/mactext.cpp
index f236679..64a8ebf 100644
--- a/graphics/macgui/mactext.cpp
+++ b/graphics/macgui/mactext.cpp
@@ -500,12 +500,12 @@ Common::String MacText::getTextChunk(int startRow, int startCol, int endRow, int
 
 	for (int i = startRow; i <= endRow; i++) {
 		if (i == startRow && i == endRow) {
-			for (uint chunk = 0; chunk < _textLines[i].chunks.size() - 1; chunk++) {
+			for (uint chunk = 0; chunk < _textLines[i].chunks.size(); chunk++) {
 				if (startCol <= 0) {
 					if (formatted)
 						res += _textLines[i].chunks[chunk].toString();
 
-					if (endCol <= _textLines[i].chunks[chunk].text.size())
+					if (endCol >= _textLines[i].chunks[chunk].text.size())
 						res += _textLines[i].chunks[chunk].text;
 					else
 						res += Common::String(_textLines[i].chunks[chunk].text.c_str(), endCol);
@@ -513,7 +513,7 @@ Common::String MacText::getTextChunk(int startRow, int startCol, int endRow, int
 					if (formatted)
 						res += _textLines[i].chunks[chunk].toString();
 
-					res += Common::String(_textLines[i].chunks[chunk].text.c_str() + startCol);
+					res += Common::String(_textLines[i].chunks[chunk].text.c_str() + startCol, endCol - startCol);
 				}
 
 				startCol -= _textLines[i].chunks[chunk].text.size();
@@ -523,7 +523,7 @@ Common::String MacText::getTextChunk(int startRow, int startCol, int endRow, int
 					break;
 			}
 		} else if (i == startRow && startCol != 0) {
-			for (uint chunk = 0; chunk < _textLines[i].chunks.size() - 1; chunk++) {
+			for (uint chunk = 0; chunk < _textLines[i].chunks.size(); chunk++) {
 				if (startCol <= 0) {
 					if (formatted)
 						res += _textLines[i].chunks[chunk].toString();
@@ -539,11 +539,11 @@ Common::String MacText::getTextChunk(int startRow, int startCol, int endRow, int
 				startCol -= _textLines[i].chunks[chunk].text.size();
 			}
 		} else if (i == endRow) {
-			for (uint chunk = 0; chunk < _textLines[i].chunks.size() - 1; chunk++) {
+			for (uint chunk = 0; chunk < _textLines[i].chunks.size(); chunk++) {
 				if (formatted)
 					res += _textLines[i].chunks[chunk].toString();
 
-				if (endCol <= _textLines[i].chunks[chunk].text.size())
+				if (endCol >= _textLines[i].chunks[chunk].text.size())
 					res += _textLines[i].chunks[chunk].text;
 				else
 					res += Common::String(_textLines[i].chunks[chunk].text.c_str(), endCol);
@@ -554,7 +554,7 @@ Common::String MacText::getTextChunk(int startRow, int startCol, int endRow, int
 					break;
 			}
 		} else {
-			for (uint chunk = 0; chunk < _textLines[i].chunks.size() - 1; chunk++) {
+			for (uint chunk = 0; chunk < _textLines[i].chunks.size(); chunk++) {
 				if (formatted)
 					res += _textLines[i].chunks[chunk].toString();
 


Commit: dd2123f8bfeb81e5cc3f36788df54bd92945bf07
    https://github.com/scummvm/scummvm/commit/dd2123f8bfeb81e5cc3f36788df54bd92945bf07
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-08-04T21:54:20+02:00

Commit Message:
GRAPHICS: MACGUI: Added method to append input to MacTextWindow

Changed paths:
    graphics/macgui/mactextwindow.cpp
    graphics/macgui/mactextwindow.h


diff --git a/graphics/macgui/mactextwindow.cpp b/graphics/macgui/mactextwindow.cpp
index fb75f41..6b46b05 100644
--- a/graphics/macgui/mactextwindow.cpp
+++ b/graphics/macgui/mactextwindow.cpp
@@ -398,6 +398,12 @@ void MacTextWindow::clearInput() {
 	_inputText.clear();
 }
 
+void MacTextWindow::appendInput(Common::String str) {
+	_inputText += str;
+
+	drawInput();
+}
+
 //////////////////
 // Cursor stuff
 static void cursorTimerHandler(void *refCon) {
diff --git a/graphics/macgui/mactextwindow.h b/graphics/macgui/mactextwindow.h
index 60ed820..e6672c7 100644
--- a/graphics/macgui/mactextwindow.h
+++ b/graphics/macgui/mactextwindow.h
@@ -67,6 +67,7 @@ public:
 
 	const Common::String getInput() { return _inputText; }
 	void clearInput();
+	void appendInput(Common::String str);
 
 	Common::String getSelection(bool formatted = false);
 


Commit: 532af0bb602397790bc53ef652b0ce12a030d648
    https://github.com/scummvm/scummvm/commit/532af0bb602397790bc53ef652b0ce12a030d648
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-08-04T21:54:20+02:00

Commit Message:
WAGE: Use MacTextWindow for Undo and Paste

Changed paths:
    engines/wage/gui-console.cpp


diff --git a/engines/wage/gui-console.cpp b/engines/wage/gui-console.cpp
index 56c111e..7987f5a 100644
--- a/engines/wage/gui-console.cpp
+++ b/engines/wage/gui-console.cpp
@@ -380,16 +380,15 @@ void Gui::actionCopy() {
 
 void Gui::actionPaste() {
 	_undobuffer = _engine->_inputText;
-	_engine->_inputText += _clipboard;
-	drawInput();
-	_engine->_inputText = _out.back();	// Set last part of the multiline text
+
+	_consoleWindow->appendInput(_clipboard);
 
 	_menu->enableCommand(kMenuEdit, kMenuActionUndo, true);
 }
 
 void Gui::actionUndo() {
-	_engine->_inputText = _undobuffer;
-	drawInput();
+	_consoleWindow->clearInput();
+	_consoleWindow->appendInput(_clipboard);
 
 	_menu->enableCommand(kMenuEdit, kMenuActionUndo, false);
 }


Commit: b2848951007b0667a258aaaea7b4d84a06bdeb83
    https://github.com/scummvm/scummvm/commit/b2848951007b0667a258aaaea7b4d84a06bdeb83
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-08-04T21:54:20+02:00

Commit Message:
GRAPHICS: MACGUI: Leave text highlight after selection is made

Changed paths:
    graphics/macgui/mactextwindow.cpp


diff --git a/graphics/macgui/mactextwindow.cpp b/graphics/macgui/mactextwindow.cpp
index 6b46b05..c55d24a 100644
--- a/graphics/macgui/mactextwindow.cpp
+++ b/graphics/macgui/mactextwindow.cpp
@@ -143,7 +143,7 @@ bool MacTextWindow::draw(ManagedSurface *g, bool forceRedraw) {
 	if (_cursorState)
 		_composeSurface.blitFrom(*_cursorSurface, *_cursorRect, Common::Point(_cursorX + kConWOverlap, _cursorY + kConHOverlap));
 
-	if (_inTextSelection)
+	if (_selectedText.endY != -1)
 		drawSelection();
 
 	_composeSurface.transBlitFrom(_borderSurface, kColorGreen);


Commit: 55a241494e0045d6e9a6b573e4d2cae3f390244f
    https://github.com/scummvm/scummvm/commit/55a241494e0045d6e9a6b573e4d2cae3f390244f
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-08-04T21:54:20+02:00

Commit Message:
GRAPHICS: MACGUI: Improved text selection edge case behaviour

Changed paths:
    graphics/macgui/mactext.cpp


diff --git a/graphics/macgui/mactext.cpp b/graphics/macgui/mactext.cpp
index 64a8ebf..ade339f 100644
--- a/graphics/macgui/mactext.cpp
+++ b/graphics/macgui/mactext.cpp
@@ -451,11 +451,13 @@ void MacText::getRowCol(int x, int y, int *sx, int *sy, int *row, int *col) {
 	// FIXME: We should use bsearch() here
 	*row = 0;
 
-	while (*row < _textLines.size() - 1 && _textLines[*row].y < y)
+	while (*row < _textLines.size() && _textLines[*row].y < y)
 		(*row)++;
 
-	if (*row)
+	if (*row == _textLines.size()) {
 		(*row)--;
+		x = getLineWidth(*row);
+	}
 
 	*sy = _textLines[*row].y;
 
@@ -464,7 +466,7 @@ void MacText::getRowCol(int x, int y, int *sx, int *sy, int *row, int *col) {
 	int width = 0, pwidth = 0;
 	int mcol = 0, pmcol = 0;
 	uint chunk;
-	for (chunk = 0; chunk < _textLines[*row].chunks.size() - 1; chunk++) {
+	for (chunk = 0; chunk < _textLines[*row].chunks.size(); chunk++) {
 		pwidth = width;
 		pmcol = mcol;
 		if (!_textLines[*row].chunks[chunk].text.empty()) {
@@ -476,6 +478,9 @@ void MacText::getRowCol(int x, int y, int *sx, int *sy, int *row, int *col) {
 			break;
 	}
 
+	if (chunk == _textLines[*row].chunks.size())
+		chunk--;
+
 	Common::String str = _textLines[*row].chunks[chunk].text;
 
 	*col = mcol;


Commit: 9e81f4de89d8625757578f152833a6e1f71c997a
    https://github.com/scummvm/scummvm/commit/9e81f4de89d8625757578f152833a6e1f71c997a
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-08-04T21:54:20+02:00

Commit Message:
GRAPHICS: MACGUI: Better selection row detection

Changed paths:
    graphics/macgui/mactext.cpp


diff --git a/graphics/macgui/mactext.cpp b/graphics/macgui/mactext.cpp
index ade339f..4647f9c 100644
--- a/graphics/macgui/mactext.cpp
+++ b/graphics/macgui/mactext.cpp
@@ -449,15 +449,13 @@ void MacText::getRowCol(int x, int y, int *sx, int *sy, int *row, int *col) {
 	CLIP(y, 0, _textMaxHeight);
 
 	// FIXME: We should use bsearch() here
-	*row = 0;
+	*row = _textLines.size() - 1;
 
-	while (*row < _textLines.size() && _textLines[*row].y < y)
-		(*row)++;
-
-	if (*row == _textLines.size()) {
+	while (*row && _textLines[*row].y > y)
 		(*row)--;
+
+	if (y > _textMaxHeight)
 		x = getLineWidth(*row);
-	}
 
 	*sy = _textLines[*row].y;
 


Commit: 410efd9ff5a16821691efa29c438aeea4be8d497
    https://github.com/scummvm/scummvm/commit/410efd9ff5a16821691efa29c438aeea4be8d497
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-08-04T21:54:20+02:00

Commit Message:
GRAPHICS: MACGUI: Fix detection for Cut command enablement

Changed paths:
    graphics/macgui/mactextwindow.cpp


diff --git a/graphics/macgui/mactextwindow.cpp b/graphics/macgui/mactextwindow.cpp
index c55d24a..cc8c117 100644
--- a/graphics/macgui/mactextwindow.cpp
+++ b/graphics/macgui/mactextwindow.cpp
@@ -316,7 +316,7 @@ bool MacTextWindow::processEvent(Common::Event &event) {
 
 					bool cutAllowed = false;
 
-					if (_selectedText.startY == _selectedText.endY && _selectedText.startY == _mactext->getLineCount() - 1)
+					if (_selectedText.startRow == _selectedText.endRow && _selectedText.startRow == _mactext->getLineCount() - 1)
 						cutAllowed = true;
 
 					_menu->enableCommand("Edit", "Cut", cutAllowed);


Commit: c7f83cd43565cf1166c40a0d4cc4d9ddb4f6d866
    https://github.com/scummvm/scummvm/commit/c7f83cd43565cf1166c40a0d4cc4d9ddb4f6d866
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-08-04T21:54:20+02:00

Commit Message:
GRAPHICS: MACGUI: Fix end line text selection hihglight

Changed paths:
    graphics/macgui/mactext.cpp


diff --git a/graphics/macgui/mactext.cpp b/graphics/macgui/mactext.cpp
index 4647f9c..d3a612c 100644
--- a/graphics/macgui/mactext.cpp
+++ b/graphics/macgui/mactext.cpp
@@ -455,7 +455,7 @@ void MacText::getRowCol(int x, int y, int *sx, int *sy, int *row, int *col) {
 		(*row)--;
 
 	if (y > _textMaxHeight)
-		x = getLineWidth(*row);
+		x = _surface->w;
 
 	*sy = _textLines[*row].y;
 


Commit: 1241ada63a1117c44b0df7d87cb0ad9c863fd837
    https://github.com/scummvm/scummvm/commit/1241ada63a1117c44b0df7d87cb0ad9c863fd837
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-08-04T21:54:20+02:00

Commit Message:
GRAPHICS: MACGUI: Fixed bug with column detection in text selection

Changed paths:
    graphics/macgui/mactext.cpp


diff --git a/graphics/macgui/mactext.cpp b/graphics/macgui/mactext.cpp
index d3a612c..88fe642 100644
--- a/graphics/macgui/mactext.cpp
+++ b/graphics/macgui/mactext.cpp
@@ -486,7 +486,7 @@ void MacText::getRowCol(int x, int y, int *sx, int *sy, int *row, int *col) {
 	for (int i = str.size(); i >= 0; i--) {
 		int strw = _textLines[*row].chunks[chunk].getFont()->getStringWidth(str);
 		if (strw + pwidth < x) {
-			*col = mcol + i;
+			*col = pmcol + i;
 			*sx = strw + pwidth;
 			break;
 		}


Commit: 2aac665a2bd5c20b5b125711a32c0f677b65894f
    https://github.com/scummvm/scummvm/commit/2aac665a2bd5c20b5b125711a32c0f677b65894f
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-08-04T21:54:20+02:00

Commit Message:
GRAPHICS: MACGUI: Fix displaying two line text selections

Changed paths:
    graphics/macgui/mactextwindow.cpp


diff --git a/graphics/macgui/mactextwindow.cpp b/graphics/macgui/mactextwindow.cpp
index cc8c117..be8d75f 100644
--- a/graphics/macgui/mactextwindow.cpp
+++ b/graphics/macgui/mactextwindow.cpp
@@ -194,7 +194,7 @@ void MacTextWindow::drawSelection() {
 				numLines = _mactext->getLineHeight(s.startRow);
 				x1 = s.startX;
 			}
-			if (y + _scrollPos == lastLineStart) {
+			if (y + _scrollPos == lastLineStart + 1) {
 				numLines = _mactext->getLineHeight(s.endRow);
 				x2 = s.endX;
 			}


Commit: dfaadb176385761503906bdc90a1916c6c7e628e
    https://github.com/scummvm/scummvm/commit/dfaadb176385761503906bdc90a1916c6c7e628e
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-08-04T21:55:08+02:00

Commit Message:
GRAPHICS: MACGUI: Fix compilation

Changed paths:
    graphics/macgui/mactextwindow.cpp


diff --git a/graphics/macgui/mactextwindow.cpp b/graphics/macgui/mactextwindow.cpp
index be8d75f..2af4aef 100644
--- a/graphics/macgui/mactextwindow.cpp
+++ b/graphics/macgui/mactextwindow.cpp
@@ -227,7 +227,7 @@ Common::String MacTextWindow::getSelection(bool formatted) {
 }
 
 bool MacTextWindow::processEvent(Common::Event &event) {
-	/*WindowClick click =*/ isInBorder(event.mouse.x, event.mouse.y);
+	WindowClick click = isInBorder(event.mouse.x, event.mouse.y);
 
 	if (event.type == Common::EVENT_KEYDOWN) {
 		_wm->setActive(getId());





More information about the Scummvm-git-logs mailing list