[Scummvm-git-logs] scummvm master -> 26aa07c4d4d0e7c734bf7a95586a4dd5569a8c5e

sev- noreply at scummvm.org
Thu Aug 3 07:49:26 UTC 2023


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

Summary:
f3a6c27df6 GRAPHICS: MACGUI: Add no-border scrollbar, Win95 Border Refactored
6dbbed5d2b DIRECTOR: Release channel widget from window manager if window type
a75ec751ed DIRECTOR: Implement `kScrollableText` text type
14c6939a9c GRAPHICS: MACGUI: Execute window `_callback` in MacTextWindow
442c1a5d41 DIRECTOR: Implement events for scroll type text cast
890f2df187 DIRECTOR: Fix dummy flag
7421ccdc39 DIRECTOR: Fix formatting and change method names
26aa07c4d4 DIRECTOR: High IDs for custom scrollable border


Commit: f3a6c27df61686273d0444ff7ddcd5340f26f916
    https://github.com/scummvm/scummvm/commit/f3a6c27df61686273d0444ff7ddcd5340f26f916
Author: Harishankar Kumar (hari01584 at gmail.com)
Date: 2023-08-03T09:49:20+02:00

Commit Message:
GRAPHICS: MACGUI: Add no-border scrollbar, Win95 Border Refactored

Win95 scrollbar loading is refactored to use existing `borders` array
in `datafiles.cpp`, Added no-border scrollbar for MacOS, Win95.

This is to support scrollable text cast members in Director, which
will be used by `totaldistortion-win` game.
--start-movie="ATD\HD\bbTWRFL2.DXR at 392" totaldistortion-win

Changed paths:
  A devtools/create_macgui/MacOSNoBorderScrollbar_act.bmp
  A devtools/create_macgui/MacOSNoBorderScrollbar_inac.bmp
  A devtools/create_macgui/Win95BorderScrollbar_act.bmp
  A devtools/create_macgui/Win95BorderScrollbar_inac.bmp
  A devtools/create_macgui/Win95NoBorderScrollbar_act.bmp
  R devtools/create_macgui/Win95BorderScrollbar.bmp
    dists/engine-data/macgui.dat
    graphics/macgui/datafiles.cpp
    graphics/macgui/mactextwindow.cpp
    graphics/macgui/macwindow.cpp
    graphics/macgui/macwindow.h
    graphics/macgui/macwindowborder.h


