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

sev- noreply at scummvm.org
Sun Feb 16 17:09:33 UTC 2025


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

Summary:
88ebf3dc9d TESTBED: Fix crash when requested video file fails to load
5b3953aaf6 COMMON: FORMATS: Report QTVR 2.0 movies as unsupported
8676fb1fba COMMON: FORMATS: Simplified usage of QTVR node type
a65f2c0b94 DIRECTOR: XTRAS: Implement m_bgOneKey() in KeyPoll Xtra
502209a7df DIRECTOR: XTRAS: Implement QTVR Update method
c81553fb60 VIDEO: QTVR: Print out unhandled node types
154000d2d2 DIRECTOR: XTRAS: Process EVENT_QUIT in QTVR Xtra
10ee20b3e6 VIDEO: QTVR: Distinguish between clicked and roll over hotspot
05555c2a37 DIRECTOR: XTRAS: Initial implementation of m_QTVRMouseDown()
c3b3dfecaf VIDEO: QTVR: Cleanup obsolete method


Commit: 88ebf3dc9dd4b666790b5c7c84bac56c0c6a4efb
    https://github.com/scummvm/scummvm/commit/88ebf3dc9dd4b666790b5c7c84bac56c0c6a4efb
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-02-16T18:09:16+01:00

Commit Message:
TESTBED: Fix crash when requested video file fails to load

Changed paths:
    engines/testbed/video.cpp


