[Scummvm-git-logs] scummvm master -> 381a7f3350b551c30f4b2131a3d6eb844f0fe478

sev- noreply at scummvm.org
Sun Feb 16 22:00:31 UTC 2025


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

Summary:
5c03bc713f DIRECTOR: XTRAS: Implement MouseStillDownHandler in QTVR Xtra
18a3de9401 DIRECTOR: XTRAS: Process _passMouseDown flag in QTVR Xtra
e061557428 VIDEO: QTVR: Implement Object nudging with keyboard
fa5ea18fcb VIDEO: QTVR: Expose zoom state
61ea4e1761 DIRECTOR: XTRAS: Implement PanZoomStartHandler in QTVR Xtra
381a7f3350 DIRECTOR: XTRAS: Implement NodeLeaveHandler in QTVR Xtra


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

Commit Message:
DIRECTOR: XTRAS: Implement MouseStillDownHandler 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 a0b845fb7cc..a3fc3da0dac 100644
--- a/engines/director/lingo/xtras/qtvrxtra.cpp
+++ b/engines/director/lingo/xtras/qtvrxtra.cpp
@@ -240,6 +240,8 @@ static const BuiltinProto xlibBuiltins[] = {
 	{ nullptr, nullptr, 0, 0, 0, VOIDSYM }
 };
 