diff --git a/devtools/create_macgui/MacOSNoBorderScrollbar_act.bmp b/devtools/create_macgui/MacOSNoBorderScrollbar_act.bmp
new file mode 100644
index 00000000000..7a578cfd9e5
Binary files /dev/null and b/devtools/create_macgui/MacOSNoBorderScrollbar_act.bmp differ
diff --git a/devtools/create_macgui/MacOSNoBorderScrollbar_inac.bmp b/devtools/create_macgui/MacOSNoBorderScrollbar_inac.bmp
new file mode 100644
index 00000000000..7a578cfd9e5
Binary files /dev/null and b/devtools/create_macgui/MacOSNoBorderScrollbar_inac.bmp differ
diff --git a/devtools/create_macgui/Win95BorderScrollbar.bmp b/devtools/create_macgui/Win95BorderScrollbar_act.bmp
similarity index 100%
rename from devtools/create_macgui/Win95BorderScrollbar.bmp
rename to devtools/create_macgui/Win95BorderScrollbar_act.bmp
diff --git a/devtools/create_macgui/Win95BorderScrollbar_inac.bmp b/devtools/create_macgui/Win95BorderScrollbar_inac.bmp
new file mode 100644
index 00000000000..d2826e27f15
Binary files /dev/null and b/devtools/create_macgui/Win95BorderScrollbar_inac.bmp differ
diff --git a/devtools/create_macgui/Win95NoBorderScrollbar_act.bmp b/devtools/create_macgui/Win95NoBorderScrollbar_act.bmp
new file mode 100644
index 00000000000..1d326fce46f
Binary files /dev/null and b/devtools/create_macgui/Win95NoBorderScrollbar_act.bmp differ
diff --git a/dists/engine-data/macgui.dat b/dists/engine-data/macgui.dat
index b923ed82351..aa65887cabf 100644
Binary files a/dists/engine-data/macgui.dat and b/dists/engine-data/macgui.dat differ
diff --git a/graphics/macgui/datafiles.cpp b/graphics/macgui/datafiles.cpp
index 1432075e16e..d6d14e375c1 100644
--- a/graphics/macgui/datafiles.cpp
+++ b/graphics/macgui/datafiles.cpp
@@ -43,24 +43,27 @@ struct BorderName {
 };
 
 static const BorderName borders[] = {
-	{0x00, "StandardClose",		 { 1,  2, 19,  2,		 2,  2,		false, 25, 0, 0}},
-	{0x01, "ThickNoTitle",		 { 5,  5,  5,  5,		-1, -1,		false, 0,  0, 0}},
-	{0x02, "ThinNoTitle",		 { 1,  1,  1,  1,		-1, -1,		false, 0,  0, 0}},
-	{0x03, "ThinNoTitleShadow",	 { 1,  3,  1,  3,		-1, -1,		false, 0,  0, 0}},
-	{0x04, "StandardClose",		 { 1,  2, 19,  2,		 2,  2,		false, 25, 0, 0}},
-	{0x05, "Thick",				 { 5,  5, 20,  5,		 2,  3,		false, 13, 0, 0}},
-	{0x06, "ThinNoTitle",		 { 1,  1,  1,  1,		-1, -1,		false, 0,  0, 0}},
-	{0x07, "ThinNoTitleShadow",	 { 1,  3,  1,  3,		-1, -1, 	false, 0,  0, 0}},
-	{0x08, "StandardCloseZoom",	 { 1,  2, 19,  2,		 2,  2,		false, 25, 0, 0}},
-	{0x09, "ThickZoom",			 { 5,  5, 20,  5,		 2,  3,		false, 13, 0, 0}},
-	{0x0A, "ThinNoTitle",		 { 1,  1,  1,  1,		-1, -1,		false, 0,  0, 0}},
-	{0x0B, "ThinNoTitleShadow",  { 1,  3,  1,  3,		-1, -1,		false, 0,  0, 0}},
-	{0x0C, "StandardCloseZoom",	 { 1,  2, 19,  2,		 2,  2,		false, 25, 0, 0}},
-	{0x0D, "ThickZoom",			 { 5,  5, 20,  5,		 2,  3,		false, 13, 0, 0}},
-	{0x0E, "ThinNoTitle",		 { 1,  1,  1,  1,		-1, -1,		false, 0,  0, 0}},
-	{0x0F, "ThinNoTitleShadow",  { 1,  3,  1,  3,		-1, -1,		false, 0,  0, 0}},
-	{0x10, "RoundClose",		 { 1,  1, 19,  6,		 1,  1,		true,  25, 0, 0}},
-	{0xFF, "No type",			 {-1, -1, -1, -1,		-1, -1,		false, 0,  0, 0}}
+	{0x00, "StandardClose",		 	{ 1,  2, 19,  2,		 2,  2,		false,	25, 0, 0}},
+	{0x01, "ThickNoTitle",		 	{ 5,  5,  5,  5,		-1, -1,		false,	0,  0, 0}},
+	{0x02, "ThinNoTitle",		 	{ 1,  1,  1,  1,		-1, -1,		false,	0,  0, 0}},
+	{0x03, "ThinNoTitleShadow",	 	{ 1,  3,  1,  3,		-1, -1,		false,	0,  0, 0}},
+	{0x04, "StandardClose",		 	{ 1,  2, 19,  2,		 2,  2,		false,	25, 0, 0}},
+	{0x05, "Thick",				 	{ 5,  5, 20,  5,		 2,  3,		false,	13, 0, 0}},
+	{0x06, "ThinNoTitle",		 	{ 1,  1,  1,  1,		-1, -1,		false,	0,  0, 0}},
+	{0x07, "ThinNoTitleShadow",	 	{ 1,  3,  1,  3,		-1, -1, 	false,	0,  0, 0}},
+	{0x08, "StandardCloseZoom",	 	{ 1,  2, 19,  2,		 2,  2,		false,	25, 0, 0}},
+	{0x09, "ThickZoom",			 	{ 5,  5, 20,  5,		 2,  3,		false,	13, 0, 0}},
+	{0x0A, "ThinNoTitle",		 	{ 1,  1,  1,  1,		-1, -1,		false,	0,  0, 0}},
+	{0x0B, "ThinNoTitleShadow",  	{ 1,  3,  1,  3,		-1, -1,		false,	0,  0, 0}},
+	{0x0C, "StandardCloseZoom",	 	{ 1,  2, 19,  2,		 2,  2,		false,	25, 0, 0}},
+	{0x0D, "ThickZoom",			 	{ 5,  5, 20,  5,		 2,  3,		false,	13, 0, 0}},
+	{0x0E, "ThinNoTitle",		 	{ 1,  1,  1,  1,		-1, -1,		false,	0,  0, 0}},
+	{0x0F, "ThinNoTitleShadow",  	{ 1,  3,  1,  3,		-1, -1,		false,	0,  0, 0}},
+	{0x10, "RoundClose",		 	{ 1,  1, 19,  6,		 1,  1,		true,	25, 0, 0}},
+	{0x7F, "Win95BorderScrollbar",	{ 1,  17, 1,  1,		 1,  1,		true,	25, 15, 17}},
+	{0x80, "Win95NoBorderScrollbar",{ 1,  17, 1,  1,		 1,  1,		true,	25, 15, 17}},
+	{0x81, "MacOSNoBorderScrollbar",{ 1,  17, 1,  1,		 1,  1,		true,	25, 17, 17}},
+	{0xFF, "No type",			 	{-1, -1, -1, -1,		-1, -1,		false,	0,  0, 0}}
 };
 
 Common::String windowTypeName(byte windowType) {
diff --git a/graphics/macgui/mactextwindow.cpp b/graphics/macgui/mactextwindow.cpp
index 1783e4acf38..9e4a5d60006 100644
--- a/graphics/macgui/mactextwindow.cpp
+++ b/graphics/macgui/mactextwindow.cpp
@@ -94,8 +94,8 @@ void MacTextWindow::init(bool cursorHandler) {
 	if (_wm->_mode & kWMModeWin95) {
 		// in win95 mode, we set scrollbar as default
 		_hasScrollBar = true;
-		loadWin95Border("Win95BorderScrollbar.bmp", kWindowBorderScrollbar | kWindowBorderActive);
-		loadWin95Border("Win95BorderScrollbar.bmp",kWindowBorderScrollbar);
+		setBorderType(kWinBorderWin95Scrollbar);
+		loadInternalBorder(kWindowBorderScrollbar | kWindowBorderActive);
 	}
 }
 
diff --git a/graphics/macgui/macwindow.cpp b/graphics/macgui/macwindow.cpp
index 52138045c83..ba7123785d0 100644
--- a/graphics/macgui/macwindow.cpp
+++ b/graphics/macgui/macwindow.cpp
@@ -569,21 +569,8 @@ void MacWindow::setBorderType(int borderType) {
 	}
 }
 