diff --git a/engines/testbed/video.cpp b/engines/testbed/video.cpp
index b324a3b30ba..216e9a81048 100644
--- a/engines/testbed/video.cpp
+++ b/engines/testbed/video.cpp
@@ -59,7 +59,6 @@ Common::Error Videotests::videoTest(Common::SeekableReadStream *stream, const Co
 	Video::QuickTimeDecoder *video = new Video::QuickTimeDecoder();
 	if (!video->loadStream(stream)) {
 		warning("Cannot open video %s", name.c_str());
-		delete stream;
 		delete video;
 		return Common::kReadingFailed;
 	}


Commit: 5b3953aaf6b84f8f2f7d420848eb27730efdfb25
    https://github.com/scummvm/scummvm/commit/5b3953aaf6b84f8f2f7d420848eb27730efdfb25
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-02-16T18:09:16+01:00

Commit Message:
COMMON: FORMATS: Report QTVR 2.0 movies as unsupported

Changed paths:
    common/formats/quicktime.cpp


diff --git a/common/formats/quicktime.cpp b/common/formats/quicktime.cpp
index 7e2f34e1e43..5b7f365055a 100644
--- a/common/formats/quicktime.cpp
+++ b/common/formats/quicktime.cpp
@@ -892,6 +892,11 @@ int QuickTimeParser::readCTYP(Atom atom) {
 		_qtvrType = QTVRType::PANORAMA;
 		break;
 
+	case MKTAG('q', 't', 'v', 'r'):
+		_qtvrType = QTVRType::OTHER;
+		warning("QuickTimeParser::readCTYP(): QTVR 2.0 files are not yet supported");
+		break;
+
 	default:
 		_qtvrType = QTVRType::OTHER;
 		warning("QuickTimeParser::readCTYP(): Unknown QTVR Type ('%s')", tag2str(ctype));


Commit: 8676fb1fba79461fbe9fbc5163db4e899fb91daa
    https://github.com/scummvm/scummvm/commit/8676fb1fba79461fbe9fbc5163db4e899fb91daa
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-02-16T18:09:16+01:00

Commit Message:
COMMON: FORMATS: Simplified usage of QTVR node type

Changed paths:
    common/formats/quicktime.h


diff --git a/common/formats/quicktime.h b/common/formats/quicktime.h
index 30b33c70caa..44f6d512760 100644
--- a/common/formats/quicktime.h
+++ b/common/formats/quicktime.h
@@ -198,13 +198,13 @@ public:
 	};
 
 	enum class HotSpotType {
-		undefined,
-		anim,
-		cnod,
-		link,
-		navg,
-		soun,
-		cmov,
+		undefined = MKTAG('u','n','d','f'),
+		anim = MKTAG('a','n','i','m'),
+		cnod = MKTAG('c','n','o','d'),
+		link = MKTAG('l','i','n','k'),
+		navg = MKTAG('n','a','v','g'),
+		soun = MKTAG('s','o','u','n'),
+		cmov = MKTAG('c','m','o','v'),
 	};
 
 	struct PanoHotSpot {


Commit: a65f2c0b9486f80bddd67ba5079d0a33d8d711dd
    https://github.com/scummvm/scummvm/commit/a65f2c0b9486f80bddd67ba5079d0a33d8d711dd
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-02-16T18:09:16+01:00

Commit Message:
DIRECTOR: XTRAS: Implement m_bgOneKey() in KeyPoll Xtra

Now it is possible to skip intro in Safecracker. Press ESC.

Changed paths:
    engines/director/lingo/xtras/keypoll.cpp


diff --git a/engines/director/lingo/xtras/keypoll.cpp b/engines/director/lingo/xtras/keypoll.cpp
index c5b191d01ae..ba23c9cbb52 100644
--- a/engines/director/lingo/xtras/keypoll.cpp
+++ b/engines/director/lingo/xtras/keypoll.cpp
@@ -105,7 +105,29 @@ void KeypollXtra::m_new(int nargs) {
 }
 
 XOBJSTUB(KeypollXtra::m_xtra, 0)
-XOBJSTUB(KeypollXtra::m_bgOneKey, 0)
+
+void KeypollXtra::m_bgOneKey(int nargs) {
+	ARGNUMCHECK(1);
+
+	Common::Event event;
+
+	int requestedKey = g_lingo->pop().asInt();
+
+	while (g_system->getEventManager()->pollEvent(event)) {
+		switch (event.type) {
+		case Common::EVENT_KEYDOWN:
+			if (event.kbd.keycode == requestedKey) {
+				g_lingo->push(1);
+				return;
+			}
+		default:
+			break;
+		}
+	}
+
+	g_lingo->push(0);
+}
+
 XOBJSTUB(KeypollXtra::m_bgAllKeys, 0)
 
 }


Commit: 502209a7dfa2b880a071f613fcc17f1b80666f28
    https://github.com/scummvm/scummvm/commit/502209a7dfa2b880a071f613fcc17f1b80666f28
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-02-16T18:09:16+01:00

Commit Message:
DIRECTOR: XTRAS: Implement QTVR Update method

Changed paths:
    engines/director/lingo/xtras/qtvrxtra.cpp


diff --git a/engines/director/lingo/xtras/qtvrxtra.cpp b/engines/director/lingo/xtras/qtvrxtra.cpp
index 654248c6ab1..964e50aaa9d 100644
--- a/engines/director/lingo/xtras/qtvrxtra.cpp
+++ b/engines/director/lingo/xtras/qtvrxtra.cpp
@@ -385,7 +385,13 @@ void QtvrxtraXtra::m_QTVRClose(int nargs) {
 	}
 }
 
