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

sev- noreply at scummvm.org
Sun Sep 21 20:13:01 UTC 2025


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

Summary:
5fd7cf914f DIRECTOR: Remove leftovers of MacTextWindow usage
7348fee0b9 GRAPHICS: MACGUI: Allow specifying MacWidget border color instead of hardcode
d52f0d2dbd GRAPHICS: MACGUI: Add 'padding' parameter to MacTextWindow
5067819370 GRAPHICS: MACGUI: Fix crash on MacText destruction
16092a2502 GRAPHICS: MACGUI: Partial fixes for border drawing in MacText
5fcf39afc9 WAGE: Set text border color to white
e8ab5b08ab GPRAHICS: MACGUI: Drop cursor handling parameter from MacTextWindow
4f50cdb020 GRAPHICS: MACGUI: Remove cursor handling from MacTextWindow
f68f2635b8 WAGE: Always switch focus to text window on keypress
6db5cd36d5 GRAPHICS: MACGUI: Remove text selection code from MacTextWindow
8dffab6e37 GRAPHICS: MACGUI: Adjust event coordinates when passing it to MacText
a7b33811fb GRAPHICS: MACGUI: Do not redraw text selection needlessly
4fcee50d46 GRAPHOCS: MACGUI: Do not force MacText to redraw unless required
78bc41ea8d GRAPHICS: MACGUI: Fix cursor and selection positions with non-zero border
100acf2fd0 JANITORIAL: Remove trailing spaces
5486674fd9 GRAPHICS: MACGIU: Fix MacText maxWidth calculation
c8c30f8451 WAGE: Set inner text passing to 1


Commit: 5fd7cf914f1a899a2b647c06b068cd5ad289370f
    https://github.com/scummvm/scummvm/commit/5fd7cf914f1a899a2b647c06b068cd5ad289370f
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-09-21T22:12:37+02:00

Commit Message:
DIRECTOR: Remove leftovers of MacTextWindow usage

Since now we switched all to use MacText directly, this code
became a no-op

Changed paths:
    engines/director/channel.cpp


diff --git a/engines/director/channel.cpp b/engines/director/channel.cpp
index cbddbe15d06..17a4f5abfd0 100644
--- a/engines/director/channel.cpp
+++ b/engines/director/channel.cpp
@@ -35,7 +35,6 @@
 #include "director/castmember/movie.h"
 
 #include "graphics/macgui/mactext.h"
-#include "graphics/macgui/mactextwindow.h"
 #include "graphics/macgui/macbutton.h"
 
 namespace Director {
@@ -767,10 +766,6 @@ int Channel::getMouseLine(int x, int y) {
 		return -1;
 	}
 
-	// If widget is type textWindow, then we need to get the line from the window
-	if (dynamic_cast<Graphics::MacTextWindow *>(_widget))
-		return ((Graphics::MacTextWindow *)_widget)->getMouseLine(x, y);
-
 	return ((Graphics::MacText *)_widget)->getMouseLine(x, y);
 }
 


Commit: 7348fee0b99bc61b191de0b9ae9c7a3b2dadab5b
    https://github.com/scummvm/scummvm/commit/7348fee0b99bc61b191de0b9ae9c7a3b2dadab5b
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-09-21T22:12:37+02:00

Commit Message:
GRAPHICS: MACGUI: Allow specifying MacWidget border color instead of hardcode

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