+#define HANDLER_TICKS 500
+
 QtvrxtraXtraObject::QtvrxtraXtraObject(ObjectType ObjectType) :Object<QtvrxtraXtraObject>("Qtvrxtra") {
 	_objType = ObjectType;
 
@@ -449,6 +451,8 @@ void QtvrxtraXtra::m_QTVRMouseDown(int nargs) {
 		return;
 	}
 
+	int nextTick = g_system->getMillis();
+
 	while (true) {
 		Graphics::Surface const *frame = me->_video->decodeNextFrame();
 
@@ -467,7 +471,13 @@ void QtvrxtraXtra::m_QTVRMouseDown(int nargs) {
 				break;
 		}
 
-		// MouseStillDownHandler
+		if (g_system->getMillis() > nextTick) {
+			nextTick = g_system->getMillis() + HANDLER_TICKS;
+
+			if (!me->_mouseStillDownHandler.empty())
+				g_lingo->executeHandler(me->_mouseStillDownHandler);
+		}
+
 		// NodeLeaveHandler
 		// PanZoomStartHandler
 
@@ -570,7 +580,7 @@ void QtvrxtraXtra::m_QTVRMouseOver(int nargs) {
 		}
 
 		if (g_system->getMillis() > nextTick) {
-			nextTick = g_system->getMillis() + 500;
+			nextTick = g_system->getMillis() + HANDLER_TICKS;
 
 			if (!me->_mouseOverHandler.empty())
 				g_lingo->executeHandler(me->_mouseOverHandler);
@@ -792,8 +802,22 @@ void QtvrxtraXtra::m_QTVRSetMouseOverHandler(int nargs) {
 	me->_mouseOverHandler = g_lingo->pop().asString();
 }
 
-XOBJSTUB(QtvrxtraXtra::m_QTVRGetMouseStillDownHandler, 0)
-XOBJSTUB(QtvrxtraXtra::m_QTVRSetMouseStillDownHandler, 0)
+void QtvrxtraXtra::m_QTVRGetMouseStillDownHandler(int nargs) {
+	ARGNUMCHECK(0);
+
+	QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
+
+	g_lingo->push(me->_mouseStillDownHandler);
+}
+
+void QtvrxtraXtra::m_QTVRSetMouseStillDownHandler(int nargs) {
+	ARGNUMCHECK(1);
+
+	QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
+
+	me->_mouseStillDownHandler = g_lingo->pop().asString();
+}
+
 XOBJSTUB(QtvrxtraXtra::m_QTVRGetNodeLeaveHandler, 0)
 XOBJSTUB(QtvrxtraXtra::m_QTVRSetNodeLeaveHandler, 0)
 XOBJSTUB(QtvrxtraXtra::m_QTVRGetPanZoomStartHandler, 0)
diff --git a/engines/director/lingo/xtras/qtvrxtra.h b/engines/director/lingo/xtras/qtvrxtra.h
index 912a7edf18f..4ff320fa6bf 100644
--- a/engines/director/lingo/xtras/qtvrxtra.h
+++ b/engines/director/lingo/xtras/qtvrxtra.h
@@ -56,6 +56,7 @@ public:
 	Common::String _rolloverHotSpotHandler;
 	Common::String _mouseDownHandler;
 	Common::String _mouseOverHandler;
+	Common::String _mouseStillDownHandler;
 };
 
 namespace QtvrxtraXtra {


Commit: 18a3de94018e6a46d2304d8dca5eaa64ce6ea54d
    https://github.com/scummvm/scummvm/commit/18a3de94018e6a46d2304d8dca5eaa64ce6ea54d
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-02-16T23:00:20+01:00

Commit Message:
DIRECTOR: XTRAS: Process _passMouseDown flag 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 a3fc3da0dac..857a8596793 100644
--- a/engines/director/lingo/xtras/qtvrxtra.cpp
+++ b/engines/director/lingo/xtras/qtvrxtra.cpp
@@ -549,19 +549,17 @@ void QtvrxtraXtra::m_QTVRMouseOver(int nargs) {
 			hotspot = me->_video->getRolloverHotspot();
 
 			if (event.type == Common::EVENT_LBUTTONDOWN) {
-				// MouseDownHandler
-				// PassMouseDown
-
-				//if (!PassMouseDown) {
-				//  g_lingo->push(0);
-				//	return
-				//}
-
+				// MouseDownHandler is processed inside
 				me->_widget->processEvent(event);
 
+				if (!me->_passMouseDown) {
+					g_lingo->push(0);
+					return;
+				}
+
 				m_QTVRMouseDown(-1337);
 
-				return; // MouseDown will take care of the return value
+				return; // MouseDown will take care of the return value on the stack
 			}
 
 			me->_widget->processEvent(event);
@@ -874,11 +872,6 @@ QtvrxtraWidget::QtvrxtraWidget(QtvrxtraXtraObject *xtra, Graphics::MacWidget *pa
 }
 
 bool QtvrxtraWidget::processEvent(Common::Event &event) {
-	// FIXME: This class needs to inherit from MacWidget and override this function
-
-	//if (!(parent->_capEventsMouseOver && _capEventsMouseDown))
-	//	return false;
-
 	switch (event.type) {
 	case Common::EVENT_LBUTTONDOWN:
 		if (_xtra->_mouseDownHandler.empty()) {
@@ -888,10 +881,8 @@ bool QtvrxtraWidget::processEvent(Common::Event &event) {
 
 			g_lingo->executeHandler(_xtra->_mouseDownHandler);
 
-			if (_xtra->_passMouseDown) {
+			if (_xtra->_passMouseDown)
 				_xtra->_video->handleMouseButton(true, event.mouse.x - _xtra->_rect.left, event.mouse.y - _xtra->_rect.top);
-				_xtra->_passMouseDown = false;
-			}
 		}
 		return true;
 	case Common::EVENT_LBUTTONUP:


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

Commit Message:
VIDEO: QTVR: Implement Object nudging with keyboard

Changed paths:
    video/qtvr_decoder.cpp


diff --git a/video/qtvr_decoder.cpp b/video/qtvr_decoder.cpp
index ff43709b1c3..494b432bfd3 100644
--- a/video/qtvr_decoder.cpp
+++ b/video/qtvr_decoder.cpp
@@ -994,6 +994,25 @@ void QuickTimeDecoder::handleKey(Common::KeyState &state, bool down, bool repeat
 }
 
 void QuickTimeDecoder::handleObjectKey(Common::KeyState &state, bool down, bool repeat) {
+	if (!down)
+		return;
+
+	switch (state.keycode) {
+	case Common::KEYCODE_LEFT:
+		nudge("left");
+		break;
+	case Common::KEYCODE_RIGHT:
+		nudge("right");
+		break;
+	case Common::KEYCODE_UP:
+		nudge("up");
+		break;
+	case Common::KEYCODE_DOWN:
+		nudge("bottom");
+		break;
+	default:
+		break;
+	}
 }
 
 void QuickTimeDecoder::handlePanoKey(Common::KeyState &state, bool down, bool repeat) {


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

Commit Message:
VIDEO: QTVR: Expose zoom state

Changed paths:
    video/qt_decoder.h


diff --git a/video/qt_decoder.h b/video/qt_decoder.h
index 0bb5b8bf13b..c06b8360e02 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);
 
+	int getZoomState() { return _zoomState; }
+
 	const PanoHotSpot *getRolloverHotspot() { return _rolloverHotspot; }
 	const PanoHotSpot *getClickedHotspot() { return _clickedHotspot; }
 
@@ -163,6 +165,14 @@ public:
 	bool _isKeyDown = false;
 	Common::KeyState _lastKey;
 
+	enum {
+		kZoomNone,
+		kZoomQuestion,
+		kZoomIn,
+		kZoomOut,
+		kZoomLimit,
+	};
+
 private:
 	Common::Rect _curBbox;
 
@@ -192,14 +202,6 @@ private:
 
 	bool _enableEditListBoundsCheckQuirk;
 
-	enum {
-		kZoomNone,
-		kZoomQuestion,
-		kZoomIn,
-		kZoomOut,
-		kZoomLimit,
-	};
-
 	class VideoSampleDesc : public Common::QuickTimeParser::SampleDesc {
 	public:
 		VideoSampleDesc(Common::QuickTimeParser::Track *parentTrack, uint32 codecTag);


Commit: 61ea4e1761ea4b312fcbf6de512b8a5ad1fabc8f
    https://github.com/scummvm/scummvm/commit/61ea4e1761ea4b312fcbf6de512b8a5ad1fabc8f
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-02-16T23:00:21+01:00

Commit Message:
DIRECTOR: XTRAS: Implement PanZoomStartHandler 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 857a8596793..ca53d130ecb 100644
--- a/engines/director/lingo/xtras/qtvrxtra.cpp
+++ b/engines/director/lingo/xtras/qtvrxtra.cpp
@@ -818,8 +818,22 @@ void QtvrxtraXtra::m_QTVRSetMouseStillDownHandler(int nargs) {
 
 XOBJSTUB(QtvrxtraXtra::m_QTVRGetNodeLeaveHandler, 0)
 XOBJSTUB(QtvrxtraXtra::m_QTVRSetNodeLeaveHandler, 0)
-XOBJSTUB(QtvrxtraXtra::m_QTVRGetPanZoomStartHandler, 0)
-XOBJSTUB(QtvrxtraXtra::m_QTVRSetPanZoomStartHandler, 0)
+
+void QtvrxtraXtra::m_QTVRGetPanZoomStartHandler(int nargs) {
+	ARGNUMCHECK(0);
+
+	QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
+
+	g_lingo->push(me->_panZoomStartHandler);
+}
+
+void QtvrxtraXtra::m_QTVRSetPanZoomStartHandler(int nargs) {
+	ARGNUMCHECK(1);
+
+	QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
+
+	me->_panZoomStartHandler = g_lingo->pop().asString();
+}
 
 void QtvrxtraXtra::m_QTVRGetRolloverHotSpotHandler(int nargs) {
 	ARGNUMCHECK(0);
@@ -892,22 +906,21 @@ bool QtvrxtraWidget::processEvent(Common::Event &event) {
 		_xtra->_video->handleMouseMove(event.mouse.x - _xtra->_rect.left, event.mouse.y - _xtra->_rect.top);
 		return true;
 	case Common::EVENT_KEYDOWN:
-		switch (event.kbd.keycode) {
-		case Common::KEYCODE_LEFT:
-			_xtra->_video->nudge("left");
-			break;
-		case Common::KEYCODE_RIGHT:
-			_xtra->_video->nudge("right");
-			break;
-		case Common::KEYCODE_UP:
-			_xtra->_video->nudge("top");
-			break;
-		case Common::KEYCODE_DOWN:
-			_xtra->_video->nudge("bottom");
-			break;
-		default:
-			break;
+	case Common::EVENT_KEYUP: {
+		int zoomState = _xtra->_video->getZoomState();
+		_xtra->_video->handleKey(event.kbd, event.type == Common::EVENT_KEYDOWN);
+
+		int newZoomState = _xtra->_video->getZoomState();
+
+		if (zoomState == Video::QuickTimeDecoder::kZoomNone &&
+			(newZoomState == Video::QuickTimeDecoder::kZoomIn || newZoomState == Video::QuickTimeDecoder::kZoomOut)) {
+
+			if (!_xtra->_panZoomStartHandler.empty())
+				g_lingo->executeHandler(_xtra->_panZoomStartHandler);
 		}
+
+		}
+
 		return true;
 	default:
 		return false;
diff --git a/engines/director/lingo/xtras/qtvrxtra.h b/engines/director/lingo/xtras/qtvrxtra.h
index 4ff320fa6bf..1ac5f544496 100644
--- a/engines/director/lingo/xtras/qtvrxtra.h
+++ b/engines/director/lingo/xtras/qtvrxtra.h
@@ -57,6 +57,7 @@ public:
 	Common::String _mouseDownHandler;
 	Common::String _mouseOverHandler;
 	Common::String _mouseStillDownHandler;
+	Common::String _panZoomStartHandler;
 };
 
 namespace QtvrxtraXtra {


Commit: 381a7f3350b551c30f4b2131a3d6eb844f0fe478
    https://github.com/scummvm/scummvm/commit/381a7f3350b551c30f4b2131a3d6eb844f0fe478
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-02-16T23:00:21+01:00

Commit Message:
DIRECTOR: XTRAS: Implement NodeLeaveHandler 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 ca53d130ecb..aaa2053a37a 100644
--- a/engines/director/lingo/xtras/qtvrxtra.cpp
+++ b/engines/director/lingo/xtras/qtvrxtra.cpp
@@ -464,6 +464,8 @@ void QtvrxtraXtra::m_QTVRMouseDown(int nargs) {
 
 		g_director->getCurrentWindow()->setDirty(true);
 
+		int node = me->_video->getCurrentNodeID();
+
 		while (g_system->getEventManager()->pollEvent(event)) {
 			me->_widget->processEvent(event);
 
@@ -471,6 +473,11 @@ void QtvrxtraXtra::m_QTVRMouseDown(int nargs) {
 				break;
 		}
 
+		if (node != 0 && me->_video->getCurrentNodeID() != node) {
+			if (!me->_nodeLeaveHandler.empty())
+				g_lingo->executeHandler(me->_nodeLeaveHandler);
+		}
+
 		if (g_system->getMillis() > nextTick) {
 			nextTick = g_system->getMillis() + HANDLER_TICKS;
 
@@ -478,9 +485,6 @@ void QtvrxtraXtra::m_QTVRMouseDown(int nargs) {
 				g_lingo->executeHandler(me->_mouseStillDownHandler);
 		}
 
-		// NodeLeaveHandler
-		// PanZoomStartHandler
-
 		g_director->draw();
 
 		if (event.type == Common::EVENT_QUIT) {
@@ -816,8 +820,21 @@ void QtvrxtraXtra::m_QTVRSetMouseStillDownHandler(int nargs) {
 	me->_mouseStillDownHandler = g_lingo->pop().asString();
 }
 
-XOBJSTUB(QtvrxtraXtra::m_QTVRGetNodeLeaveHandler, 0)
-XOBJSTUB(QtvrxtraXtra::m_QTVRSetNodeLeaveHandler, 0)
+void QtvrxtraXtra::m_QTVRGetNodeLeaveHandler(int nargs) {
+	ARGNUMCHECK(0);
+
+	QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
+
+	g_lingo->push(me->_nodeLeaveHandler);
+}
+
+void QtvrxtraXtra::m_QTVRSetNodeLeaveHandler(int nargs) {
+	ARGNUMCHECK(1);
+
+	QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
+
+	me->_nodeLeaveHandler = g_lingo->pop().asString();
+}
 
 void QtvrxtraXtra::m_QTVRGetPanZoomStartHandler(int nargs) {
 	ARGNUMCHECK(0);
diff --git a/engines/director/lingo/xtras/qtvrxtra.h b/engines/director/lingo/xtras/qtvrxtra.h
index 1ac5f544496..0f8457154b5 100644
--- a/engines/director/lingo/xtras/qtvrxtra.h
+++ b/engines/director/lingo/xtras/qtvrxtra.h
@@ -58,6 +58,7 @@ public:
 	Common::String _mouseOverHandler;
 	Common::String _mouseStillDownHandler;
 	Common::String _panZoomStartHandler;
+	Common::String _nodeLeaveHandler;
 };
 
 namespace QtvrxtraXtra {




More information about the Scummvm-git-logs mailing list