-XOBJSTUB(QtvrxtraXtra::m_QTVRUpdate, 0)
+void QtvrxtraXtra::m_QTVRUpdate(int nargs) {
+	QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
+	me->_visible = true;
+
+	m_QTVRIdle(0);
+}
+
 
 void QtvrxtraXtra::m_QTVRGetQTVRType(int nargs) {
 	ARGNUMCHECK(0);


Commit: c81553fb60e4396d46dd7cbb2d8b86de97b684d3
    https://github.com/scummvm/scummvm/commit/c81553fb60e4396d46dd7cbb2d8b86de97b684d3
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-02-16T18:09:17+01:00

Commit Message:
VIDEO: QTVR: Print out unhandled node types

Changed paths:
    video/qtvr_decoder.cpp


diff --git a/video/qtvr_decoder.cpp b/video/qtvr_decoder.cpp
index ee1457542a1..08aa12b98f8 100644
--- a/video/qtvr_decoder.cpp
+++ b/video/qtvr_decoder.cpp
@@ -1156,6 +1156,8 @@ void QuickTimeDecoder::updateQTVRCursor(int16 x, int16 y) {
 			break;
 
 		default:
+			if (hsType != HotSpotType::undefined)
+				warning("Hotspot type: %s", tag2str((uint32)hsType));
 			hsOver = kCursorPanoObjOver;
 			hsDown = kCursorPanoObjDown;
 			hsUp = kCursorPanoObjUp;


Commit: 154000d2d2ea4f22f216197b742583755e3c560d
    https://github.com/scummvm/scummvm/commit/154000d2d2ea4f22f216197b742583755e3c560d
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-02-16T18:09:17+01:00

Commit Message:
DIRECTOR: XTRAS: Process EVENT_QUIT in QTVR Xtra

Changed paths:
    engines/director/lingo/xtras/qtvrxtra.cpp


diff --git a/engines/director/lingo/xtras/qtvrxtra.cpp b/engines/director/lingo/xtras/qtvrxtra.cpp
index 964e50aaa9d..a5a466041a3 100644
--- a/engines/director/lingo/xtras/qtvrxtra.cpp
+++ b/engines/director/lingo/xtras/qtvrxtra.cpp
@@ -490,6 +490,11 @@ void QtvrxtraXtra::m_QTVRMouseOver(int nargs) {
 		if (!me->_rect.contains(pos))
 			break;
 
+		if (event.type == Common::EVENT_QUIT) {
+			g_director->processEventQUIT();
+			break;
+		}
+
 		g_director->delayMillis(10);
 	}
 


Commit: 10ee20b3e61173113f4a4ba79218024f374deeb6
    https://github.com/scummvm/scummvm/commit/10ee20b3e61173113f4a4ba79218024f374deeb6
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-02-16T18:09:17+01:00

Commit Message:
VIDEO: QTVR: Distinguish between clicked and roll over hotspot

Changed paths:
    video/qt_decoder.h
    video/qtvr_decoder.cpp


diff --git a/video/qt_decoder.h b/video/qt_decoder.h
index b040be18701..109505a55e2 100644
--- a/video/qt_decoder.h
+++ b/video/qt_decoder.h
@@ -95,7 +95,9 @@ public:
 	int getCurrentColumn() { return _nextVideoTrack->getCurFrame() % _nav.columns; }
 	void setCurrentColumn(int column);
 
-	const PanoHotSpot *getCurrentHotspot() { return _currentHotspot; }
+	const PanoHotSpot *getCurrentHotspot() { return _rolloverHotspot; }
+	const PanoHotSpot *getRolloverHotspot() { return _rolloverHotspot; }
+	const PanoHotSpot *getClickedHotspot() { return _clickedHotspot; }
 
 	void nudge(const Common::String &direction);
 
@@ -181,7 +183,8 @@ private:
 	int _zoomState = kZoomNone;
 	bool _repeatTimerActive = false;
 
-	const PanoHotSpot *_currentHotspot = nullptr;
+	const PanoHotSpot *_rolloverHotspot = nullptr;
+	const PanoHotSpot *_clickedHotspot = nullptr;
 	bool _renderHotspots = false;
 
 	Graphics::Surface *_scaledSurface;
diff --git a/video/qtvr_decoder.cpp b/video/qtvr_decoder.cpp
index 08aa12b98f8..ff43709b1c3 100644
--- a/video/qtvr_decoder.cpp
+++ b/video/qtvr_decoder.cpp
@@ -929,10 +929,13 @@ void QuickTimeDecoder::handlePanoMouseButton(bool isDown, int16 x, int16 y, bool
 
 		_mouseDrag.x = x;
 		_mouseDrag.y = y;
+
+		if (_rolloverHotspot)
+			_clickedHotspot = _rolloverHotspot;
 	}
 
-	if (!repeat && !isDown && _currentHotspot && _currentHotspot->type == HotSpotType::link && _prevMouse == _mouseDrag) {
-		PanoLink *link = _panoTrack->panoSamples[_currentSample].linkTable.get(_currentHotspot->typeData);
+	if (!repeat && !isDown && _rolloverHotspot && _rolloverHotspot->type == HotSpotType::link && _prevMouse == _mouseDrag) {
+		PanoLink *link = _panoTrack->panoSamples[_currentSample].linkTable.get(_rolloverHotspot->typeData);
 
 		if (link) {
 			goToNode(link->toNodeID);
@@ -1017,10 +1020,10 @@ void QuickTimeDecoder::lookupHotspot(int16 x, int16 y) {
 	int hotspotId = track->lookupHotspot(x, y);
 
 	if (hotspotId && _currentSample != -1) {
-		if (!_currentHotspot || _currentHotspot->id != hotspotId)
-			_currentHotspot = _panoTrack->panoSamples[_currentSample].hotSpotTable.get(hotspotId);
+		if (!_rolloverHotspot || _rolloverHotspot->id != hotspotId)
+			_rolloverHotspot = _panoTrack->panoSamples[_currentSample].hotSpotTable.get(hotspotId);
 	} else {
-		_currentHotspot = nullptr;
+		_rolloverHotspot = nullptr;
 	}
 }
 
@@ -1143,8 +1146,8 @@ void QuickTimeDecoder::updateQTVRCursor(int16 x, int16 y) {
 		// Get hotspot cursors
 		HotSpotType hsType = HotSpotType::undefined;
 
-		if (_currentHotspot)
-			hsType = _currentHotspot->type;
+		if (_rolloverHotspot)
+			hsType = _rolloverHotspot->type;
 
 		int hsOver, hsDown, hsUp;
 
@@ -1164,21 +1167,21 @@ void QuickTimeDecoder::updateQTVRCursor(int16 x, int16 y) {
 			break;
 		}
 
-		if (_currentHotspot) {
-			if (_currentHotspot->mouseOverCursorID)
-				hsOver = _currentHotspot->mouseOverCursorID;
+		if (_rolloverHotspot) {
+			if (_rolloverHotspot->mouseOverCursorID)
+				hsOver = _rolloverHotspot->mouseOverCursorID;
 
-			if (_currentHotspot->mouseDownCursorID)
-				hsDown = _currentHotspot->mouseDownCursorID;
+			if (_rolloverHotspot->mouseDownCursorID)
+				hsDown = _rolloverHotspot->mouseDownCursorID;
 
-			if (_currentHotspot->mouseUpCursorID)
-				hsUp = _currentHotspot->mouseUpCursorID;
+			if (_rolloverHotspot->mouseUpCursorID)
+				hsUp = _rolloverHotspot->mouseUpCursorID;
 		}
 
 		int sensitivity = 5;
 
 		if (!_isMouseButtonDown) {
-			setCursor(_currentHotspot ? hsOver : kCursorPano);
+			setCursor(_rolloverHotspot ? hsOver : kCursorPano);
 		} else {
 			int res = 0;
 			PanoSampleDesc *desc = (PanoSampleDesc *)_panoTrack->sampleDescs[0];
@@ -1236,7 +1239,7 @@ void QuickTimeDecoder::updateQTVRCursor(int16 x, int16 y) {
 			}
 
 			(void)hsUp;
-			setCursor(_cursorDirMap[res] ? _cursorDirMap[res] : _currentHotspot ? hsDown : kCursorPanoNav);
+			setCursor(_cursorDirMap[res] ? _cursorDirMap[res] : _rolloverHotspot ? hsDown : kCursorPanoNav);
 		}
 	}
 }


Commit: 05555c2a3767afaf15092f915e7e67f6343af676
    https://github.com/scummvm/scummvm/commit/05555c2a3767afaf15092f915e7e67f6343af676
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-02-16T18:09:17+01:00

Commit Message:
DIRECTOR: XTRAS: Initial implementation of m_QTVRMouseDown()

Changed paths:
    engines/director/lingo/xtras/qtvrxtra.cpp
    engines/director/lingo/xtras/qtvrxtra.h


diff --git a/engines/director/lingo/xtras/qtvrxtra.cpp b/engines/director/lingo/xtras/qtvrxtra.cpp
index a5a466041a3..a0b845fb7cc 100644
--- a/engines/director/lingo/xtras/qtvrxtra.cpp
+++ b/engines/director/lingo/xtras/qtvrxtra.cpp
@@ -429,7 +429,70 @@ void QtvrxtraXtra::m_QTVRIdle(int nargs) {
 	);
 }
 
-XOBJSTUB(QtvrxtraXtra::m_QTVRMouseDown, 0)
+void QtvrxtraXtra::m_QTVRMouseDown(int nargs) {
+	QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
+	const Common::QuickTimeParser::PanoHotSpot *hotspot;
+
+	Common::Event event;
+	bool cont = true;
+
+	if (nargs != -1337 && g_system->getEventManager()->pollEvent(event)) {
+		if (event.type != Common::EVENT_LBUTTONDOWN)
+			cont = false;
+	}
+
+	if (!cont) {
+		if (me->_video->getQTVRType() == Common::QuickTimeParser::QTVRType::PANORAMA)
+			g_lingo->push(Common::String("pan ,0"));
+		else
+			g_lingo->pushVoid();
+		return;
+	}
+
+	while (true) {
+		Graphics::Surface const *frame = me->_video->decodeNextFrame();
+
+		Graphics::Surface *dither = frame->convertTo(g_director->_wm->_pixelformat, me->_video->getPalette(), 256, g_director->getPalette(), 256, Graphics::kDitherNaive);
+
+		g_director->getCurrentWindow()->getSurface()->copyRectToSurface(
+			dither->getPixels(), dither->pitch, me->_rect.left, me->_rect.top, dither->w, dither->h
+		);
+
+		g_director->getCurrentWindow()->setDirty(true);
+
+		while (g_system->getEventManager()->pollEvent(event)) {
+			me->_widget->processEvent(event);
+
+			if (event.type == Common::EVENT_LBUTTONUP)
+				break;
+		}
+
+		// MouseStillDownHandler
+		// NodeLeaveHandler
+		// PanZoomStartHandler
+
+		g_director->draw();
+
+		if (event.type == Common::EVENT_QUIT) {
+			g_director->processEventQUIT();
+			break;
+		}
+
+		if (event.type == Common::EVENT_LBUTTONUP)
+			break;
+
+		g_director->delayMillis(10);
+	}
+
+	hotspot = me->_video->getClickedHotspot();
+
+	if (!hotspot) {
+		g_lingo->push(Common::String("pan ,0"));
+		return;
+	}
+
+	g_lingo->push(Common::String::format("%s,%d", tag2str((uint32)hotspot->type), hotspot->id));
+}
 
 void QtvrxtraXtra::m_QTVRMouseOver(int nargs) {
 	ARGNUMCHECK(0);
@@ -443,13 +506,15 @@ void QtvrxtraXtra::m_QTVRMouseOver(int nargs) {
 	}
 
 	// Execute handler on first call to MouseOver
-	const Common::QuickTimeParser::PanoHotSpot *hotspot = me->_video->getCurrentHotspot();
+	const Common::QuickTimeParser::PanoHotSpot *hotspot = me->_video->getRolloverHotspot();
 
 	if (!me->_rolloverHotSpotHandler.empty()) {
 		g_lingo->push(hotspot ? hotspot->id : 0);
 		g_lingo->executeHandler(me->_rolloverHotSpotHandler, 1);
 	}
 
+	int nextTick = g_system->getMillis();
+
 	while (true) {
 		Graphics::Surface const *frame = me->_video->decodeNextFrame();
 
@@ -471,20 +536,49 @@ void QtvrxtraXtra::m_QTVRMouseOver(int nargs) {
 					break;
 			}
 
-			hotspot = me->_video->getCurrentHotspot();
+			hotspot = me->_video->getRolloverHotspot();
+
+			if (event.type == Common::EVENT_LBUTTONDOWN) {
+				// MouseDownHandler
+				// PassMouseDown
+
+				//if (!PassMouseDown) {
+				//  g_lingo->push(0);
+				//	return
+				//}
+
+				me->_widget->processEvent(event);
+
+				m_QTVRMouseDown(-1337);
+
+				return; // MouseDown will take care of the return value
+			}
 
 			me->_widget->processEvent(event);
 
-			if (!me->_rolloverHotSpotHandler.empty() && hotspot != me->_video->getCurrentHotspot()) {
+			if (!me->_rolloverHotSpotHandler.empty() && hotspot != me->_video->getRolloverHotspot()) {
 				g_lingo->push(hotspot ? hotspot->id : 0);
 
 				g_lingo->executeHandler(me->_rolloverHotSpotHandler, 1);
 
+				if (me->_exitMouseOver)
+					break;
+
 				// TODO We need to redraw current frame because the handler could change
 				// some fields etc. FIXME
 			}
 		}
 
+		if (g_system->getMillis() > nextTick) {
+			nextTick = g_system->getMillis() + 500;
+
+			if (!me->_mouseOverHandler.empty())
+				g_lingo->executeHandler(me->_mouseOverHandler);
+		}
+
+		if (me->_exitMouseOver)
+			break;
+
 		g_director->draw();
 
 		if (!me->_rect.contains(pos))
@@ -498,11 +592,13 @@ void QtvrxtraXtra::m_QTVRMouseOver(int nargs) {
 		g_director->delayMillis(10);
 	}
 
-	g_lingo->push(Common::String("pan ,0"));
+	if (me->_video->getQTVRType() == Common::QuickTimeParser::QTVRType::PANORAMA)
+		g_lingo->push(0);
+	else
+		g_lingo->pushVoid();
 }
 
 void QtvrxtraXtra::m_QTVRGetPanAngle(int nargs) {
-	g_lingo->printArgs("QtvrxtraXtra::m_QTVRGetPanAngle", nargs);
 	ARGNUMCHECK(0);
 
 	QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
@@ -511,7 +607,6 @@ void QtvrxtraXtra::m_QTVRGetPanAngle(int nargs) {
 }
 
 void QtvrxtraXtra::m_QTVRSetPanAngle(int nargs) {
-	g_lingo->printArgs("QtvrxtraXtra::m_QTVRSetPanAngle", nargs);
 	ARGNUMCHECK(1);
 
 	QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
@@ -520,7 +615,6 @@ void QtvrxtraXtra::m_QTVRSetPanAngle(int nargs) {
 }
 
 void QtvrxtraXtra::m_QTVRGetTiltAngle(int nargs) {
-	g_lingo->printArgs("QtvrxtraXtra::m_QTVRGetTiltAngle", nargs);
 	ARGNUMCHECK(0);
 
 	QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
@@ -529,7 +623,6 @@ void QtvrxtraXtra::m_QTVRGetTiltAngle(int nargs) {
 }
 
 void QtvrxtraXtra::m_QTVRSetTiltAngle(int nargs) {
-	g_lingo->printArgs("QtvrxtraXtra::m_QTVRSetTiltAngle", nargs);
 	ARGNUMCHECK(1);
 
 	QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
@@ -538,7 +631,6 @@ void QtvrxtraXtra::m_QTVRSetTiltAngle(int nargs) {
 }
 
 void QtvrxtraXtra::m_QTVRGetFOV(int nargs) {
-	g_lingo->printArgs("QtvrxtraXtra::m_QTVRGetFOV", nargs);
 	ARGNUMCHECK(0);
 
 	QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
@@ -547,7 +639,6 @@ void QtvrxtraXtra::m_QTVRGetFOV(int nargs) {
 }
 
 void QtvrxtraXtra::m_QTVRSetFOV(int nargs) {
-	g_lingo->printArgs("QtvrxtraXtra::m_QTVRSetFOV", nargs);
 	ARGNUMCHECK(1);
 
 	QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
@@ -685,8 +776,22 @@ void QtvrxtraXtra::m_QTVRSetMouseDownHandler(int nargs) {
 	me->_mouseDownHandler = g_lingo->pop().asString();
 }
 
-XOBJSTUB(QtvrxtraXtra::m_QTVRGetMouseOverHandler, 0)
-XOBJSTUB(QtvrxtraXtra::m_QTVRSetMouseOverHandler, 0)
+void QtvrxtraXtra::m_QTVRGetMouseOverHandler(int nargs) {
+	ARGNUMCHECK(0);
+
+	QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
+
+	g_lingo->push(me->_mouseOverHandler);
+}
+
+void QtvrxtraXtra::m_QTVRSetMouseOverHandler(int nargs) {
+	ARGNUMCHECK(1);
+
+	QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
+
+	me->_mouseOverHandler = g_lingo->pop().asString();
+}
+
 XOBJSTUB(QtvrxtraXtra::m_QTVRGetMouseStillDownHandler, 0)
 XOBJSTUB(QtvrxtraXtra::m_QTVRSetMouseStillDownHandler, 0)
 XOBJSTUB(QtvrxtraXtra::m_QTVRGetNodeLeaveHandler, 0)
@@ -710,7 +815,13 @@ void QtvrxtraXtra::m_QTVRSetRolloverHotSpotHandler(int nargs) {
 	me->_rolloverHotSpotHandler = g_lingo->pop().asString();
 }
 
-XOBJSTUB(QtvrxtraXtra::m_QTVRExitMouseOver, 0)
+void QtvrxtraXtra::m_QTVRExitMouseOver(int nargs) {
+	ARGNUMCHECK(0);
+
+	QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
+
+	me->_exitMouseOver = true;
+}
 
 void QtvrxtraXtra::m_QTVRPassMouseDown(int nargs) {
 	ARGNUMCHECK(0);
diff --git a/engines/director/lingo/xtras/qtvrxtra.h b/engines/director/lingo/xtras/qtvrxtra.h
index 9f40ebd4612..912a7edf18f 100644
--- a/engines/director/lingo/xtras/qtvrxtra.h
+++ b/engines/director/lingo/xtras/qtvrxtra.h
@@ -51,9 +51,11 @@ public:
 	bool _visible;
 
 	bool _passMouseDown;
+	bool _exitMouseOver = false;
 
 	Common::String _rolloverHotSpotHandler;
 	Common::String _mouseDownHandler;
+	Common::String _mouseOverHandler;
 };
 
 namespace QtvrxtraXtra {


Commit: c3b3dfecafa570be1e1cd717d68c3e67dc8a748b
    https://github.com/scummvm/scummvm/commit/c3b3dfecafa570be1e1cd717d68c3e67dc8a748b
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-02-16T18:09:17+01:00

Commit Message:
VIDEO: QTVR: Cleanup obsolete method

Changed paths:
    video/qt_decoder.h


diff --git a/video/qt_decoder.h b/video/qt_decoder.h
index 109505a55e2..0bb5b8bf13b 100644
--- a/video/qt_decoder.h
+++ b/video/qt_decoder.h
@@ -95,7 +95,6 @@ public:
 	int getCurrentColumn() { return _nextVideoTrack->getCurFrame() % _nav.columns; }
 	void setCurrentColumn(int column);
 
-	const PanoHotSpot *getCurrentHotspot() { return _rolloverHotspot; }
 	const PanoHotSpot *getRolloverHotspot() { return _rolloverHotspot; }
 	const PanoHotSpot *getClickedHotspot() { return _clickedHotspot; }
 




More information about the Scummvm-git-logs mailing list