[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