[Scummvm-git-logs] scummvm master -> 27600473fddead11a87ed83e175985c301d1bddd

sev- noreply at scummvm.org
Sat Feb 8 17:31:08 UTC 2025


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

Summary:
27600473fd DIRECTOR: XTRAS: Create widget for QTVR Xtra and start processing events


Commit: 27600473fddead11a87ed83e175985c301d1bddd
    https://github.com/scummvm/scummvm/commit/27600473fddead11a87ed83e175985c301d1bddd
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-02-08T18:30:45+01:00

Commit Message:
DIRECTOR: XTRAS: Create widget for QTVR Xtra and start processing events

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 f2cc3c83e17..a2d04d1adb7 100644
--- a/engines/director/lingo/xtras/qtvrxtra.cpp
+++ b/engines/director/lingo/xtras/qtvrxtra.cpp
@@ -248,6 +248,8 @@ QtvrxtraXtraObject::QtvrxtraXtraObject(ObjectType ObjectType) :Object<QtvrxtraXt
 	_transitionSpeed = 1.0f;
 
 	_updateMode = "normal";
+
+	_widget = nullptr;
 }
 
 bool QtvrxtraXtraObject::hasProp(const Common::String &propName) {
@@ -360,6 +362,10 @@ void QtvrxtraXtra::m_QTVROpen(int nargs) {
 		return;
 	}
 
+	me->_widget = new QtvrxtraWidget(me, g_director->getCurrentWindow(),
+			me->_rect.left, me->_rect.top, me->_rect.width(), me->_rect.height(),
+			g_director->getMacWindowManager());
+
 	g_lingo->push(Common::String());
 }
 
@@ -373,6 +379,8 @@ void QtvrxtraXtra::m_QTVRClose(int nargs) {
 		me->_video->close();
 		delete me->_video;
 		me->_video = nullptr;
+
+		delete me->_widget;
 	}
 }
 
@@ -415,60 +423,6 @@ void QtvrxtraXtra::m_QTVRIdle(int nargs) {
 	delete dither;
 }
 
-bool QtvrxtraXtraObject::processEvent(Common::Event &event) {
-	// FIXME: This class needs to inherit from MacWidget and override this function
-
-	if (!(_capEventsMouseOver && _capEventsMouseDown))
-		return false;
-
-	switch (event.type) {
-	case Common::EVENT_LBUTTONDOWN:
-		if (_mouseDownHandler.empty()) {
-			_video->handleMouseButton(true, event.mouse.x, event.mouse.y);
-		} else {
-			_passMouseDown = false;
-
-			g_lingo->executeHandler(_mouseDownHandler);
-
-			if (_passMouseDown) {
-				_video->handleMouseButton(true, event.mouse.x, event.mouse.y);
-				_passMouseDown = false;
-			}
-		}
-		return true;
-	case Common::EVENT_LBUTTONUP:
-		_video->handleMouseButton(false);
-		if (_capEventsMouseDown)
-			_capEventsMouseDown = false;
-		return true;
-	case Common::EVENT_MOUSEMOVE:
-		_video->handleMouseMove(event.mouse.x, event.mouse.y);
-		if (!_rect.contains(event.mouse))
-			_capEventsMouseOver = false;
-		return true;
-	case Common::EVENT_KEYDOWN:
-		switch (event.kbd.keycode) {
-		case Common::KEYCODE_LEFT:
-			_video->nudge("left");
-			break;
-		case Common::KEYCODE_RIGHT:
-			_video->nudge("right");
-			break;
-		case Common::KEYCODE_UP:
-			_video->nudge("top");
-			break;
-		case Common::KEYCODE_DOWN:
-			_video->nudge("bottom");
-			break;
-		default:
-			break;
-		}
-		return true;
-	default:
-		return false;
-	}
-}
-
 void QtvrxtraXtra::m_QTVRMouseDown(int nargs) {
 	g_lingo->printSTUBWithArglist("QtvrxtraXtra::m_QTVRMouseDown", nargs);
 	ARGNUMCHECK(0);
@@ -811,4 +765,70 @@ void QtvrxtraXtra::m_IsQTVRMovie(int nargs) {
 	g_lingo->push((int)(me->_video && me->_video->isVideoLoaded()));
 }
 
+///////////////
+// Widget
+///////////////
+
+QtvrxtraWidget::QtvrxtraWidget(QtvrxtraXtraObject *xtra, Graphics::MacWidget *parent, int x, int y, int w, int h, Graphics::MacWindowManager *wm) :
+	Graphics::MacWidget(parent, x, y, w, h, wm, true), _xtra(xtra) {
+
+	warning("****** CREATED at %d, %d, %d, %d", x, y, w, h);
+
+	_priority = 10000; // We stay on top of everything
+}
+
+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()) {
+			_xtra->_video->handleMouseButton(true, event.mouse.x, event.mouse.y);
+		} else {
+			_xtra->_passMouseDown = false;
+
+			g_lingo->executeHandler(_xtra->_mouseDownHandler);
+
+			if (_xtra->_passMouseDown) {
+				_xtra->_video->handleMouseButton(true, event.mouse.x, event.mouse.y);
+				_xtra->_passMouseDown = false;
+			}
+		}
+		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, event.mouse.y);
+		if (!_xtra->_rect.contains(event.mouse))
+			_xtra->_capEventsMouseOver = false;
+		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;
+		}
+		return true;
+	default:
+		return false;
+	}
+}
+
 }
diff --git a/engines/director/lingo/xtras/qtvrxtra.h b/engines/director/lingo/xtras/qtvrxtra.h
index 2b0601f3ed2..c1cba9d20b6 100644
--- a/engines/director/lingo/xtras/qtvrxtra.h
+++ b/engines/director/lingo/xtras/qtvrxtra.h
@@ -26,6 +26,17 @@
 
 namespace Director {
 
+class QtvrxtraXtraObject;
+
+class QtvrxtraWidget : public Graphics::MacWidget {
+public:
+	QtvrxtraWidget(QtvrxtraXtraObject *xtra, Graphics::MacWidget *parent, int x, int y, int w, int h, Graphics::MacWindowManager *wm);
+
+	virtual bool processEvent(Common::Event &event);
+
+	QtvrxtraXtraObject *_xtra;
+};
+
 class QtvrxtraXtraObject : public Object<QtvrxtraXtraObject> {
 public:
 	QtvrxtraXtraObject(ObjectType objType);
@@ -33,9 +44,8 @@ public:
 	bool hasProp(const Common::String &propName) override;
 	Datum getProp(const Common::String &propName) override;
 
-	bool processEvent(Common::Event &event);
-
 	Video::QuickTimeDecoder *_video;
+	QtvrxtraWidget *_widget;
 
 	Common::Rect _rect;
 	bool _visible;




More information about the Scummvm-git-logs mailing list