diff --git a/graphics/macgui/mactext.cpp b/graphics/macgui/mactext.cpp
index a3929059acc..8eb498e310a 100644
--- a/graphics/macgui/mactext.cpp
+++ b/graphics/macgui/mactext.cpp
@@ -954,7 +954,7 @@ bool MacText::draw(bool forceRedraw) {
 
 	for (int bb = 0; bb < _border; bb++) {
 		Common::Rect borderRect(bb, bb, _composeSurface->w - bb, _composeSurface->h - bb);
-		_composeSurface->frameRect(borderRect, 0xff);
+		_composeSurface->frameRect(borderRect, _borderColor);
 	}
 
 	if (_selectedText.endY != -1)
diff --git a/graphics/macgui/mactextwindow.h b/graphics/macgui/mactextwindow.h
index 194ed7f7d04..069bea3eeca 100644
--- a/graphics/macgui/mactextwindow.h
+++ b/graphics/macgui/mactextwindow.h
@@ -89,6 +89,7 @@ public:
 
 	int getMouseLine(int x, int y);
 
+	virtual void setBorderColor(uint32 color) override { _mactext->setBorderColor(color); }
 	/**
 	 * if we want to draw the text which color is not black, then we need to set _textColorRGB
 	 * @param rgb text color you want to draw
diff --git a/graphics/macgui/macwidget.cpp b/graphics/macgui/macwidget.cpp
index 1d2ecb6425c..e04d8f98747 100644
--- a/graphics/macgui/macwidget.cpp
+++ b/graphics/macgui/macwidget.cpp
@@ -47,6 +47,8 @@ MacWidget::MacWidget(MacWidget *parent, int x, int y, int w, int h, MacWindowMan
 
 	_active = false;
 	_editable = false;
+
+	_borderColor = 0xff;
 }
 
 MacWidget::~MacWidget() {
diff --git a/graphics/macgui/macwidget.h b/graphics/macgui/macwidget.h
index fc0fbfb575b..a1781f3a046 100644
--- a/graphics/macgui/macwidget.h
+++ b/graphics/macgui/macwidget.h
@@ -71,6 +71,10 @@ public:
 	virtual bool isEditable() { return _editable; }
 
 	virtual void setColors(uint32 fg, uint32 bg);
+	virtual void setBorderColor(uint32 color) {
+		_borderColor = color;
+		_contentIsDirty = true;
+	}
 
 	virtual void setDimensions(const Common::Rect &r) {
 		_dims = r;
@@ -87,6 +91,7 @@ protected:
 	uint16 _border;
 	uint16 _gutter;
 	uint16 _shadow;
+	uint32 _borderColor;
 
 	uint32 _fgcolor, _bgcolor;
 


Commit: d52f0d2dbdb50a059c3c3f1f573c493f3a100ea4
    https://github.com/scummvm/scummvm/commit/d52f0d2dbdb50a059c3c3f1f573c493f3a100ea4
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-09-21T22:12:37+02:00

Commit Message:
GRAPHICS: MACGUI: Add 'padding' parameter to MacTextWindow

Specifies internal text padding from the window borders

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


diff --git a/graphics/macgui/mactextwindow.cpp b/graphics/macgui/mactextwindow.cpp
index 5915a7ac295..2669b0ace36 100644
--- a/graphics/macgui/mactextwindow.cpp
+++ b/graphics/macgui/mactextwindow.cpp
@@ -42,22 +42,22 @@ enum {
 
 static void cursorTimerHandler(void *refCon);
 
-MacTextWindow::MacTextWindow(MacWindowManager *wm, const MacFont *font, int fgcolor, int bgcolor, int maxWidth, TextAlign textAlignment, MacMenu *menu, bool cursorHandler) :
+MacTextWindow::MacTextWindow(MacWindowManager *wm, const MacFont *font, int fgcolor, int bgcolor, int maxWidth, TextAlign textAlignment, MacMenu *menu, bool cursorHandler, int padding) :
 		MacWindow(wm->getLastId(), true, true, true, wm), _bgcolor(bgcolor), _maxWidth(maxWidth), _menu(menu) {
 
 	_font = font;
-	_mactext = new MacText(this, 0, 0, 0, 0, _wm, Common::U32String(""), font, fgcolor, bgcolor, maxWidth, textAlignment);
+	_mactext = new MacText(this, 0, 0, 0, 0, _wm, Common::U32String(""), font, fgcolor, bgcolor, maxWidth, textAlignment, 0, padding);
 
 	_fontRef = wm->_fontMan->getFont(*font);
 
 	init(cursorHandler);
 }
 
-MacTextWindow::MacTextWindow(MacWindowManager *wm, const Font *font, int fgcolor, int bgcolor, int maxWidth, TextAlign textAlignment, MacMenu *menu, bool cursorHandler) :
+MacTextWindow::MacTextWindow(MacWindowManager *wm, const Font *font, int fgcolor, int bgcolor, int maxWidth, TextAlign textAlignment, MacMenu *menu, bool cursorHandler, int padding) :
 		MacWindow(wm->getLastId(), true, true, true, wm), _bgcolor(bgcolor), _maxWidth(maxWidth), _menu(menu) {
 
 	_font = nullptr;
-	_mactext = new MacText(Common::U32String(""), _wm, font, fgcolor, bgcolor, maxWidth, textAlignment);
+	_mactext = new MacText(Common::U32String(""), _wm, font, fgcolor, bgcolor, maxWidth, textAlignment, 0, padding);
 
 	_fontRef = font;
 
@@ -374,7 +374,7 @@ int MacTextWindow::getMouseLine(int x, int y) {
 	// sometimes error of +2 rows
 	x -= getInnerDimensions().left;
 	y -= getInnerDimensions().top + kConScrollStep;
-	return _mactext->getMouseLine(x, y); 
+	return _mactext->getMouseLine(x, y);
 }
 
 void MacTextWindow::calcScrollBar() {
diff --git a/graphics/macgui/mactextwindow.h b/graphics/macgui/mactextwindow.h
index 069bea3eeca..d491257a8dc 100644
--- a/graphics/macgui/mactextwindow.h
+++ b/graphics/macgui/mactextwindow.h
@@ -29,8 +29,8 @@ namespace Graphics {
 
 class MacTextWindow : public MacWindow {
 public:
-	MacTextWindow(MacWindowManager *wm, const MacFont *font, int fgcolor, int bgcolor, int maxWidth, TextAlign textAlignment, MacMenu *menu, bool cursorHandler = true);
-	MacTextWindow(MacWindowManager *wm, const Font *font, int fgcolor, int bgcolor, int maxWidth, TextAlign textAlignment, MacMenu *menu, bool cursorHandler = true);
+	MacTextWindow(MacWindowManager *wm, const MacFont *font, int fgcolor, int bgcolor, int maxWidth, TextAlign textAlignment, MacMenu *menu, bool cursorHandler = true, int padding = 0);
+	MacTextWindow(MacWindowManager *wm, const Font *font, int fgcolor, int bgcolor, int maxWidth, TextAlign textAlignment, MacMenu *menu, bool cursorHandler = true, int padding = 0);
 	virtual ~MacTextWindow();
 
 	virtual void resize(int w, int h) override;
diff --git a/graphics/macgui/macwindowmanager.cpp b/graphics/macgui/macwindowmanager.cpp
index 944e2661f2b..039b63fbb0e 100644
--- a/graphics/macgui/macwindowmanager.cpp
+++ b/graphics/macgui/macwindowmanager.cpp
@@ -399,8 +399,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, MacMenu *menu, bool cursorHandler) {
-	MacTextWindow *w = new MacTextWindow(this, font, fgcolor, bgcolor, maxWidth, textAlignment, menu, cursorHandler);
+MacTextWindow *MacWindowManager::addTextWindow(const MacFont *font, int fgcolor, int bgcolor, int maxWidth, TextAlign textAlignment, MacMenu *menu, bool cursorHandler, int padding) {
+	MacTextWindow *w = new MacTextWindow(this, font, fgcolor, bgcolor, maxWidth, textAlignment, menu, cursorHandler, padding);
 
 	addWindowInitialized(w);
 
@@ -409,8 +409,8 @@ MacTextWindow *MacWindowManager::addTextWindow(const MacFont *font, int fgcolor,
 	return w;
 }
 
-MacTextWindow *MacWindowManager::addTextWindow(const Font *font, int fgcolor, int bgcolor, int maxWidth, TextAlign textAlignment, MacMenu *menu, bool cursorHandler) {
-	MacTextWindow *w = new MacTextWindow(this, font, fgcolor, bgcolor, maxWidth, textAlignment, menu, cursorHandler);
+MacTextWindow *MacWindowManager::addTextWindow(const Font *font, int fgcolor, int bgcolor, int maxWidth, TextAlign textAlignment, MacMenu *menu, bool cursorHandler, int padding) {
+	MacTextWindow *w = new MacTextWindow(this, font, fgcolor, bgcolor, maxWidth, textAlignment, menu, cursorHandler, padding);
 
 	addWindowInitialized(w);
 
diff --git a/graphics/macgui/macwindowmanager.h b/graphics/macgui/macwindowmanager.h
index 87ae6a563d7..f27b8a1990f 100644
--- a/graphics/macgui/macwindowmanager.h
+++ b/graphics/macgui/macwindowmanager.h
@@ -179,8 +179,8 @@ 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, MacMenu *menu, bool cursorHandler = true);
-	MacTextWindow *addTextWindow(const Font *font, int fgcolor, int bgcolor, int maxWidth, TextAlign textAlignment, MacMenu *menu, bool cursorHandler = true);
+	MacTextWindow *addTextWindow(const MacFont *font, int fgcolor, int bgcolor, int maxWidth, TextAlign textAlignment, MacMenu *menu, bool cursorHandler = true, int padding = 0);
+	MacTextWindow *addTextWindow(const Font *font, int fgcolor, int bgcolor, int maxWidth, TextAlign textAlignment, MacMenu *menu, bool cursorHandler = true, int padding = 0);
 	void resizeScreen(int w, int h);
 
 	/**


Commit: 50678193709787207b3530a8e5528901339c0078
    https://github.com/scummvm/scummvm/commit/50678193709787207b3530a8e5528901339c0078
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-09-21T22:12:37+02:00

Commit Message:
GRAPHICS: MACGUI: Fix crash on MacText destruction

Changed paths:
    graphics/macgui/mactext.cpp


diff --git a/graphics/macgui/mactext.cpp b/graphics/macgui/mactext.cpp
index 8eb498e310a..fc23e1b3a2d 100644
--- a/graphics/macgui/mactext.cpp
+++ b/graphics/macgui/mactext.cpp
@@ -278,6 +278,8 @@ MacText::~MacText() {
 	if (_wm->getActiveWidget() == this)
 		_wm->setActiveWidget(nullptr);
 
+	g_system->getTimerManager()->removeTimerProc(&cursorTimerHandler);
+
 	_borderSurface.free();
 
 	delete _cursorRect;


Commit: 16092a25028cd70b25a8ffe937428847afab2686
    https://github.com/scummvm/scummvm/commit/16092a25028cd70b25a8ffe937428847afab2686
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-09-21T22:12:38+02:00

Commit Message:
GRAPHICS: MACGUI: Partial fixes for border drawing in MacText

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


diff --git a/graphics/macgui/mactext.cpp b/graphics/macgui/mactext.cpp
index fc23e1b3a2d..177f715b000 100644
--- a/graphics/macgui/mactext.cpp
+++ b/graphics/macgui/mactext.cpp
@@ -198,7 +198,7 @@ MacText::MacText(const Common::U32String &s, MacWindowManager *wm, const Font *f
 void MacText::init(uint32 fgcolor, uint32 bgcolor, int maxWidth, TextAlign textAlignment, int interlinear, uint16 textShadow, bool macFontMode) {
 	_fullRefresh = true;
 
-	_canvas._maxWidth = maxWidth;
+	_canvas._maxWidth = maxWidth - _border * 2 - _gutter * 2 - _shadow;
 	_canvas._textAlignment = textAlignment;
 	_canvas._textShadow = textShadow;
 	_canvas._interLinear = interlinear;
@@ -240,8 +240,8 @@ void MacText::init(uint32 fgcolor, uint32 bgcolor, int maxWidth, TextAlign textA
 
 	_menu = nullptr;
 
-	_cursorX = 0;
-	_cursorY = 0;
+	_cursorX = _border;
+	_cursorY = _border;
 	_cursorState = false;
 	_cursorOff = false;
 
@@ -2135,7 +2135,7 @@ static void cursorTimerHandler(void *refCon) {
 
 void MacText::updateCursorPos() {
 	if (_canvas._text.empty()) {
-		_cursorX = _cursorY = 0;
+		_cursorX = _cursorY = _border;
 	} else {
 		undrawCursor();
 
@@ -2143,8 +2143,8 @@ void MacText::updateCursorPos() {
 
 		int alignOffset = _canvas.getAlignOffset(_cursorRow);
 
-		_cursorY = _canvas._text[_cursorRow].y - _scrollPos;
-		_cursorX = _canvas.getLineWidth(_cursorRow, false, _cursorCol) + alignOffset;
+		_cursorY = _canvas._text[_cursorRow].y - _scrollPos + _border;
+		_cursorX = _canvas.getLineWidth(_cursorRow, false, _cursorCol) + alignOffset + _border;
 	}
 
 	int cursorHeight = getLineHeight(_cursorRow);
diff --git a/graphics/macgui/mactextwindow.cpp b/graphics/macgui/mactextwindow.cpp
index 2669b0ace36..a711a6fe6bc 100644
--- a/graphics/macgui/mactextwindow.cpp
+++ b/graphics/macgui/mactextwindow.cpp
@@ -74,8 +74,8 @@ void MacTextWindow::init(bool cursorHandler) {
 	_editable = true;
 	_selectable = true;
 
-	_cursorX = 0;
-	_cursorY = 0;
+	_cursorX = _border;
+	_cursorY = _border;
 	_cursorState = false;
 	_cursorOff = false;
 
@@ -209,7 +209,7 @@ const MacFont *MacTextWindow::getTextWindowFont() {
 }
 
 bool MacTextWindow::draw(bool forceRedraw) {
-	if (!_borderIsDirty && !_contentIsDirty && !_cursorDirty && !_inputIsDirty && !forceRedraw)
+	if (!_borderIsDirty && !_contentIsDirty && !_mactext->needsRedraw() && !_inputIsDirty && !forceRedraw)
 		return false;
 
 	if (_borderIsDirty || forceRedraw) {
@@ -618,7 +618,7 @@ void MacTextWindow::drawInput() {
 	// Now recalc new text height
 	int newLen = _mactext->getLineCount();
 	_inputTextHeight = newLen - oldLen;
-	_cursorX = _inputText.empty() ? 0 : _mactext->getLastLineWidth();
+	_cursorX = _inputText.empty() ? _border : _mactext->getLastLineWidth() + _border;
 
 	updateCursorPos();
 
@@ -628,7 +628,7 @@ void MacTextWindow::drawInput() {
 void MacTextWindow::clearInput() {
 	undrawCursor();
 
-	_cursorX = 0;
+	_cursorX = _border;
 	_inputText.clear();
 }
 
@@ -654,7 +654,7 @@ static void cursorTimerHandler(void *refCon) {
 }
 
 void MacTextWindow::updateCursorPos() {
-	_cursorY = _mactext->getTextHeight() - _scrollPos - kCursorHeight;
+	_cursorY = _mactext->getTextHeight() - _scrollPos - kCursorHeight + _border;
 	_cursorY += _inputText.empty() ? 3 : 0;
 	_cursorDirty = true;
 }
diff --git a/graphics/macgui/mactextwindow.h b/graphics/macgui/mactextwindow.h
index d491257a8dc..b0be03707fb 100644
--- a/graphics/macgui/mactextwindow.h
+++ b/graphics/macgui/mactextwindow.h
@@ -51,6 +51,7 @@ public:
 	void setMarkdownText(const Common::U32String &str);
 
 	void setEditable(bool editable) { _editable = editable; _mactext->setEditable(editable); }
+	void setActive(bool active) override { MacWindow::setActive(active); if (_editable) _mactext->setActive(active); }
 	void setSelectable(bool selectable) { _selectable = selectable; }
 
 	void undrawCursor();


Commit: 5fcf39afc962141ae58d1f6ad625d663d2a71b5c
    https://github.com/scummvm/scummvm/commit/5fcf39afc962141ae58d1f6ad625d663d2a71b5c
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-09-21T22:12:38+02:00

Commit Message:
WAGE: Set text border color to white

Changed paths:
    engines/wage/gui.cpp


diff --git a/engines/wage/gui.cpp b/engines/wage/gui.cpp
index feed8231468..882adb46cce 100644
--- a/engines/wage/gui.cpp
+++ b/engines/wage/gui.cpp
@@ -133,6 +133,7 @@ Gui::Gui(WageEngine *engine) {
 
 	_consoleWindow = _wm->addTextWindow(font, kColorBlack, kColorWhite, maxWidth, Graphics::kTextAlignLeft, _menu);
 	_consoleWindow->setCallback(consoleWindowCallback, this);
+	_consoleWindow->setBorderColor(kColorWhite);
 	_consoleWindow->setEditable(true);
 
 	_selectedMenuItem = -1;


Commit: e8ab5b08abfd60d90ff5d2bdf21a00c2624dd34a
    https://github.com/scummvm/scummvm/commit/e8ab5b08abfd60d90ff5d2bdf21a00c2624dd34a
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-09-21T22:12:38+02:00

Commit Message:
GPRAHICS: MACGUI: Drop cursor handling parameter from MacTextWindow

Changed paths:
    engines/macventure/gui.cpp
    engines/pink/objects/actions/action_text.cpp
    graphics/macgui/macwindowmanager.cpp
    graphics/macgui/macwindowmanager.h


diff --git a/engines/macventure/gui.cpp b/engines/macventure/gui.cpp
index a16c0943cd4..b0f023b8311 100644
--- a/engines/macventure/gui.cpp
+++ b/engines/macventure/gui.cpp
@@ -364,7 +364,7 @@ void Gui::initWindows() {
 	bounds = getWindowData(kOutConsoleWindow).bounds;
 	bbs = borderBounds(findWindowData(kOutConsoleWindow).type);
 	_outConsoleWindow = _wm.addTextWindow(&getCurrentFont(), kColorBlack, kColorWhite,
-										  bounds.width() - bbs.rightScrollbarWidth, Graphics::kTextAlignLeft, _menu, false);
+										  bounds.width() - bbs.rightScrollbarWidth, Graphics::kTextAlignLeft, _menu);
 	_outConsoleWindow->enableScrollbar(true);
 	_outConsoleWindow->setEditable(false);
 	loadBorders(_outConsoleWindow, findWindowData(kOutConsoleWindow).type);
diff --git a/engines/pink/objects/actions/action_text.cpp b/engines/pink/objects/actions/action_text.cpp
index ada5e722f63..18006ac422f 100644
--- a/engines/pink/objects/actions/action_text.cpp
+++ b/engines/pink/objects/actions/action_text.cpp
@@ -153,7 +153,7 @@ void ActionText::start() {
 
 	if (_scrollBar) {
 		_txtWnd = screen->getWndManager().addTextWindow(screen->getTextFont(), _textColorIndex, _backgroundColorIndex,
-														  _xRight - _xLeft, align, nullptr, false);
+														  _xRight - _xLeft, align, nullptr);
 		_txtWnd->setTextColorRGB(_textRGB);
 		_txtWnd->enableScrollbar(true);
 		// it will hide the scrollbar when the text height is smaller than the window height
diff --git a/graphics/macgui/macwindowmanager.cpp b/graphics/macgui/macwindowmanager.cpp
index 039b63fbb0e..51483df37e7 100644
--- a/graphics/macgui/macwindowmanager.cpp
+++ b/graphics/macgui/macwindowmanager.cpp
@@ -399,8 +399,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, MacMenu *menu, bool cursorHandler, int padding) {
-	MacTextWindow *w = new MacTextWindow(this, font, fgcolor, bgcolor, maxWidth, textAlignment, menu, cursorHandler, padding);
+MacTextWindow *MacWindowManager::addTextWindow(const MacFont *font, int fgcolor, int bgcolor, int maxWidth, TextAlign textAlignment, MacMenu *menu, int padding) {
+	MacTextWindow *w = new MacTextWindow(this, font, fgcolor, bgcolor, maxWidth, textAlignment, menu, false, padding);
 
 	addWindowInitialized(w);
 
@@ -409,8 +409,8 @@ MacTextWindow *MacWindowManager::addTextWindow(const MacFont *font, int fgcolor,
 	return w;
 }
 
-MacTextWindow *MacWindowManager::addTextWindow(const Font *font, int fgcolor, int bgcolor, int maxWidth, TextAlign textAlignment, MacMenu *menu, bool cursorHandler, int padding) {
-	MacTextWindow *w = new MacTextWindow(this, font, fgcolor, bgcolor, maxWidth, textAlignment, menu, cursorHandler, padding);
+MacTextWindow *MacWindowManager::addTextWindow(const Font *font, int fgcolor, int bgcolor, int maxWidth, TextAlign textAlignment, MacMenu *menu, int padding) {
+	MacTextWindow *w = new MacTextWindow(this, font, fgcolor, bgcolor, maxWidth, textAlignment, menu, false, padding);
 
 	addWindowInitialized(w);
 
diff --git a/graphics/macgui/macwindowmanager.h b/graphics/macgui/macwindowmanager.h
index f27b8a1990f..18f31544dc4 100644
--- a/graphics/macgui/macwindowmanager.h
+++ b/graphics/macgui/macwindowmanager.h
@@ -179,8 +179,8 @@ 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, MacMenu *menu, bool cursorHandler = true, int padding = 0);
-	MacTextWindow *addTextWindow(const Font *font, int fgcolor, int bgcolor, int maxWidth, TextAlign textAlignment, MacMenu *menu, bool cursorHandler = true, int padding = 0);
+	MacTextWindow *addTextWindow(const MacFont *font, int fgcolor, int bgcolor, int maxWidth, TextAlign textAlignment, MacMenu *menu, int padding = 0);
+	MacTextWindow *addTextWindow(const Font *font, int fgcolor, int bgcolor, int maxWidth, TextAlign textAlignment, MacMenu *menu, int padding = 0);
 	void resizeScreen(int w, int h);
 
 	/**


Commit: 4f50cdb0209e483564c6cba672c5419d66640b9f
    https://github.com/scummvm/scummvm/commit/4f50cdb0209e483564c6cba672c5419d66640b9f
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-09-21T22:12:38+02:00

Commit Message:
GRAPHICS: MACGUI: Remove cursor handling from MacTextWindow

Now MacText is fully owning it

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


diff --git a/graphics/macgui/mactext.cpp b/graphics/macgui/mactext.cpp
index 177f715b000..ec9d0fb6842 100644
--- a/graphics/macgui/mactext.cpp
+++ b/graphics/macgui/mactext.cpp
@@ -829,7 +829,7 @@ void MacText::appendText_(const Common::U32String &strWithFont, uint oldLen) {
 	if (_editable) {
 		_scrollPos = MAX<int>(0, getTextHeight() - getDimensions().height());
 
-		_cursorRow = getLineCount();
+		_cursorRow = MAX<int>(getLineCount() - 1, 0);
 		_cursorCol = _canvas.getLineCharWidth(_cursorRow);
 
 		updateCursorPos();
diff --git a/graphics/macgui/mactextwindow.cpp b/graphics/macgui/mactextwindow.cpp
index a711a6fe6bc..e3296bcf004 100644
--- a/graphics/macgui/mactextwindow.cpp
+++ b/graphics/macgui/mactextwindow.cpp
@@ -36,13 +36,9 @@ enum {
 	kConHPadding = 4,
 	kConOverscan = 3,
 	kConScrollStep = 12,
-
-	kCursorHeight = 12
 };
 
-static void cursorTimerHandler(void *refCon);
-
-MacTextWindow::MacTextWindow(MacWindowManager *wm, const MacFont *font, int fgcolor, int bgcolor, int maxWidth, TextAlign textAlignment, MacMenu *menu, bool cursorHandler, int padding) :
+MacTextWindow::MacTextWindow(MacWindowManager *wm, const MacFont *font, int fgcolor, int bgcolor, int maxWidth, TextAlign textAlignment, MacMenu *menu, int padding) :
 		MacWindow(wm->getLastId(), true, true, true, wm), _bgcolor(bgcolor), _maxWidth(maxWidth), _menu(menu) {
 
 	_font = font;
@@ -50,10 +46,10 @@ MacTextWindow::MacTextWindow(MacWindowManager *wm, const MacFont *font, int fgco
 
 	_fontRef = wm->_fontMan->getFont(*font);
 
-	init(cursorHandler);
+	init();
 }
 
-MacTextWindow::MacTextWindow(MacWindowManager *wm, const Font *font, int fgcolor, int bgcolor, int maxWidth, TextAlign textAlignment, MacMenu *menu, bool cursorHandler, int padding) :
+MacTextWindow::MacTextWindow(MacWindowManager *wm, const Font *font, int fgcolor, int bgcolor, int maxWidth, TextAlign textAlignment, MacMenu *menu, int padding) :
 		MacWindow(wm->getLastId(), true, true, true, wm), _bgcolor(bgcolor), _maxWidth(maxWidth), _menu(menu) {
 
 	_font = nullptr;
@@ -61,10 +57,10 @@ MacTextWindow::MacTextWindow(MacWindowManager *wm, const Font *font, int fgcolor
 
 	_fontRef = font;
 
-	init(cursorHandler);
+	init();
 }
 
-void MacTextWindow::init(bool cursorHandler) {
+void MacTextWindow::init() {
 	_inputTextHeight = 0;
 
 	_inputIsDirty = true;
@@ -74,23 +70,8 @@ void MacTextWindow::init(bool cursorHandler) {
 	_editable = true;
 	_selectable = true;
 
-	_cursorX = _border;
-	_cursorY = _border;
-	_cursorState = false;
-	_cursorOff = false;
-
-	_cursorDirty = true;
-
-	_cursorRect = new Common::Rect(0, 0, 1, kCursorHeight);
-
-	_cursorSurface = new ManagedSurface(1, kCursorHeight);
-	_cursorSurface->fillRect(*_cursorRect, _wm->_colorBlack);
-
 	_textColorRGB = 0;
 
-	if (cursorHandler)
-		g_system->getTimerManager()->installTimerProc(&cursorTimerHandler, 200000, this, "textWindowCursor");
-
 	if (_wm->_mode & kWMModeWin95) {
 		// in win95 mode, we set scrollbar as default
 		_hasScrollBar = true;
@@ -142,8 +123,6 @@ void MacTextWindow::appendText(const Common::U32String &str, const MacFont *macF
 
 	if (_editable) {
 		_scrollPos = MAX<int>(0, _mactext->getTextHeight() - getInnerDimensions().height());
-
-		updateCursorPos();
 	}
 
 	if (_wm->_mode & kWMModeWin95)
@@ -184,16 +163,10 @@ void MacTextWindow::clearText() {
 
 	_contentIsDirty = true;
 	_borderIsDirty = true;
-
-	updateCursorPos();
 }
 
 MacTextWindow::~MacTextWindow() {
-	delete _cursorRect;
-	delete _cursorSurface;
 	delete _mactext;
-
-	g_system->getTimerManager()->removeTimerProc(&cursorTimerHandler);
 }
 
 void MacTextWindow::setTextWindowFont(const MacFont *font) {
@@ -228,14 +201,10 @@ bool MacTextWindow::draw(bool forceRedraw) {
 	}
 
 	_contentIsDirty = false;
-	_cursorDirty = false;
 
 	// Compose
 	_mactext->draw(_composeSurface, true);
 
-	if (_cursorState)
-		_composeSurface->blitFrom(*_cursorSurface, *_cursorRect, Common::Point(_cursorX, _cursorY));
-
 	return true;
 }
 
@@ -554,8 +523,6 @@ bool MacTextWindow::processEvent(Common::Event &event) {
 }
 
 void MacTextWindow::scroll(int delta) {
-	int oldScrollPos = _scrollPos;
-
 	_scrollPos += delta * kConScrollStep;
 
 	if (_editable)
@@ -563,8 +530,6 @@ void MacTextWindow::scroll(int delta) {
 	else
 		_scrollPos = CLIP<int>(_scrollPos, 0, MAX<int>(0, _mactext->getTextHeight() - getInnerDimensions().height()));
 
-	undrawCursor();
-	_cursorY -= (_scrollPos - oldScrollPos);
 	_contentIsDirty = true;
 	_borderIsDirty = true;
 
@@ -618,17 +583,11 @@ void MacTextWindow::drawInput() {
 	// Now recalc new text height
 	int newLen = _mactext->getLineCount();
 	_inputTextHeight = newLen - oldLen;
-	_cursorX = _inputText.empty() ? _border : _mactext->getLastLineWidth() + _border;
-
-	updateCursorPos();
 
 	_contentIsDirty = true;
 }
 
 void MacTextWindow::clearInput() {
-	undrawCursor();
-
-	_cursorX = _border;
 	_inputText.clear();
 }
 
@@ -642,27 +601,4 @@ void MacTextWindow::appendInput(const Common::String &str) {
 	appendInput(Common::U32String(str));
 }
 
-//////////////////
-// Cursor stuff
-static void cursorTimerHandler(void *refCon) {
-	MacTextWindow *w = (MacTextWindow *)refCon;
-
-	if (!w->_cursorOff)
-		w->_cursorState = !w->_cursorState;
-
-	w->_cursorDirty = true;
-}
-
-void MacTextWindow::updateCursorPos() {
-	_cursorY = _mactext->getTextHeight() - _scrollPos - kCursorHeight + _border;
-	_cursorY += _inputText.empty() ? 3 : 0;
-	_cursorDirty = true;
-}
-
-void MacTextWindow::undrawCursor() {
-	_cursorState = false;
-	_cursorDirty = true;
-}
-
-
 } // End of namespace Graphics
diff --git a/graphics/macgui/mactextwindow.h b/graphics/macgui/mactextwindow.h
index b0be03707fb..a1754077f64 100644
--- a/graphics/macgui/mactextwindow.h
+++ b/graphics/macgui/mactextwindow.h
@@ -29,8 +29,8 @@ namespace Graphics {
 
 class MacTextWindow : public MacWindow {
 public:
-	MacTextWindow(MacWindowManager *wm, const MacFont *font, int fgcolor, int bgcolor, int maxWidth, TextAlign textAlignment, MacMenu *menu, bool cursorHandler = true, int padding = 0);
-	MacTextWindow(MacWindowManager *wm, const Font *font, int fgcolor, int bgcolor, int maxWidth, TextAlign textAlignment, MacMenu *menu, bool cursorHandler = true, int padding = 0);
+	MacTextWindow(MacWindowManager *wm, const MacFont *font, int fgcolor, int bgcolor, int maxWidth, TextAlign textAlignment, MacMenu *menu, int padding = 0);
+	MacTextWindow(MacWindowManager *wm, const Font *font, int fgcolor, int bgcolor, int maxWidth, TextAlign textAlignment, MacMenu *menu, int padding = 0);
 	virtual ~MacTextWindow();
 
 	virtual void resize(int w, int h) override;
@@ -54,8 +54,6 @@ public:
 	void setActive(bool active) override { MacWindow::setActive(active); if (_editable) _mactext->setActive(active); }
 	void setSelectable(bool selectable) { _selectable = selectable; }
 
-	void undrawCursor();
-
 	const Common::U32String &getInput() { return _inputText; }
 	void clearInput();
 	void appendInput(const Common::U32String &str);
@@ -98,7 +96,7 @@ public:
 	void setTextColorRGB (uint32 rgb) { _textColorRGB = rgb; }
 
 private:
-	void init(bool cursorHandler);
+	void init();
 	bool isCutAllowed();
 
 	void scroll(int delta);
@@ -107,18 +105,11 @@ private:
 	void undrawInput();
 	void drawInput();
 	void drawSelection();
-	void updateCursorPos();
 
 	void startMarking(int x, int y);
 	void updateTextSelection(int x, int y);
 
 public:
-	int _cursorX, _cursorY;
-	bool _cursorState;
-
-	bool _cursorDirty;
-	Common::Rect *_cursorRect;
-	bool _cursorOff;
 	bool _editable;
 	bool _selectable;
 
@@ -129,8 +120,6 @@ private:
 	const MacFont *_font;
 	const Font *_fontRef;
 
-	ManagedSurface *_cursorSurface;
-
 	bool _inTextSelection;
 	SelectedText _selectedText;
 
diff --git a/graphics/macgui/macwindowmanager.cpp b/graphics/macgui/macwindowmanager.cpp
index 51483df37e7..203fa1db297 100644
--- a/graphics/macgui/macwindowmanager.cpp
+++ b/graphics/macgui/macwindowmanager.cpp
@@ -400,7 +400,7 @@ MacWindow *MacWindowManager::addWindow(bool scrollable, bool resizable, bool edi
 }
 
 MacTextWindow *MacWindowManager::addTextWindow(const MacFont *font, int fgcolor, int bgcolor, int maxWidth, TextAlign textAlignment, MacMenu *menu, int padding) {
-	MacTextWindow *w = new MacTextWindow(this, font, fgcolor, bgcolor, maxWidth, textAlignment, menu, false, padding);
+	MacTextWindow *w = new MacTextWindow(this, font, fgcolor, bgcolor, maxWidth, textAlignment, menu, padding);
 
 	addWindowInitialized(w);
 
@@ -410,7 +410,7 @@ MacTextWindow *MacWindowManager::addTextWindow(const MacFont *font, int fgcolor,
 }
 
 MacTextWindow *MacWindowManager::addTextWindow(const Font *font, int fgcolor, int bgcolor, int maxWidth, TextAlign textAlignment, MacMenu *menu, int padding) {
-	MacTextWindow *w = new MacTextWindow(this, font, fgcolor, bgcolor, maxWidth, textAlignment, menu, false, padding);
+	MacTextWindow *w = new MacTextWindow(this, font, fgcolor, bgcolor, maxWidth, textAlignment, menu, padding);
 
 	addWindowInitialized(w);
 


Commit: f68f2635b846da0617316f4feb9c0e93bc759221
    https://github.com/scummvm/scummvm/commit/f68f2635b846da0617316f4feb9c0e93bc759221
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-09-21T22:12:38+02:00

Commit Message:
WAGE: Always switch focus to text window on keypress

Changed paths:
    engines/wage/gui.cpp


diff --git a/engines/wage/gui.cpp b/engines/wage/gui.cpp
index 882adb46cce..4f29a4da0c5 100644
--- a/engines/wage/gui.cpp
+++ b/engines/wage/gui.cpp
@@ -222,6 +222,10 @@ bool Gui::processSceneEvents(WindowClick click, Common::Event &event) {
 		return true;
 	}
 
+	if (event.type == Common::EVENT_KEYDOWN) {
+		return _consoleWindow->processEvent(event);
+	}
+
 	return false;
 }
 


Commit: 6db5cd36d5738e13af3a6fed2c949ae2750ad0e7
    https://github.com/scummvm/scummvm/commit/6db5cd36d5738e13af3a6fed2c949ae2750ad0e7
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-09-21T22:12:38+02:00

Commit Message:
GRAPHICS: MACGUI: Remove text selection code from MacTextWindow

It now lives fully in MacText

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


diff --git a/graphics/macgui/mactext.h b/graphics/macgui/mactext.h
index 00d40407979..a45e81f7038 100644
--- a/graphics/macgui/mactext.h
+++ b/graphics/macgui/mactext.h
@@ -167,6 +167,7 @@ public:
 	void clearSelection();
 	Common::U32String cutSelection();
 	const SelectedText *getSelectedText() { return &_selectedText; }
+	bool hasSelection() { return _selectedText.endY != -1; }
 
 	int getLineSpacing() { return _canvas._interLinear; }
 
diff --git a/graphics/macgui/mactextwindow.cpp b/graphics/macgui/mactextwindow.cpp
index e3296bcf004..796aeb8c014 100644
--- a/graphics/macgui/mactextwindow.cpp
+++ b/graphics/macgui/mactextwindow.cpp
@@ -64,7 +64,6 @@ void MacTextWindow::init() {
 	_inputTextHeight = 0;
 
 	_inputIsDirty = true;
-	_inTextSelection = false;
 
 	_scrollPos = 0;
 	_editable = true;
@@ -223,119 +222,8 @@ void MacTextWindow::blit(ManagedSurface *g, Common::Rect &dest) {
 	g->transBlitFrom(*_composeSurface, _composeSurface->getBounds(), dest, _wm->_colorGreen2);
 }
 
-void MacTextWindow::drawSelection() {
-	if (_selectedText.endY == -1)
-		return;
-
-	SelectedText s = _selectedText;
-
-	if (s.startY > s.endY || (s.startY == s.endY && s.startX > s.endX)) {
-		SWAP(s.startX, s.endX);
-		SWAP(s.startY, s.endY);
-		SWAP(s.startRow, s.endRow);
-		SWAP(s.startCol, s.endCol);
-	}
-
-	int lastLineStart = s.endY;
-	s.endY += _mactext->getLineHeight(s.endRow);
-
-	int start = s.startY - _scrollPos;
-	start = MAX(0, start);
-
-	if (start > getInnerDimensions().height())
-		return;
-
-	int end = s.endY - _scrollPos;
-
-	if (end < 0)
-		return;
-
-	end = MIN((int)getInnerDimensions().height(), end);
-
-	int numLines = 0;
-	int x1 = 0, x2 = 0;
-
-	for (int y = start; y < end; y++) {
-		if (!numLines) {
-			x1 = 0;
-			x2 = getInnerDimensions().width() - 1;
-
-			if (y + _scrollPos == s.startY && s.startX > 0) {
-				numLines = _mactext->getLineHeight(s.startRow);
-				x1 = s.startX;
-			}
-			if (y + _scrollPos >= lastLineStart) {
-				numLines = _mactext->getLineHeight(s.endRow);
-				x2 = s.endX;
-			}
-		} else {
-			numLines--;
-		}
-
-		byte *ptr = (byte *)_composeSurface->getBasePtr(x1 + 1, y + 1);
-
-		for (int x = x1; x < x2; x++, ptr++)
-			if (*ptr == _wm->_colorBlack)
-				*ptr = _wm->_colorWhite;
-			else
-				*ptr = _wm->_colorBlack;
-	}
-}
-
 Common::U32String MacTextWindow::getSelection(bool formatted, bool newlines) {
-	if (_selectedText.endY == -1)
-		return Common::U32String();
-
-	SelectedText s = _selectedText;
-
-	if (s.startY > s.endY || (s.startY == s.endY && s.startX > s.endX)) {
-		SWAP(s.startRow, s.endRow);
-		SWAP(s.startCol, s.endCol);
-	}
-
-	return _mactext->getTextChunk(s.startRow, s.startCol, s.endRow, s.endCol, formatted, newlines);
-}
-
-void MacTextWindow::clearSelection() {
-	_selectedText.endY = _selectedText.startY = -1;
-}
-
-bool MacTextWindow::isCutAllowed() {
-	if (_selectedText.startRow >= (int)(_mactext->getLineCount() - _inputTextHeight) &&
-			_selectedText.endRow  >= (int)(_mactext->getLineCount() - _inputTextHeight))
-		return true;
-
-	return false;
-}
-
-Common::U32String MacTextWindow::cutSelection() {
-	if (!isCutAllowed())
-		return Common::U32String();
-
-	SelectedText s = _selectedText;
-
-	if (s.startY > s.endY || (s.startY == s.endY && s.startX > s.endX)) {
-		SWAP(s.startRow, s.endRow);
-		SWAP(s.startCol, s.endCol);
-	}
-
-	Common::U32String selection = _mactext->getTextChunk(s.startRow, s.startCol, s.endRow, s.endCol, false, false);
-
-	uint32 selPos = _inputText.find(selection);
-
-	if (selPos == Common::U32String::npos) {
-		//warning("Cannot find substring '%s' in '%s'", selection.c_str(), _inputText.c_str()); // Needed encode method
-
-		return Common::U32String();
-	}
-
-	Common::U32String newInput = _inputText.substr(0, selPos) + _inputText.substr(selPos + selection.size());
-
-	clearSelection();
-	clearInput();
-	appendInput(newInput);
-
-	return selection;
+	return _mactext->getSelection(formatted, newlines);
 }
 
 int MacTextWindow::getMouseLine(int x, int y) {
@@ -382,32 +270,14 @@ bool MacTextWindow::processEvent(Common::Event &event) {
 		_wm->setActiveWindow(getId());
 
 		if (event.kbd.flags & (Common::KBD_ALT | Common::KBD_CTRL | Common::KBD_META)) {
-			switch (event.kbd.keycode) {
-			case Common::KEYCODE_x:
-				_wm->setTextInClipboard(cutSelection());
-				return true;
-			case Common::KEYCODE_c:
-				_wm->setTextInClipboard(getSelection(true, false));
-				return true;
-			case Common::KEYCODE_v:
-				if (g_system->hasTextInClipboard()) {
-					if (_selectedText.endY != -1)
-						cutSelection();
-					appendInput(_wm->getTextFromClipboard());
-					_inputIsDirty = true;
-				}
-				return true;
-			default:
-				break;
-			}
-			return false;
+			return _mactext->processEvent(event);
 		}
 
 		switch (event.kbd.keycode) {
 		case Common::KEYCODE_BACKSPACE:
 			if (!_inputText.empty()) {
-				if (_selectedText.endY != -1) {
-					cutSelection();
+				if (_mactext->hasSelection()) {
+					_mactext->cutSelection();
 				} else {
 					_inputText.deleteLastChar();
 				}
@@ -425,8 +295,8 @@ bool MacTextWindow::processEvent(Common::Event &event) {
 				return false;
 
 			if (event.kbd.ascii >= 0x20 && event.kbd.ascii <= 0x7f) {
-				if (_selectedText.endY != -1)
-					cutSelection();
+				if (_mactext->hasSelection())
+					_mactext->cutSelection();
 				_inputText += (char)event.kbd.ascii;
 				_inputIsDirty = true;
 
@@ -437,7 +307,7 @@ bool MacTextWindow::processEvent(Common::Event &event) {
 		}
 	}
 
-	if (hasAllFocus())
+	if (hasAllFocus())	// We are being dragged or resized
 		return MacWindow::processEvent(event);	// Pass it to upstream
 
 	if (event.type == Common::EVENT_WHEELUP) {
@@ -485,38 +355,7 @@ bool MacTextWindow::processEvent(Common::Event &event) {
 		if (!_selectable)
 			return false;
 
-		if (event.type == Common::EVENT_LBUTTONDOWN) {
-			startMarking(event.mouse.x, event.mouse.y);
-
-			return true;
-		} else if (event.type == Common::EVENT_LBUTTONUP && _menu) {
-			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("Edit", "Copy", false);
-				} else {
-					_menu->enableCommand("Edit", "Copy", true);
-
-					bool cutAllowed = isCutAllowed();
-
-					_menu->enableCommand("Edit", "Cut", cutAllowed);
-					_menu->enableCommand("Edit", "Clear", cutAllowed);
-				}
-			}
-
-			return true;
-		} else if (event.type == Common::EVENT_MOUSEMOVE) {
-			if (_inTextSelection) {
-				updateTextSelection(event.mouse.x, event.mouse.y);
-				return true;
-			}
-		}
-
-		return false;
+		return _mactext->processEvent(event);
 	}
 
 	return MacWindow::processEvent(event);
@@ -536,34 +375,6 @@ void MacTextWindow::scroll(int delta) {
 	_mactext->scroll(delta);
 }
 
-void MacTextWindow::startMarking(int x, int y) {
-	x -= getInnerDimensions().left - 2;
-	y -= getInnerDimensions().top;
-
-	y += _scrollPos;
-
-	_mactext->getRowCol(x, y, &_selectedText.startX, &_selectedText.startY, &_selectedText.startRow, &_selectedText.startCol);
-
-	_selectedText.endY = -1;
-
-	_inTextSelection = true;
-}
-
-void MacTextWindow::updateTextSelection(int x, int y) {
-	x -= getInnerDimensions().left - 2;
-	y -= getInnerDimensions().top;
-
-	y += _scrollPos;
-
-	_mactext->getRowCol(x, y, &_selectedText.endX, &_selectedText.endY, &_selectedText.endRow, &_selectedText.endCol);
-
-	debug(3, "s: %d,%d (%d, %d) e: %d,%d (%d, %d)", _selectedText.startX, _selectedText.startY,
-			_selectedText.startRow, _selectedText.startCol, _selectedText.endX,
-			_selectedText.endY, _selectedText.endRow, _selectedText.endCol);
-
-	_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 a1754077f64..2aa95481277 100644
--- a/graphics/macgui/mactextwindow.h
+++ b/graphics/macgui/mactextwindow.h
@@ -60,9 +60,9 @@ public:
 	void appendInput(const Common::String &str);
 
 	Common::U32String getSelection(bool formatted = false, bool newlines = true);
-	void clearSelection();
-	Common::U32String cutSelection();
-	const SelectedText *getSelectedText() { return &_selectedText; }
+	void clearSelection() { _mactext->clearSelection(); }
+	Common::U32String cutSelection() { return _mactext->cutSelection(); }
+	const SelectedText *getSelectedText() { return _mactext->getSelectedText(); }
 	uint32 getTextColor() { return _mactext->getTextColor(); }
 	uint32 getTextColor(int start, int end) { return _mactext->getTextColor(start, end); }
 	void setTextColor(uint32 color, int start, int end) { return _mactext->setTextColor(color, start, end); }
@@ -97,7 +97,6 @@ public:
 
 private:
 	void init();
-	bool isCutAllowed();
 
 	void scroll(int delta);
 	void calcScrollBar();
@@ -106,9 +105,6 @@ private:
 	void drawInput();
 	void drawSelection();
 
-	void startMarking(int x, int y);
-	void updateTextSelection(int x, int y);
-
 public:
 	bool _editable;
 	bool _selectable;
@@ -120,9 +116,6 @@ private:
 	const MacFont *_font;
 	const Font *_fontRef;
 
-	bool _inTextSelection;
-	SelectedText _selectedText;
-
 	int _maxWidth;
 	Common::U32String _inputText;
 	uint _inputTextHeight;


Commit: 8dffab6e3782365df5b8ec1bf9b731e4614aeaa8
    https://github.com/scummvm/scummvm/commit/8dffab6e3782365df5b8ec1bf9b731e4614aeaa8
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-09-21T22:12:38+02:00

Commit Message:
GRAPHICS: MACGUI: Adjust event coordinates when passing it to MacText

Changed paths:
    graphics/macgui/mactextwindow.cpp


diff --git a/graphics/macgui/mactextwindow.cpp b/graphics/macgui/mactextwindow.cpp
index 796aeb8c014..d5edd41eee3 100644
--- a/graphics/macgui/mactextwindow.cpp
+++ b/graphics/macgui/mactextwindow.cpp
@@ -355,6 +355,8 @@ bool MacTextWindow::processEvent(Common::Event &event) {
 		if (!_selectable)
 			return false;
 
+		event.mouse.x -= _innerDims.left;
+		event.mouse.y -= _innerDims.top;
 		return _mactext->processEvent(event);
 	}
 


Commit: a7b33811fbf2fcb7dcf203549db1faccc91e2d29
    https://github.com/scummvm/scummvm/commit/a7b33811fbf2fcb7dcf203549db1faccc91e2d29
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-09-21T22:12:38+02:00

Commit Message:
GRAPHICS: MACGUI: Do not redraw text selection needlessly

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


diff --git a/graphics/macgui/mactext.cpp b/graphics/macgui/mactext.cpp
index ec9d0fb6842..94aa7b225ad 100644
--- a/graphics/macgui/mactext.cpp
+++ b/graphics/macgui/mactext.cpp
@@ -231,6 +231,7 @@ void MacText::init(uint32 fgcolor, uint32 bgcolor, int maxWidth, TextAlign textA
 
 	_fullRefresh = true;
 	_inTextSelection = false;
+	_selectionIsDirty = false;
 
 	_scrollPos = 0;
 	_editable = false;
@@ -1012,9 +1013,11 @@ uint getNewlinesInString(const Common::U32String &str) {
 }
 
 void MacText::drawSelection(int xoff, int yoff) {
-	if (_selectedText.endY == -1)
+	if (_selectedText.endY == -1 || !_selectionIsDirty)
 		return;
 
+	_selectionIsDirty = false;
+
 	// we check if the selection size is 0, then we don't draw it anymore, and we set the cursor here
 	// it's a small optimize, but can bring us correct behavior
 	if (!_inTextSelection && _selectedText.startX == _selectedText.endX && _selectedText.startY == _selectedText.endY) {
@@ -1144,6 +1147,7 @@ Common::U32String MacText::getSelection(bool formatted, bool newlines) {
 
 void MacText::clearSelection() {
 	_selectedText.endY = _selectedText.startY = -1;
+	_selectionIsDirty = true;
 }
 
 uint MacText::getSelectionIndex(bool start) {
@@ -1232,6 +1236,7 @@ void MacText::setSelection(int pos, bool start) {
 	}
 
 	_contentIsDirty = true;
+	_selectionIsDirty = true;
 }
 
 bool MacText::isCutAllowed() {
@@ -1463,6 +1468,7 @@ bool MacText::processEvent(Common::Event &event) {
 					(_selectedText.endX == _selectedText.startX && _selectedText.endY == _selectedText.startY)) {
 				_selectedText.startY = _selectedText.endY = -1;
 				_contentIsDirty = true;
+				_selectionIsDirty = true;
 
 				if (_menu)
 					_menu->enableCommand("Edit", "Copy", false);
@@ -1531,6 +1537,7 @@ void MacText::startMarking(int x, int y) {
 	_selectedText.endY = -1;
 
 	_inTextSelection = true;
+	_selectionIsDirty = true;
 }
 
 void MacText::updateTextSelection(int x, int y) {
@@ -1547,6 +1554,7 @@ void MacText::updateTextSelection(int x, int y) {
 			_selectedText.endY, _selectedText.endRow, _selectedText.endCol);
 
 	_contentIsDirty = true;
+	_selectionIsDirty = true;
 }
 
 int MacText::getMouseChar(int x, int y) {
diff --git a/graphics/macgui/mactext.h b/graphics/macgui/mactext.h
index a45e81f7038..2e44447b71e 100644
--- a/graphics/macgui/mactext.h
+++ b/graphics/macgui/mactext.h
@@ -246,6 +246,7 @@ private:
 
 	bool _inTextSelection;
 	SelectedText _selectedText;
+	bool _selectionIsDirty;
 
 	MacMenu *_menu;
 };


Commit: 4fcee50d46c3d47fd45ec61d6ba63d8ac333b4d3
    https://github.com/scummvm/scummvm/commit/4fcee50d46c3d47fd45ec61d6ba63d8ac333b4d3
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-09-21T22:12:38+02:00

Commit Message:
GRAPHOCS: MACGUI: Do not force MacText to redraw unless required

Changed paths:
    graphics/macgui/mactextwindow.cpp


diff --git a/graphics/macgui/mactextwindow.cpp b/graphics/macgui/mactextwindow.cpp
index d5edd41eee3..f1ef180f331 100644
--- a/graphics/macgui/mactextwindow.cpp
+++ b/graphics/macgui/mactextwindow.cpp
@@ -202,7 +202,7 @@ bool MacTextWindow::draw(bool forceRedraw) {
 	_contentIsDirty = false;
 
 	// Compose
-	_mactext->draw(_composeSurface, true);
+	_mactext->draw(_composeSurface, _inputIsDirty || forceRedraw);
 
 	return true;
 }


Commit: 78bc41ea8d1aed395d251f19021b376771bbf778
    https://github.com/scummvm/scummvm/commit/78bc41ea8d1aed395d251f19021b376771bbf778
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-09-21T22:12:39+02:00

Commit Message:
GRAPHICS: MACGUI: Fix cursor and selection positions with non-zero border

Changed paths:
    graphics/macgui/mactext.cpp


diff --git a/graphics/macgui/mactext.cpp b/graphics/macgui/mactext.cpp
index 94aa7b225ad..cda271da2c7 100644
--- a/graphics/macgui/mactext.cpp
+++ b/graphics/macgui/mactext.cpp
@@ -241,8 +241,8 @@ void MacText::init(uint32 fgcolor, uint32 bgcolor, int maxWidth, TextAlign textA
 
 	_menu = nullptr;
 
-	_cursorX = _border;
-	_cursorY = _border;
+	_cursorX = 0;
+	_cursorY = 0;
 	_cursorState = false;
 	_cursorOff = false;
 
@@ -1527,8 +1527,8 @@ void MacText::startMarking(int x, int y) {
 		return;
 
 	Common::Point offset = calculateOffset();
-	x -= getDimensions().left - offset.x;
-	y -= getDimensions().top - offset.y;
+	x -= getDimensions().left + offset.x;
+	y -= getDimensions().top + offset.y;
 
 	y += _scrollPos;
 
@@ -1542,8 +1542,8 @@ void MacText::startMarking(int x, int y) {
 
 void MacText::updateTextSelection(int x, int y) {
 	Common::Point offset = calculateOffset();
-	x -= getDimensions().left - offset.x;
-	y -= getDimensions().top - offset.y;
+	x -= getDimensions().left + offset.x;
+	y -= getDimensions().top + offset.y;
 
 	y += _scrollPos;
 
@@ -2143,7 +2143,7 @@ static void cursorTimerHandler(void *refCon) {
 
 void MacText::updateCursorPos() {
 	if (_canvas._text.empty()) {
-		_cursorX = _cursorY = _border;
+		_cursorX = _cursorY = 0;
 	} else {
 		undrawCursor();
 
@@ -2151,8 +2151,8 @@ void MacText::updateCursorPos() {
 
 		int alignOffset = _canvas.getAlignOffset(_cursorRow);
 
-		_cursorY = _canvas._text[_cursorRow].y - _scrollPos + _border;
-		_cursorX = _canvas.getLineWidth(_cursorRow, false, _cursorCol) + alignOffset + _border;
+		_cursorY = _canvas._text[_cursorRow].y - _scrollPos;
+		_cursorX = _canvas.getLineWidth(_cursorRow, false, _cursorCol) + alignOffset;
 	}
 
 	int cursorHeight = getLineHeight(_cursorRow);


Commit: 100acf2fd05467132a4bf3cdec86b2a1f7a7687a
    https://github.com/scummvm/scummvm/commit/100acf2fd05467132a4bf3cdec86b2a1f7a7687a
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-09-21T22:12:39+02:00

Commit Message:
JANITORIAL: Remove trailing spaces

Changed paths:
    graphics/macgui/mactext-canvas.cpp


diff --git a/graphics/macgui/mactext-canvas.cpp b/graphics/macgui/mactext-canvas.cpp
index 387604bb8dd..c429864e1d5 100644
--- a/graphics/macgui/mactext-canvas.cpp
+++ b/graphics/macgui/mactext-canvas.cpp
@@ -94,7 +94,7 @@ void MacTextCanvas::chopChunk(const Common::U32String &str, int *curLinePtr, int
 		if (w < maxWidth) {
 			chunk->text += str;	// Only append if within bounds
 		}
-		
+
 		getLineCharWidth(curLine, true);
 
 		return;
@@ -751,9 +751,9 @@ void MacTextCanvas::render(int from, int to) {
 }
 
 int getStringMaxWordWidth(MacFontRun &format, const Common::U32String &str) {
-	if (str.empty()) 
+	if (str.empty())
 		return 0;
-	
+
 	if (format.plainByteMode()) {
 		Common::StringTokenizer tok(Common::convertFromU32String(str, format.getEncoding()));
 		int maxW = 0;


Commit: 5486674fd9ed48dfdb361c2cc85eb9a0e9d1eba1
    https://github.com/scummvm/scummvm/commit/5486674fd9ed48dfdb361c2cc85eb9a0e9d1eba1
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-09-21T22:12:39+02:00

Commit Message:
GRAPHICS: MACGIU: Fix MacText maxWidth calculation

Changed paths:
    graphics/macgui/mactext.cpp


diff --git a/graphics/macgui/mactext.cpp b/graphics/macgui/mactext.cpp
index cda271da2c7..38716edc41f 100644
--- a/graphics/macgui/mactext.cpp
+++ b/graphics/macgui/mactext.cpp
@@ -355,6 +355,8 @@ int getStringWidth(MacFontRun &format, const Common::U32String &str) {
 }
 
 void MacText::setMaxWidth(int maxWidth) {
+	maxWidth = maxWidth - _border * 2 - _gutter * 2 - _shadow;
+
 	if (maxWidth == _canvas._maxWidth)
 		return;
 


Commit: c8c30f845173e4c0cfa15ec30402eb4ad5233a17
    https://github.com/scummvm/scummvm/commit/c8c30f845173e4c0cfa15ec30402eb4ad5233a17
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-09-21T22:12:39+02:00

Commit Message:
WAGE: Set inner text passing to 1

Changed paths:
    engines/wage/gui.cpp


diff --git a/engines/wage/gui.cpp b/engines/wage/gui.cpp
index 4f29a4da0c5..106df1bf62c 100644
--- a/engines/wage/gui.cpp
+++ b/engines/wage/gui.cpp
@@ -131,7 +131,7 @@ Gui::Gui(WageEngine *engine) {
 
 	uint maxWidth = _screen.w;
 
-	_consoleWindow = _wm->addTextWindow(font, kColorBlack, kColorWhite, maxWidth, Graphics::kTextAlignLeft, _menu);
+	_consoleWindow = _wm->addTextWindow(font, kColorBlack, kColorWhite, maxWidth, Graphics::kTextAlignLeft, _menu, 1);
 	_consoleWindow->setCallback(consoleWindowCallback, this);
 	_consoleWindow->setBorderColor(kColorWhite);
 	_consoleWindow->setEditable(true);




More information about the Scummvm-git-logs mailing list