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

sev- noreply at scummvm.org
Sat Feb 15 19:08:39 UTC 2025


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

Summary:
01a8a4ddf3 VIDEO: QTVR: Implement getCurrentNodeID() method
ac038a1198 DIRECTOR: XTRAS: Remove incorrectly implemented QTVR Xtra methods
9ee64db215 DIRECTOR: LINGO: Do not blow up during context-less execution
15a870c584 COMMON: FORMATS: Expose QTVR structures to the outer world
86f8977ed5 DIRECTOR: LINGO: Allow execution handlers with arguments
f217ece80c VIDEO: QTVR: Expose current hotspot via API
cf53fdd016 DIRECTOR: XTRAS: Partial implementation of m_QTVRMouseOver in QTVR Xtra


Commit: 01a8a4ddf3ab2b36cf2f7126cf1f018430eb10a3
    https://github.com/scummvm/scummvm/commit/01a8a4ddf3ab2b36cf2f7126cf1f018430eb10a3
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-02-15T20:08:26+01:00

Commit Message:
VIDEO: QTVR: Implement getCurrentNodeID() method

Changed paths:
    video/qt_decoder.h


diff --git a/video/qt_decoder.h b/video/qt_decoder.h
index db5cfc0f1d7..ccf6101dfa7 100644
--- a/video/qt_decoder.h
+++ b/video/qt_decoder.h
@@ -88,6 +88,7 @@ public:
 	void setTiltAngle(float tiltAngle) { _tiltAngle = tiltAngle; }
 	float getFOV() const { return _fov; }
 	bool setFOV(float fov);
+	int getCurrentNodeID() { return _currentSample == -1 ? 0 : _panoTrack->panoSamples[_currentSample].hdr.nodeID; }
 
 	int getCurrentRow() { return _nextVideoTrack->getCurFrame() / _nav.columns; }
 	void setCurrentRow(int row);


Commit: ac038a1198e7fb188276ebc744d0ef8d72b4ccde
    https://github.com/scummvm/scummvm/commit/ac038a1198e7fb188276ebc744d0ef8d72b4ccde
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-02-15T20:08:26+01:00

Commit Message:
DIRECTOR: XTRAS: Remove incorrectly implemented QTVR Xtra methods

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 def5113fa5f..c4773a6bbbd 100644
--- a/engines/director/lingo/xtras/qtvrxtra.cpp
+++ b/engines/director/lingo/xtras/qtvrxtra.cpp
@@ -243,12 +243,8 @@ QtvrxtraXtraObject::QtvrxtraXtraObject(ObjectType ObjectType) :Object<QtvrxtraXt
 	_video = nullptr;
 
 	_visible = false;
-	_quality = 0.0f;
 
-	_transitionMode = "normal";
-	_transitionSpeed = 1.0f;
-
-	_updateMode = "normal";
+	_passMouseDown = false;
 
 	_widget = nullptr;
 }
@@ -420,27 +416,8 @@ void QtvrxtraXtra::m_QTVRIdle(int nargs) {
 	);
 }
 