-void MacWindow::loadWin95Border(const Common::String &filename, uint32 flags) {
-	Common::SeekableReadStream *stream = _wm->getFile(filename);
-	if (stream) {
-		Graphics::BorderOffsets offsets;
-		offsets.top = 1;
-		offsets.bottom = 1;
-		offsets.left = 1;
-		offsets.right = 17;
-		offsets.lowerScrollHeight = 15;
-		offsets.upperScrollHeight = 17;
-		offsets.titlePos = 0;
-		offsets.titleTop = 0;
-		loadBorder(*stream, flags, offsets);
-		delete stream;
-	}
+void MacWindow::loadInternalBorder(uint32 flags) {
+	_macBorder.loadInternalBorder(flags);
 }
 
 void MacWindow::addDirtyRect(const Common::Rect &r) {
diff --git a/graphics/macgui/macwindow.h b/graphics/macgui/macwindow.h
index c0e0ee4f4fb..274bb0dc6a7 100644
--- a/graphics/macgui/macwindow.h
+++ b/graphics/macgui/macwindow.h
@@ -334,7 +334,7 @@ public:
 	void loadBorder(Common::SeekableReadStream &file, uint32 flags, BorderOffsets offsets);
 	void setBorder(Graphics::TransparentSurface *surface, uint32 flags, BorderOffsets offsets);
 	void disableBorder();
-	void loadWin95Border(const Common::String &filename, uint32 flags);
+	void loadInternalBorder(uint32 flags);
 	/**
 	 * we better set this before we load the border
 	 * @param scrollbar state
diff --git a/graphics/macgui/macwindowborder.h b/graphics/macgui/macwindowborder.h
index 4d591e86cbe..6cffdb59c0f 100644
--- a/graphics/macgui/macwindowborder.h
+++ b/graphics/macgui/macwindowborder.h
@@ -45,6 +45,12 @@ enum {
 	kWindowBorderMaxFlag   = 1 << 3
 };
 
+enum {
+	kWinBorderWin95Scrollbar = 0x7F,
+	kWindowBorderWin95NoBorderScrollbar,
+	kWindowBorderMacOSNoBorderScrollbar
+};
+
 struct BorderOffsets {
 	int left;
 	int right;


Commit: 6dbbed5d2b6cf73b5c1fabd5de64f3f88f5790bc
    https://github.com/scummvm/scummvm/commit/6dbbed5d2b6cf73b5c1fabd5de64f3f88f5790bc
Author: Harishankar Kumar (hari01584 at gmail.com)
Date: 2023-08-03T09:49:20+02:00

Commit Message:
DIRECTOR: Release channel widget from window manager if window type

Changed paths:
    engines/director/channel.cpp


diff --git a/engines/director/channel.cpp b/engines/director/channel.cpp
index 1a69e5d9106..88f99ed9b73 100644
--- a/engines/director/channel.cpp
+++ b/engines/director/channel.cpp
@@ -98,8 +98,13 @@ Channel& Channel::operator=(const Channel &channel) {
 
 
 Channel::~Channel() {
-	if (_widget)
-		delete _widget;
+	if (_widget) {
+		if(dynamic_cast<Graphics::MacWindow *>(_widget))
+			g_director->_wm->removeWindow((Graphics::MacWindow *)_widget);
+		else
+			delete _widget;
+	}
+
 	if (_mask)
 		delete _mask;
 	if (_sprite)
@@ -618,7 +623,11 @@ void Channel::replaceWidget(CastMemberID previousCastId, bool force) {
 	}
 
 	if (_widget) {
-		delete _widget;
+		// Check if _widget is of type window, in which case we need to remove it from the window manager
+		if(dynamic_cast<Graphics::MacWindow *>(_widget))
+			g_director->_wm->removeWindow((Graphics::MacWindow *)_widget);
+		else
+			delete _widget;
 		_widget = nullptr;
 	}
 


Commit: a75ec751ed622765a8d6b8d214fd69d4d09de528
    https://github.com/scummvm/scummvm/commit/a75ec751ed622765a8d6b8d214fd69d4d09de528
Author: Harishankar Kumar (hari01584 at gmail.com)
Date: 2023-08-03T09:49:20+02:00

Commit Message:
DIRECTOR: Implement `kScrollableText` text type

This patch implements textType kScrollableText, which is used in books
placed in the library of 'totaldistortion'. It uses MacTextWindow to
render the text, and adds a scrollbar to the window.

--start-movie="ATD\HD\bbTWRFL2.DXR at 392" totaldistortion-win

Changed paths:
    engines/director/castmember/text.cpp
    engines/director/castmember/text.h


diff --git a/engines/director/castmember/text.cpp b/engines/director/castmember/text.cpp
index f5c243a0dac..e6f1b4c294d 100644
--- a/engines/director/castmember/text.cpp
+++ b/engines/director/castmember/text.cpp
@@ -20,6 +20,7 @@
  */
 
 #include "graphics/macgui/macbutton.h"
+#include "graphics/macgui/mactextwindow.h"
 
 #include "director/director.h"
 #include "director/cast.h"
@@ -232,6 +233,36 @@ void TextCastMember::importStxt(const Stxt *stxt) {
 	_fontId = macFont.getId();
 }
 
+Graphics::MacWidget *TextCastMember::createWindowOrWidget(Common::Rect &bbox, Channel *channel, Common::Rect dims, Graphics::MacFont *macFont) {
+	Graphics::MacWidget *widget = nullptr;
+
+	if (_textType == kTextTypeScrolling) {
+		Graphics::MacTextWindow *window = (Graphics::MacTextWindow *)g_director->_wm->addTextWindow(macFont, getForeColor(), getBackColor(), _initialRect.width(),
+														  getAlignment(), nullptr, false);
+
+		// Set widget to this window!
+		widget = window;
+
+		// Set configuration
+		window->setBorderType(Graphics::kWindowBorderMacOSNoBorderScrollbar);
+		window->enableScrollbar(true);
+		window->setMode(Graphics::kWindowModeDynamicScrollbar);
+		window->move(bbox.left, bbox.top);
+		window->resize(dims.width(), dims.height());
+		window->setEditable(false);
+		window->setSelectable(false);
+		window->appendText(_ftext);
+		window->draw(true);
+	} else {
+		widget = new Graphics::MacText(g_director->getCurrentWindow(), bbox.left, bbox.top, dims.width(), dims.height(), g_director->_wm, _ftext, macFont, getForeColor(), getBackColor(), _initialRect.width(), getAlignment(), _lineSpacing, _borderSize, _gutterSize, _boxShadow, _textShadow, _textType == kTextTypeFixed);
+		((Graphics::MacText *)widget)->setSelRange(g_director->getCurrentMovie()->_selStart, g_director->getCurrentMovie()->_selEnd);
+		((Graphics::MacText *)widget)->setEditable(channel->_sprite->_editable);
+		((Graphics::MacText *)widget)->draw();
+	}
+
+	return widget;
+}
+
 Graphics::MacWidget *TextCastMember::createWidget(Common::Rect &bbox, Channel *channel, SpriteType spriteType) {
 	Graphics::MacFont *macFont = new Graphics::MacFont(_fontId, _fontSize, _textSlant);
 	Graphics::MacWidget *widget = nullptr;
@@ -258,10 +289,7 @@ Graphics::MacWidget *TextCastMember::createWidget(Common::Rect &bbox, Channel *c
 			dims.right = MAX<int>(dims.right, dims.left + _initialRect.width());
 			dims.bottom = MAX<int>(dims.bottom, dims.top + _initialRect.height());
 		}
-		widget = new Graphics::MacText(g_director->getCurrentWindow(), bbox.left, bbox.top, dims.width(), dims.height(), g_director->_wm, _ftext, macFont, getForeColor(), getBackColor(), _initialRect.width(), getAlignment(), _lineSpacing, _borderSize, _gutterSize, _boxShadow, _textShadow, _textType == kTextTypeFixed);
-		((Graphics::MacText *)widget)->setSelRange(g_director->getCurrentMovie()->_selStart, g_director->getCurrentMovie()->_selEnd);
-		((Graphics::MacText *)widget)->setEditable(channel->_sprite->_editable);
-		((Graphics::MacText *)widget)->draw();
+		widget = createWindowOrWidget(bbox, channel, dims, macFont);
 
 		// since we disable the ability of setActive in setEdtiable, then we need to set active widget manually
 		if (channel->_sprite->_editable) {
diff --git a/engines/director/castmember/text.h b/engines/director/castmember/text.h
index 4db38085f69..0fe628a533d 100644
--- a/engines/director/castmember/text.h
+++ b/engines/director/castmember/text.h
@@ -92,6 +92,8 @@ public:
 	void setRawText(const Common::String &text);
 
 private:
+	Graphics::MacWidget *createWindowOrWidget(Common::Rect &bbox, Channel *channel, Common::Rect dims, Graphics::MacFont *macFont);
+
 	uint32 _bgcolor;
 	uint32 _fgcolor;
 };


Commit: 14c6939a9c45bbf8c97d3e6e3c252202f96c9e50
    https://github.com/scummvm/scummvm/commit/14c6939a9c45bbf8c97d3e6e3c252202f96c9e50
Author: Harishankar Kumar (hari01584 at gmail.com)
Date: 2023-08-03T09:49:20+02:00

Commit Message:
GRAPHICS: MACGUI: Execute window `_callback` in MacTextWindow

This patch ensures that the `_callback` function is executed in the
MacTextWindow class.

Changed paths:
    graphics/macgui/mactextwindow.cpp


diff --git a/graphics/macgui/mactextwindow.cpp b/graphics/macgui/mactextwindow.cpp
index 9e4a5d60006..04acee7f148 100644
--- a/graphics/macgui/mactextwindow.cpp
+++ b/graphics/macgui/mactextwindow.cpp
@@ -495,6 +495,10 @@ bool MacTextWindow::processEvent(Common::Event &event) {
 	}
 
 	if (click == kBorderInner) {
+		// Call callback for processing any events
+		if (_callback)
+			(*_callback)(click, event, _dataPtr);
+
 		if (!_selectable)
 			return false;
 


Commit: 442c1a5d41dc7b7ebd199b8bf71490ea0695014b
    https://github.com/scummvm/scummvm/commit/442c1a5d41dc7b7ebd199b8bf71490ea0695014b
Author: Harishankar Kumar (hari01584 at gmail.com)
Date: 2023-08-03T09:49:20+02:00

Commit Message:
DIRECTOR: Implement events for scroll type text cast

This patch implements events for scrolltype text cast members, callbacks
in MacTextWindow is used to redirect events to director engine.

`ATD\HD\bbTWRFL2.DXR at 392` of 'totaldistortion-win' uses `mouseUp` score
script attached to scrolltype text cast member, which when clicked calls
`getMouseLine` to find the clicked book, thus opening it.

Changed paths:
    engines/director/castmember/text.cpp
    engines/director/channel.cpp
    graphics/macgui/mactextwindow.cpp
    graphics/macgui/mactextwindow.h


diff --git a/engines/director/castmember/text.cpp b/engines/director/castmember/text.cpp
index e6f1b4c294d..6fdfed8dc6a 100644
--- a/engines/director/castmember/text.cpp
+++ b/engines/director/castmember/text.cpp
@@ -19,6 +19,8 @@
  *
  */
 
+#include "common/events.h"
+
 #include "graphics/macgui/macbutton.h"
 #include "graphics/macgui/mactextwindow.h"
 
@@ -233,20 +235,25 @@ void TextCastMember::importStxt(const Stxt *stxt) {
 	_fontId = macFont.getId();
 }
 
+bool myWindowCallback(Graphics::WindowClick click, Common::Event &event, void *ptr) {
+	return g_director->getCurrentMovie()->processEvent(event);
+}
+
 Graphics::MacWidget *TextCastMember::createWindowOrWidget(Common::Rect &bbox, Channel *channel, Common::Rect dims, Graphics::MacFont *macFont) {
 	Graphics::MacWidget *widget = nullptr;
 
-	if (_textType == kTextTypeScrolling) {
+	if (_textType == kTextTypeScrolling || true) {
 		Graphics::MacTextWindow *window = (Graphics::MacTextWindow *)g_director->_wm->addTextWindow(macFont, getForeColor(), getBackColor(), _initialRect.width(),
 														  getAlignment(), nullptr, false);
-
+		// Set callback so that we can process events like mouse clicks
+		window->setCallback(myWindowCallback, window);
 		// Set widget to this window!
 		widget = window;
 
 		// Set configuration
 		window->setBorderType(Graphics::kWindowBorderMacOSNoBorderScrollbar);
 		window->enableScrollbar(true);
-		window->setMode(Graphics::kWindowModeDynamicScrollbar);
+		// window->setMode(Graphics::kWindowModeDynamicScrollbar);
 		window->move(bbox.left, bbox.top);
 		window->resize(dims.width(), dims.height());
 		window->setEditable(false);
diff --git a/engines/director/channel.cpp b/engines/director/channel.cpp
index 88f99ed9b73..c2d553adb4d 100644
--- a/engines/director/channel.cpp
+++ b/engines/director/channel.cpp
@@ -32,6 +32,7 @@
 #include "director/castmember/filmloop.h"
 
 #include "graphics/macgui/mactext.h"
+#include "graphics/macgui/mactextwindow.h"
 #include "graphics/macgui/macbutton.h"
 
 namespace Director {
@@ -720,6 +721,10 @@ 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);
 }
 
diff --git a/graphics/macgui/mactextwindow.cpp b/graphics/macgui/mactextwindow.cpp
index 04acee7f148..1012efc21b3 100644
--- a/graphics/macgui/mactextwindow.cpp
+++ b/graphics/macgui/mactextwindow.cpp
@@ -363,6 +363,14 @@ Common::U32String MacTextWindow::cutSelection() {
 	return selection;
 }
 
+int MacTextWindow::getMouseLine(int x, int y) {
+	// TODO: Improve the algorithm here, since after long scrolling there is
+	// sometimes error of +2 rows
+	x -= getInnerDimensions().left;
+	y -= getInnerDimensions().top + kConScrollStep;
+	return _mactext->getMouseLine(x, y); 
+}
+
 void MacTextWindow::calcScrollBar() {
 	// since this function only able for the window which has scroll bar
 	// thus, if it doesn't has scrollbar, then we don't have to calc it
diff --git a/graphics/macgui/mactextwindow.h b/graphics/macgui/mactextwindow.h
index aea850f5104..cc106489308 100644
--- a/graphics/macgui/mactextwindow.h
+++ b/graphics/macgui/mactextwindow.h
@@ -64,6 +64,7 @@ public:
 	Common::U32String cutSelection();
 	const SelectedText *getSelectedText() { return &_selectedText; }
 	int getTextHeight() { return _mactext->getTextHeight(); }
+	int getMouseLine(int x, int y);
 
 	/**
 	 * if we want to draw the text which color is not black, then we need to set _textColorRGB


Commit: 890f2df18792b50f25251f5d8cf59bf25f834cd8
    https://github.com/scummvm/scummvm/commit/890f2df18792b50f25251f5d8cf59bf25f834cd8
Author: Harishankar Kumar (hari01584 at gmail.com)
Date: 2023-08-03T09:49:20+02:00

Commit Message:
DIRECTOR: Fix dummy flag

Changed paths:
    engines/director/castmember/text.cpp


diff --git a/engines/director/castmember/text.cpp b/engines/director/castmember/text.cpp
index 6fdfed8dc6a..00391dcdb19 100644
--- a/engines/director/castmember/text.cpp
+++ b/engines/director/castmember/text.cpp
@@ -242,7 +242,7 @@ bool myWindowCallback(Graphics::WindowClick click, Common::Event &event, void *p
 Graphics::MacWidget *TextCastMember::createWindowOrWidget(Common::Rect &bbox, Channel *channel, Common::Rect dims, Graphics::MacFont *macFont) {
 	Graphics::MacWidget *widget = nullptr;
 
-	if (_textType == kTextTypeScrolling || true) {
+	if (_textType == kTextTypeScrolling) {
 		Graphics::MacTextWindow *window = (Graphics::MacTextWindow *)g_director->_wm->addTextWindow(macFont, getForeColor(), getBackColor(), _initialRect.width(),
 														  getAlignment(), nullptr, false);
 		// Set callback so that we can process events like mouse clicks


Commit: 7421ccdc39304d191157618cb1a08c903910bb74
    https://github.com/scummvm/scummvm/commit/7421ccdc39304d191157618cb1a08c903910bb74
Author: Harishankar Kumar (hari01584 at gmail.com)
Date: 2023-08-03T09:49:20+02:00

Commit Message:
DIRECTOR: Fix formatting and change method names

Changed paths:
    engines/director/castmember/text.cpp
    engines/director/channel.cpp


diff --git a/engines/director/castmember/text.cpp b/engines/director/castmember/text.cpp
index 00391dcdb19..9a4136b3873 100644
--- a/engines/director/castmember/text.cpp
+++ b/engines/director/castmember/text.cpp
@@ -235,7 +235,7 @@ void TextCastMember::importStxt(const Stxt *stxt) {
 	_fontId = macFont.getId();
 }
 
-bool myWindowCallback(Graphics::WindowClick click, Common::Event &event, void *ptr) {
+bool textWindowCallback(Graphics::WindowClick click, Common::Event &event, void *ptr) {
 	return g_director->getCurrentMovie()->processEvent(event);
 }
 
@@ -246,7 +246,7 @@ Graphics::MacWidget *TextCastMember::createWindowOrWidget(Common::Rect &bbox, Ch
 		Graphics::MacTextWindow *window = (Graphics::MacTextWindow *)g_director->_wm->addTextWindow(macFont, getForeColor(), getBackColor(), _initialRect.width(),
 														  getAlignment(), nullptr, false);
 		// Set callback so that we can process events like mouse clicks
-		window->setCallback(myWindowCallback, window);
+		window->setCallback(textWindowCallback, window);
 		// Set widget to this window!
 		widget = window;
 
diff --git a/engines/director/channel.cpp b/engines/director/channel.cpp
index c2d553adb4d..dfea4e5aebb 100644
--- a/engines/director/channel.cpp
+++ b/engines/director/channel.cpp
@@ -100,7 +100,7 @@ Channel& Channel::operator=(const Channel &channel) {
 
 Channel::~Channel() {
 	if (_widget) {
-		if(dynamic_cast<Graphics::MacWindow *>(_widget))
+		if (dynamic_cast<Graphics::MacWindow *>(_widget))
 			g_director->_wm->removeWindow((Graphics::MacWindow *)_widget);
 		else
 			delete _widget;
@@ -625,7 +625,7 @@ void Channel::replaceWidget(CastMemberID previousCastId, bool force) {
 
 	if (_widget) {
 		// Check if _widget is of type window, in which case we need to remove it from the window manager
-		if(dynamic_cast<Graphics::MacWindow *>(_widget))
+		if (dynamic_cast<Graphics::MacWindow *>(_widget))
 			g_director->_wm->removeWindow((Graphics::MacWindow *)_widget);
 		else
 			delete _widget;


Commit: 26aa07c4d4d0e7c734bf7a95586a4dd5569a8c5e
    https://github.com/scummvm/scummvm/commit/26aa07c4d4d0e7c734bf7a95586a4dd5569a8c5e
Author: Harishankar Kumar (hari01584 at gmail.com)
Date: 2023-08-03T09:49:20+02:00

Commit Message:
DIRECTOR: High IDs for custom scrollable border

This patch bumps IDs of scrollable border to 0x1000 and above, so that
they don't conflict with IDs normal borders, additionally to support this
change windowType is changed from `byte` type to `uint32` type.

Changed paths:
    graphics/macgui/datafiles.cpp
    graphics/macgui/macwindowborder.h
    graphics/macgui/macwindowmanager.h


diff --git a/graphics/macgui/datafiles.cpp b/graphics/macgui/datafiles.cpp
index d6d14e375c1..bd81dfccd99 100644
--- a/graphics/macgui/datafiles.cpp
+++ b/graphics/macgui/datafiles.cpp
@@ -37,36 +37,36 @@ namespace Graphics {
 #define MACGUI_DATA_BUNDLE Common::String("macgui.dat")
 
 struct BorderName {
-	byte type;
+	uint32 type;
 	const char *name;
 	BorderOffsets offsets;
 };
 
 static const BorderName borders[] = {
-	{0x00, "StandardClose",		 	{ 1,  2, 19,  2,		 2,  2,		false,	25, 0, 0}},
-	{0x01, "ThickNoTitle",		 	{ 5,  5,  5,  5,		-1, -1,		false,	0,  0, 0}},
-	{0x02, "ThinNoTitle",		 	{ 1,  1,  1,  1,		-1, -1,		false,	0,  0, 0}},
-	{0x03, "ThinNoTitleShadow",	 	{ 1,  3,  1,  3,		-1, -1,		false,	0,  0, 0}},
-	{0x04, "StandardClose",		 	{ 1,  2, 19,  2,		 2,  2,		false,	25, 0, 0}},
-	{0x05, "Thick",				 	{ 5,  5, 20,  5,		 2,  3,		false,	13, 0, 0}},
-	{0x06, "ThinNoTitle",		 	{ 1,  1,  1,  1,		-1, -1,		false,	0,  0, 0}},
-	{0x07, "ThinNoTitleShadow",	 	{ 1,  3,  1,  3,		-1, -1, 	false,	0,  0, 0}},
-	{0x08, "StandardCloseZoom",	 	{ 1,  2, 19,  2,		 2,  2,		false,	25, 0, 0}},
-	{0x09, "ThickZoom",			 	{ 5,  5, 20,  5,		 2,  3,		false,	13, 0, 0}},
-	{0x0A, "ThinNoTitle",		 	{ 1,  1,  1,  1,		-1, -1,		false,	0,  0, 0}},
-	{0x0B, "ThinNoTitleShadow",  	{ 1,  3,  1,  3,		-1, -1,		false,	0,  0, 0}},
-	{0x0C, "StandardCloseZoom",	 	{ 1,  2, 19,  2,		 2,  2,		false,	25, 0, 0}},
-	{0x0D, "ThickZoom",			 	{ 5,  5, 20,  5,		 2,  3,		false,	13, 0, 0}},
-	{0x0E, "ThinNoTitle",		 	{ 1,  1,  1,  1,		-1, -1,		false,	0,  0, 0}},
-	{0x0F, "ThinNoTitleShadow",  	{ 1,  3,  1,  3,		-1, -1,		false,	0,  0, 0}},
-	{0x10, "RoundClose",		 	{ 1,  1, 19,  6,		 1,  1,		true,	25, 0, 0}},
-	{0x7F, "Win95BorderScrollbar",	{ 1,  17, 1,  1,		 1,  1,		true,	25, 15, 17}},
-	{0x80, "Win95NoBorderScrollbar",{ 1,  17, 1,  1,		 1,  1,		true,	25, 15, 17}},
-	{0x81, "MacOSNoBorderScrollbar",{ 1,  17, 1,  1,		 1,  1,		true,	25, 17, 17}},
-	{0xFF, "No type",			 	{-1, -1, -1, -1,		-1, -1,		false,	0,  0, 0}}
+	{0x00, 					"StandardClose",			{ 1,  2, 19,  2,		 2,  2,		false,	25, 0, 0}},
+	{0x01, 					"ThickNoTitle",		 		{ 5,  5,  5,  5,		-1, -1,		false,	0,  0, 0}},
+	{0x02, 					"ThinNoTitle",		 		{ 1,  1,  1,  1,		-1, -1,		false,	0,  0, 0}},
+	{0x03, 					"ThinNoTitleShadow",		{ 1,  3,  1,  3,		-1, -1,		false,	0,  0, 0}},
+	{0x04, 					"StandardClose",			{ 1,  2, 19,  2,		 2,  2,		false,	25, 0, 0}},
+	{0x05, 					"Thick",					{ 5,  5, 20,  5,		 2,  3,		false,	13, 0, 0}},
+	{0x06, 					"ThinNoTitle",		 		{ 1,  1,  1,  1,		-1, -1,		false,	0,  0, 0}},
+	{0x07, 					"ThinNoTitleShadow",		{ 1,  3,  1,  3,		-1, -1, 	false,	0,  0, 0}},
+	{0x08, 					"StandardCloseZoom",		{ 1,  2, 19,  2,		 2,  2,		false,	25, 0, 0}},
+	{0x09, 					"ThickZoom",				{ 5,  5, 20,  5,		 2,  3,		false,	13, 0, 0}},
+	{0x0A, 					"ThinNoTitle",		 		{ 1,  1,  1,  1,		-1, -1,		false,	0,  0, 0}},
+	{0x0B, 					"ThinNoTitleShadow",  		{ 1,  3,  1,  3,		-1, -1,		false,	0,  0, 0}},
+	{0x0C, 					"StandardCloseZoom",		{ 1,  2, 19,  2,		 2,  2,		false,	25, 0, 0}},
+	{0x0D, 					"ThickZoom",				{ 5,  5, 20,  5,		 2,  3,		false,	13, 0, 0}},
+	{0x0E, 					"ThinNoTitle",		 		{ 1,  1,  1,  1,		-1, -1,		false,	0,  0, 0}},
+	{0x0F, 					"ThinNoTitleShadow",  		{ 1,  3,  1,  3,		-1, -1,		false,	0,  0, 0}},
+	{0x10, 					"RoundClose",		 		{ 1,  1, 19,  6,		 1,  1,		true,	25, 0, 0}},
+	{kBorderScroll + 0x00,	"Win95BorderScrollbar",		{ 1,  17, 1,  1,		 1,  1,		true,	25, 15, 17}},
+	{kBorderScroll + 0x01, 	"Win95NoBorderScrollbar",	{ 1,  17, 1,  1,		 1,  1,		true,	25, 15, 17}},
+	{kBorderScroll + 0x02, 	"MacOSNoBorderScrollbar",	{ 1,  17, 1,  1,		 1,  1,		true,	25, 17, 17}},
+	{0xFF, 					"No type",			 		{-1, -1, -1, -1,		-1, -1,		false,	0,  0, 0}}
 };
 
-Common::String windowTypeName(byte windowType) {
+Common::String windowTypeName(uint32 windowType) {
 	int i = 0;
 	while (borders[i].type != 0xFF) {
 		if (borders[i].type == windowType) {
@@ -88,7 +88,7 @@ void MacWindowManager::cleanupDataBundle() {
 	delete _dataBundle;
 }
 
-BorderOffsets MacWindowManager::getBorderOffsets(byte windowType) {
+BorderOffsets MacWindowManager::getBorderOffsets(uint32 windowType) {
 	int i = 0;
 	while (borders[i].type != 0xFF) {
 		if (borders[i].type == windowType)
@@ -98,7 +98,7 @@ BorderOffsets MacWindowManager::getBorderOffsets(byte windowType) {
 	return borders[i].offsets;
 }
 
-Common::SeekableReadStream *MacWindowManager::getBorderFile(byte windowType, uint32 flags) {
+Common::SeekableReadStream *MacWindowManager::getBorderFile(uint32 windowType, uint32 flags) {
 	if (!_dataBundle)
 		return NULL;
 
diff --git a/graphics/macgui/macwindowborder.h b/graphics/macgui/macwindowborder.h
index 6cffdb59c0f..b4cfb1ad553 100644
--- a/graphics/macgui/macwindowborder.h
+++ b/graphics/macgui/macwindowborder.h
@@ -46,7 +46,11 @@ enum {
 };
 
 enum {
-	kWinBorderWin95Scrollbar = 0x7F,
+	kBorderScroll = 1000
+};
+
+enum {
+	kWinBorderWin95Scrollbar = kBorderScroll + 0x00,
 	kWindowBorderWin95NoBorderScrollbar,
 	kWindowBorderMacOSNoBorderScrollbar
 };
diff --git a/graphics/macgui/macwindowmanager.h b/graphics/macgui/macwindowmanager.h
index afb9f0a0e98..cf7cecc563c 100644
--- a/graphics/macgui/macwindowmanager.h
+++ b/graphics/macgui/macwindowmanager.h
@@ -359,8 +359,8 @@ public:
 	void cleanupDataBundle();
 	void cleanupDesktopBmp();
 
-	BorderOffsets getBorderOffsets(byte windowType);
-	Common::SeekableReadStream *getBorderFile(byte windowType, uint32 flags);
+	BorderOffsets getBorderOffsets(uint32 windowType);
+	Common::SeekableReadStream *getBorderFile(uint32 windowType, uint32 flags);
 	Common::SeekableReadStream *getFile(const Common::String &filename);
 
 	void setTextInClipboard(const Common::U32String &str);




More information about the Scummvm-git-logs mailing list