-void QtvrxtraXtra::m_QTVRMouseDown(int nargs) {
-	g_lingo->printSTUBWithArglist("QtvrxtraXtra::m_QTVRMouseDown", nargs);
-	ARGNUMCHECK(0);
-
-	QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
-
-	me->_capEventsMouseDown = true;
-
-	g_lingo->push(Datum(0));
-}
-
-void QtvrxtraXtra::m_QTVRMouseOver(int nargs) {
-	g_lingo->printSTUBWithArglist("QtvrxtraXtra::m_QTVRMouseOver", nargs);
-	ARGNUMCHECK(0);
-
-	QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
-
-	me->_capEventsMouseOver = true;
-
-	g_lingo->push(Datum(0));
-}
+XOBJSTUB(QtvrxtraXtra::m_QTVRMouseDown, 0)
+XOBJSTUB(QtvrxtraXtra::m_QTVRMouseOver, 0)
 
 void QtvrxtraXtra::m_QTVRGetPanAngle(int nargs) {
 	g_lingo->printArgs("QtvrxtraXtra::m_QTVRGetPanAngle", nargs);
@@ -509,108 +486,30 @@ XOBJSTUB(QtvrxtraXtra::m_QTVRGetObjectViewAngles, 0)
 XOBJSTUB(QtvrxtraXtra::m_QTVRGetObjectZoomRect, 0)
 
 void QtvrxtraXtra::m_QTVRGetNodeID(int nargs) {
-	g_lingo->printArgs("QtvrxtraXtra::m_QTVRGetNodeID", nargs);
 	ARGNUMCHECK(0);
 
 	QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
 
-	g_lingo->push((int)me->_currentNode.nodeID);
+	g_lingo->push((int)me->_video->getCurrentNodeID());
 }
 
 void QtvrxtraXtra::m_QTVRSetNodeID(int nargs) {
-	g_lingo->printArgs("QtvrxtraXtra::m_QTVRSetNodeID", nargs);
-	ARGNUMCHECK(1);
-
-	QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
-
-	Video::QuickTimeDecoder::NodeData newNode = me->_video->getNodeData(g_lingo->pop().asInt());
-
-	if (newNode.nodeID)
-		me->_currentNode = newNode;
-
-	me->_video->goToNode(newNode.nodeID);
-}
-
-void QtvrxtraXtra::m_QTVRGetNodeName(int nargs) {
-	g_lingo->printArgs("QtvrxtraXtra::m_QTVRGetNodeName", nargs);
-	ARGNUMCHECK(0);
-
-	QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
-
-	g_lingo->push(me->_currentNode.name);
-}
-
-void QtvrxtraXtra::m_QTVRGetQuality(int nargs) {
-	g_lingo->printArgs("QtvrxtraXtra::m_QTVRGetQuality", nargs);
-	ARGNUMCHECK(0);
-
-	QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
-
-	g_lingo->push(Common::String::format("%f", me->_quality));
-}
-
-void QtvrxtraXtra::m_QTVRSetQuality(int nargs) {
-	g_lingo->printArgs("QtvrxtraXtra::m_QTVRSetQuality", nargs);
 	ARGNUMCHECK(1);
 
 	QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
 
-	me->_quality = atof(g_lingo->pop().asString().c_str());
+	me->_video->goToNode(g_lingo->pop().asInt());
 }
 
-void QtvrxtraXtra::m_QTVRGetTransitionMode(int nargs) {
-	g_lingo->printArgs("QtvrxtraXtra::m_QTVRGetTransitionMode", nargs);
-	ARGNUMCHECK(0);
-
-	QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
-
-	me->_transitionMode = g_lingo->pop().asString();
-}
-
-void QtvrxtraXtra::m_QTVRSetTransitionMode(int nargs) {
-	g_lingo->printArgs("QtvrxtraXtra::m_QTVRSetTransitionMode", nargs);
-	ARGNUMCHECK(1);
-
-	QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
-
-	g_lingo->push(me->_transitionMode);
-}
-
-void QtvrxtraXtra::m_QTVRGetTransitionSpeed(int nargs) {
-	g_lingo->printArgs("QtvrxtraXtra::m_QTVRGetTransitionSpeed", nargs);
-	ARGNUMCHECK(0);
-
-	QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
-
-	g_lingo->push(Common::String::format("%f", me->_transitionSpeed));
-}
-
-void QtvrxtraXtra::m_QTVRSetTransitionSpeed(int nargs) {
-	g_lingo->printArgs("QtvrxtraXtra::m_QTVRSetTransitionSpeed", nargs);
-	ARGNUMCHECK(1);
-
-	QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
-
-	me->_transitionSpeed = atof(g_lingo->pop().asString().c_str());
-}
-
-void QtvrxtraXtra::m_QTVRGetUpdateMode(int nargs) {
-	g_lingo->printArgs("QtvrxtraXtra::m_QTVRGetUpdateMode", nargs);
-	ARGNUMCHECK(0);
-
-	QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
-
-	g_lingo->push(me->_updateMode);
-}
-
-void QtvrxtraXtra::m_QTVRSetUpdateMode(int nargs) {
-	g_lingo->printArgs("QtvrxtraXtra::m_QTVRSetUpdateMode", nargs);
-	ARGNUMCHECK(1);
-
-	QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
-
-	me->_updateMode = g_lingo->pop().asString();
-}
+XOBJSTUB(QtvrxtraXtra::m_QTVRGetNodeName, 0)
+XOBJSTUB(QtvrxtraXtra::m_QTVRGetQuality, 0)
+XOBJSTUB(QtvrxtraXtra::m_QTVRSetQuality, 1)
+XOBJSTUB(QtvrxtraXtra::m_QTVRGetTransitionMode, 0)
+XOBJSTUB(QtvrxtraXtra::m_QTVRSetTransitionMode, 1)
+XOBJSTUB(QtvrxtraXtra::m_QTVRGetTransitionSpeed, 0)
+XOBJSTUB(QtvrxtraXtra::m_QTVRSetTransitionSpeed, 1)
+XOBJSTUB(QtvrxtraXtra::m_QTVRGetUpdateMode, 0)
+XOBJSTUB(QtvrxtraXtra::m_QTVRSetUpdateMode, 1)
 
 void QtvrxtraXtra::m_QTVRGetVisible(int nargs) {
 	g_lingo->printArgs("QtvrxtraXtra::m_QTVRGetVisible", nargs);
@@ -630,24 +529,8 @@ void QtvrxtraXtra::m_QTVRSetVisible(int nargs) {
 	me->_visible = (bool)g_lingo->pop().asInt();
 }
 
-void QtvrxtraXtra::m_QTVRGetWarpMode(int nargs) {
-	g_lingo->printArgs("QtvrxtraXtra::m_QTVRGetWarpMode", nargs);
-	ARGNUMCHECK(0);
-
-	QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
-
-	g_lingo->push(me->_video->getWarpMode());
-}
-
-void QtvrxtraXtra::m_QTVRSetWarpMode(int nargs) {
-	g_lingo->printArgs("QtvrxtraXtra::m_QTVRSetWarpMode", nargs);
-	ARGNUMCHECK(1);
-
-	QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
-
-	me->_video->setWarpMode(g_lingo->pop().asInt());
-}
-
+XOBJSTUB(QtvrxtraXtra::m_QTVRGetWarpMode, 0)
+XOBJSTUB(QtvrxtraXtra::m_QTVRSetWarpMode, 1)
 XOBJSTUB(QtvrxtraXtra::m_QTVRCollapseToHotSpotRgn, 0)
 XOBJSTUB(QtvrxtraXtra::m_QTVRZoomOutEffect, 0)
 
@@ -732,18 +615,9 @@ XOBJSTUB(QtvrxtraXtra::m_QTVRGetPanZoomStartHandler, 0)
 XOBJSTUB(QtvrxtraXtra::m_QTVRSetPanZoomStartHandler, 0)
 XOBJSTUB(QtvrxtraXtra::m_QTVRGetRolloverHotSpotHandler, 0)
 XOBJSTUB(QtvrxtraXtra::m_QTVRSetRolloverHotSpotHandler, 0)
-
-void QtvrxtraXtra::m_QTVRExitMouseOver(int nargs) {
-	g_lingo->printArgs("QtvrxtraXtra::m_QTVRExitMouseOver", nargs);
-	ARGNUMCHECK(0);
-
-	QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
-
-	me->_capEventsMouseOver = false;
-}
+XOBJSTUB(QtvrxtraXtra::m_QTVRExitMouseOver, 0)
 
 void QtvrxtraXtra::m_QTVRPassMouseDown(int nargs) {
-	g_lingo->printArgs("QtvrxtraXtra::m_QTVRPassMouseDown", nargs);
 	ARGNUMCHECK(0);
 
 	QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
@@ -792,13 +666,9 @@ bool QtvrxtraWidget::processEvent(Common::Event &event) {
 		return true;
 	case Common::EVENT_LBUTTONUP:
 		_xtra->_video->handleMouseButton(false);
-		if (_xtra->_capEventsMouseDown)
-			_xtra->_capEventsMouseDown = false;
 		return true;
 	case Common::EVENT_MOUSEMOVE:
 		_xtra->_video->handleMouseMove(event.mouse.x - _xtra->_rect.left, event.mouse.y - _xtra->_rect.top);
-		if (!_xtra->_rect.contains(event.mouse))
-			_xtra->_capEventsMouseOver = false;
 		return true;
 	case Common::EVENT_KEYDOWN:
 		switch (event.kbd.keycode) {
diff --git a/engines/director/lingo/xtras/qtvrxtra.h b/engines/director/lingo/xtras/qtvrxtra.h
index c1cba9d20b6..e91729cbd14 100644
--- a/engines/director/lingo/xtras/qtvrxtra.h
+++ b/engines/director/lingo/xtras/qtvrxtra.h
@@ -49,17 +49,6 @@ public:
 
 	Common::Rect _rect;
 	bool _visible;
-	float _quality;
-
-	Video::QuickTimeDecoder::NodeData _currentNode;
-
-	Common::String _transitionMode;
-	float _transitionSpeed;
-
-	Common::String _updateMode;
-
-	bool _capEventsMouseOver;
-	bool _capEventsMouseDown;
 
 	bool _passMouseDown;
 


Commit: 9ee64db2152b16613a441cae4c7b54f2fba5ef50
    https://github.com/scummvm/scummvm/commit/9ee64db2152b16613a441cae4c7b54f2fba5ef50
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-02-15T20:08:26+01:00

Commit Message:
DIRECTOR: LINGO: Do not blow up during context-less execution

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


diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index fea157e9316..e7e8331a1a4 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -338,7 +338,7 @@ Symbol Lingo::getHandler(const Common::String &name) {
 	if (_state->context && _state->context->_functionHandlers.contains(name))
 		return _state->context->_functionHandlers[name];
 
-	sym = g_director->getCurrentMovie()->getHandler(name, _state->context->_castLibHint);
+	sym = g_director->getCurrentMovie()->getHandler(name, _state->context ? _state->context->_castLibHint : 0);
 	if (sym.type != VOIDSYM)
 		return sym;
 


Commit: 15a870c5846e8f0ac1a87c7f5c6365b8954e2e09
    https://github.com/scummvm/scummvm/commit/15a870c5846e8f0ac1a87c7f5c6365b8954e2e09
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-02-15T20:08:26+01:00

Commit Message:
COMMON: FORMATS: Expose QTVR structures to the outer world

Changed paths:
    common/formats/quicktime.h


diff --git a/common/formats/quicktime.h b/common/formats/quicktime.h
index 89bff67b100..b18455fe331 100644
--- a/common/formats/quicktime.h
+++ b/common/formats/quicktime.h
@@ -127,8 +127,10 @@ protected:
 		Rational mediaRate;
 	};
 
+public:
 	struct Track;
 
+protected:
 	class SampleDesc {
 	public:
 		SampleDesc(Track *parentTrack, uint32 codecTag);
@@ -144,6 +146,7 @@ protected:
 		uint32 _codecTag;
 	};
 
+public:
 	enum CodecType {
 		CODEC_TYPE_MOV_OTHER,
 		CODEC_TYPE_VIDEO,
@@ -376,6 +379,7 @@ protected:
 		float initialVPan = 1.0f;
 	};
 
+protected:
 	virtual SampleDesc *readSampleDesc(Track *track, uint32 format, uint32 descSize) = 0;
 
 	uint32 _timeScale;      // movie time


Commit: 86f8977ed53b38f482331d74a4515f7abb176ea4
    https://github.com/scummvm/scummvm/commit/86f8977ed53b38f482331d74a4515f7abb176ea4
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-02-15T20:08:26+01:00

Commit Message:
DIRECTOR: LINGO: Allow execution handlers with arguments

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


diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index e7e8331a1a4..34d77e8281d 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -736,10 +736,10 @@ void Lingo::executeScript(ScriptType type, CastMemberID id) {
 	execute();
 }
 
-void Lingo::executeHandler(const Common::String &name) {
+void Lingo::executeHandler(const Common::String &name, int numargs) {
 	debugC(1, kDebugLingoExec, "Executing script handler : %s", name.c_str());
 	Symbol sym = getHandler(name);
-	LC::call(sym, 0, false);
+	LC::call(sym, numargs, false);
 	execute();
 }
 
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index ffadce20d9b..7ca1637bbb1 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -361,7 +361,7 @@ public:
 	int getCastLibsNum();
 	int getMembersNum(uint16 castLibID);
 
-	void executeHandler(const Common::String &name);
+	void executeHandler(const Common::String &name, int numargs = 0);
 	void executeScript(ScriptType type, CastMemberID id);
 	Common::String formatStack();
 	void printStack(const char *s, uint pc);


Commit: f217ece80c423c71f3cf08edca1c084cafc5639b
    https://github.com/scummvm/scummvm/commit/f217ece80c423c71f3cf08edca1c084cafc5639b
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-02-15T20:08:26+01:00

Commit Message:
VIDEO: QTVR: Expose current hotspot via API

Changed paths:
    video/qt_decoder.h


diff --git a/video/qt_decoder.h b/video/qt_decoder.h
index ccf6101dfa7..b040be18701 100644
--- a/video/qt_decoder.h
+++ b/video/qt_decoder.h
@@ -95,6 +95,8 @@ public:
 	int getCurrentColumn() { return _nextVideoTrack->getCurFrame() % _nav.columns; }
 	void setCurrentColumn(int column);
 
+	const PanoHotSpot *getCurrentHotspot() { return _currentHotspot; }
+
 	void nudge(const Common::String &direction);
 
 	bool isVR() const { return _isVR; }


Commit: cf53fdd016ab832e71e64b58eb4e84b678c9e556
    https://github.com/scummvm/scummvm/commit/cf53fdd016ab832e71e64b58eb4e84b678c9e556
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-02-15T20:08:26+01:00

Commit Message:
DIRECTOR: XTRAS: Partial implementation of m_QTVRMouseOver in QTVR Xtra

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 c4773a6bbbd..6f4331547ca 100644
--- a/engines/director/lingo/xtras/qtvrxtra.cpp
+++ b/engines/director/lingo/xtras/qtvrxtra.cpp
@@ -22,6 +22,10 @@
 #include "common/system.h"
 #include "common/tokenizer.h"
 
+#include "common/formats/quicktime.h"
+
+#include "video/qt_decoder.h"
+
 #include "director/director.h"
 #include "director/images.h"
 #include "director/window.h"
@@ -29,7 +33,6 @@
 #include "director/lingo/lingo-object.h"
 #include "director/lingo/lingo-utils.h"
 #include "director/lingo/xtras/qtvrxtra.h"
-#include "video/qt_decoder.h"
 
 /**************************************************
  *
@@ -407,6 +410,10 @@ void QtvrxtraXtra::m_QTVRIdle(int nargs) {
 	ARGNUMCHECK(0);
 
 	QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
+
+	if (!me->_visible)
+		return;
+
 	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);
@@ -417,7 +424,60 @@ void QtvrxtraXtra::m_QTVRIdle(int nargs) {
 }
 
 XOBJSTUB(QtvrxtraXtra::m_QTVRMouseDown, 0)
-XOBJSTUB(QtvrxtraXtra::m_QTVRMouseOver, 0)
+
+void QtvrxtraXtra::m_QTVRMouseOver(int nargs) {
+	ARGNUMCHECK(0);
+
+	QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
+	Common::Point pos = g_director->getCurrentWindow()->getMousePos();
+
+	if (!me->_visible || !me->_rect.contains(pos)) {
+		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);
+
+		Common::Event event;
+
+		while (g_system->getEventManager()->pollEvent(event)) {
+			if (Common::isMouseEvent(event)) {
+				pos = g_director->getCurrentWindow()->getMousePos();
+
+				if (!me->_rect.contains(pos))
+					break;
+			}
+
+			const Common::QuickTimeParser::PanoHotSpot *hotspot = me->_video->getCurrentHotspot();
+
+			me->_widget->processEvent(event);
+
+			if (hotspot !=  me->_video->getCurrentHotspot()) {
+				g_lingo->push(hotspot ? hotspot->id : 0);
+
+				g_lingo->executeHandler(me->_rolloverHotSpotHandler, 1);
+			}
+		}
+
+		g_director->draw();
+
+		if (!me->_rect.contains(pos))
+			break;
+
+		g_director->delayMillis(10);
+	}
+
+	g_lingo->push(Common::String("pan ,0"));
+}
 
 void QtvrxtraXtra::m_QTVRGetPanAngle(int nargs) {
 	g_lingo->printArgs("QtvrxtraXtra::m_QTVRGetPanAngle", nargs);
@@ -512,7 +572,6 @@ XOBJSTUB(QtvrxtraXtra::m_QTVRGetUpdateMode, 0)
 XOBJSTUB(QtvrxtraXtra::m_QTVRSetUpdateMode, 1)
 
 void QtvrxtraXtra::m_QTVRGetVisible(int nargs) {
-	g_lingo->printArgs("QtvrxtraXtra::m_QTVRGetVisible", nargs);
 	ARGNUMCHECK(0);
 
 	QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
@@ -521,7 +580,6 @@ void QtvrxtraXtra::m_QTVRGetVisible(int nargs) {
 }
 
 void QtvrxtraXtra::m_QTVRSetVisible(int nargs) {
-	g_lingo->printArgs("QtvrxtraXtra::m_QTVRSetVisible", nargs);
 	ARGNUMCHECK(1);
 
 	QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
@@ -613,8 +671,23 @@ XOBJSTUB(QtvrxtraXtra::m_QTVRGetNodeLeaveHandler, 0)
 XOBJSTUB(QtvrxtraXtra::m_QTVRSetNodeLeaveHandler, 0)
 XOBJSTUB(QtvrxtraXtra::m_QTVRGetPanZoomStartHandler, 0)
 XOBJSTUB(QtvrxtraXtra::m_QTVRSetPanZoomStartHandler, 0)
-XOBJSTUB(QtvrxtraXtra::m_QTVRGetRolloverHotSpotHandler, 0)
-XOBJSTUB(QtvrxtraXtra::m_QTVRSetRolloverHotSpotHandler, 0)
+
+void QtvrxtraXtra::m_QTVRGetRolloverHotSpotHandler(int nargs) {
+	ARGNUMCHECK(0);
+
+	QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
+
+	g_lingo->push(me->_rolloverHotSpotHandler);
+}
+
+void QtvrxtraXtra::m_QTVRSetRolloverHotSpotHandler(int nargs) {
+	ARGNUMCHECK(1);
+
+	QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
+
+	me->_rolloverHotSpotHandler = g_lingo->pop().asString();
+}
+
 XOBJSTUB(QtvrxtraXtra::m_QTVRExitMouseOver, 0)
 
 void QtvrxtraXtra::m_QTVRPassMouseDown(int nargs) {
diff --git a/engines/director/lingo/xtras/qtvrxtra.h b/engines/director/lingo/xtras/qtvrxtra.h
index e91729cbd14..9f40ebd4612 100644
--- a/engines/director/lingo/xtras/qtvrxtra.h
+++ b/engines/director/lingo/xtras/qtvrxtra.h
@@ -52,6 +52,7 @@ public:
 
 	bool _passMouseDown;
 
+	Common::String _rolloverHotSpotHandler;
 	Common::String _mouseDownHandler;
 };
 




More information about the Scummvm-git-logs mailing list