[Scummvm-git-logs] scummvm master -> 9b20d74486f3b188ef24d7d0555246568be06b64
sev-
noreply at scummvm.org
Wed Aug 14 19:52:18 UTC 2024
This automated email contains information about 25 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
e51eac314a DIRECTOR: LINGO: XOBJ: Implement QTVREnter/Exit and remove stubs
e4c63321b8 DIRECTOR: LINGO: XOBJ: Implement QTVROpen/Close and remove stubs
e4a3b8d2bb DIRECTOR: LINGO: XOBJ: Implement IsQTVRMovie and remove stub
aee953ca0b COMMON: FORMATS: Make QTVRType enum public
88a5199398 VIDEO: Implement getQTVRType() function
3cf3b3e9ee DIRECTOR: LINGO: XOBJ: Implement QTVRGetQTVRType and remove stub
63c1deeabd VIDEO: Add get/set methods for panAngle, tiltAngle, FOV
5f186e8553 DIRECTOR: LINGO: XOBJ: Implement view control methods and remove stubs
764e4c15ae COMMON: FORMATS: Make _panoTrack protected
8221cd6df0 VIDEO: Implement NodeData struct and getNodeData method
71c7feaf99 DIRECTOR: LINGO: XOBJ: Implement node control methods and remove stubs
0b0cbd2e0b DIRECTOR: LINGO: XOBJ: Implement QTVRGet/SetQuality and remove stubs
7bd452041b DIRECTOR: LINGO: XOBJ: Implement transition control methods and remove stubs
b61450c8b2 DIRECTOR: LINGO: XOBJ: Implement QTVRGet/SetUpdateMode and remove stubs
2a095e6c87 DIRECTOR: LINGO: XOBJ: Implement QTVRGet/SetVisible and remove stubs
19647ff996 VIDEO: Implement row and column navigation methods
cd85cfb4da DIRECTOR: LINGO: XOBJ: Implement frame navigation methods and remove stubs
4a5f4d250f DIRECTOR: LINGO: XOBJ: Implement MouseOver method and remove stub
9e800a6f29 DIRECTOR: LINGO: XOBJ: Implement MouseDown methods and remove stubs
d237519c1d DIRECTOR: LINGO: XOBJ: Implement new/forget and remove stubs
a1d70a25fd VIDEO: Implement QTVRGet/SetWarpMode methods
6acd9a2659 DIRECTOR: LINGO: XOBJ: Implement QTVRGet/SetWarpMode and remove stubs
ab0bb73456 DIRECTOR: LINGO: Map 'the member of sprite'
a32db29b1b DIRECTOR: LINGO: Map 'scrollTop' entity field
9b20d74486 DIRECTOR: Extend getField to retrieve scrollTop
Commit: e51eac314ae731d146423ca4d7f2255008a1d301
https://github.com/scummvm/scummvm/commit/e51eac314ae731d146423ca4d7f2255008a1d301
Author: Krish (ganatrakrish2882005 at gmail.com)
Date: 2024-08-14T21:52:03+02:00
Commit Message:
DIRECTOR: LINGO: XOBJ: Implement QTVREnter/Exit and remove stubs
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 6a59aa1aca6..3fbae2c6275 100644
--- a/engines/director/lingo/xtras/qtvrxtra.cpp
+++ b/engines/director/lingo/xtras/qtvrxtra.cpp
@@ -162,7 +162,8 @@ const XlibFileDesc QtvrxtraXtra::fileNames[] = {
static MethodProto xlibMethods[] = {
{ "new", QtvrxtraXtra::m_new, 0, 0, 500 },
{ "forget", QtvrxtraXtra::m_forget, 0, 0, 500 },
- { "QTVREnter", QtvrxtraXtra::m_QTVREnter, 1, 1, 500 },
+ { "QTVREnter", QtvrxtraXtra::m_QTVREnter, 0, 0, 500 },
+ { "QTVRExit", QtvrxtraXtra::m_QTVRExit, 0, 0, 500 },
{ "QTVROpen", QtvrxtraXtra::m_QTVROpen, 3, 0, 500 },
{ "QTVRClose", QtvrxtraXtra::m_QTVRClose, 0, 0, 500 },
{ "QTVRUpdate", QtvrxtraXtra::m_QTVRUpdate, 0, 0, 500 },
@@ -268,8 +269,18 @@ void QtvrxtraXtra::m_new(int nargs) {
}
XOBJSTUB(QtvrxtraXtra::m_forget, 0)
-XOBJSTUB(QtvrxtraXtra::m_QTVREnter, 0)
-XOBJSTUB(QtvrxtraXtra::m_QTVRExit, 0)
+
+void QtvrxtraXtra::m_QTVREnter(int nargs) {
+ g_lingo->printArgs("QtvrxtraXtra::m_QTVREnter", nargs);
+ ARGNUMCHECK(0);
+ g_lingo->push(0);
+}
+
+void QtvrxtraXtra::m_QTVRExit(int nargs) {
+ g_lingo->printArgs("QtvrxtraXtra::m_QTVRExit", nargs);
+ ARGNUMCHECK(0);
+}
+
XOBJSTUB(QtvrxtraXtra::m_QTVROpen, 0)
XOBJSTUB(QtvrxtraXtra::m_QTVRClose, 0)
XOBJSTUB(QtvrxtraXtra::m_QTVRUpdate, 0)
Commit: e4c63321b83c639465ff6366813cc1bd30ead243
https://github.com/scummvm/scummvm/commit/e4c63321b83c639465ff6366813cc1bd30ead243
Author: Krish (ganatrakrish2882005 at gmail.com)
Date: 2024-08-14T21:52:03+02:00
Commit Message:
DIRECTOR: LINGO: XOBJ: Implement QTVROpen/Close and remove stubs
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 3fbae2c6275..05884cda340 100644
--- a/engines/director/lingo/xtras/qtvrxtra.cpp
+++ b/engines/director/lingo/xtras/qtvrxtra.cpp
@@ -20,12 +20,14 @@
*/
#include "common/system.h"
+#include "common/tokenizer.h"
#include "director/director.h"
#include "director/lingo/lingo.h"
#include "director/lingo/lingo-object.h"
#include "director/lingo/lingo-utils.h"
#include "director/lingo/xtras/qtvrxtra.h"
+#include "video/qt_decoder.h"
/**************************************************
*
@@ -164,7 +166,7 @@ static MethodProto xlibMethods[] = {
{ "forget", QtvrxtraXtra::m_forget, 0, 0, 500 },
{ "QTVREnter", QtvrxtraXtra::m_QTVREnter, 0, 0, 500 },
{ "QTVRExit", QtvrxtraXtra::m_QTVRExit, 0, 0, 500 },
- { "QTVROpen", QtvrxtraXtra::m_QTVROpen, 3, 0, 500 },
+ { "QTVROpen", QtvrxtraXtra::m_QTVROpen, 3, 3, 500 },
{ "QTVRClose", QtvrxtraXtra::m_QTVRClose, 0, 0, 500 },
{ "QTVRUpdate", QtvrxtraXtra::m_QTVRUpdate, 0, 0, 500 },
{ "QTVRGetQTVRType", QtvrxtraXtra::m_QTVRGetQTVRType, 0, 0, 500 },
@@ -235,6 +237,10 @@ static BuiltinProto xlibBuiltins[] = {
QtvrxtraXtraObject::QtvrxtraXtraObject(ObjectType ObjectType) :Object<QtvrxtraXtraObject>("Qtvrxtra") {
_objType = ObjectType;
+
+ _video = nullptr;
+
+ _visible = false;
}
bool QtvrxtraXtraObject::hasProp(const Common::String &propName) {
@@ -281,8 +287,77 @@ void QtvrxtraXtra::m_QTVRExit(int nargs) {
ARGNUMCHECK(0);
}
-XOBJSTUB(QtvrxtraXtra::m_QTVROpen, 0)
-XOBJSTUB(QtvrxtraXtra::m_QTVRClose, 0)
+static Common::Rect stringToRect(const Common::String &rectStr) {
+ Common::StringTokenizer tokenizer(rectStr, Common::String(','));
+ Common::StringArray tokens(tokenizer.split());
+
+ if (tokens.size() != 4) {
+ error("stringToRect(): The string should contain exactly 4 numbers separated by commas!");
+ return {};
+ }
+
+ Common::Rect rect;
+ rect.left = atoi(tokens[0].c_str());
+ rect.top = atoi(tokens[1].c_str());
+ rect.right = atoi(tokens[2].c_str());
+ rect.bottom = atoi(tokens[3].c_str());
+
+ return rect;
+}
+
+void QtvrxtraXtra::m_QTVROpen(int nargs) {
+ g_lingo->printArgs("QtvrxtraXtra::m_QTVROpen", nargs);
+ ARGNUMCHECK(3);
+
+ Common::String visiblityStr = g_lingo->pop().asString();
+ Common::String rectStr = g_lingo->pop().asString();
+ Common::String pathStr = g_lingo->pop().asString();
+
+ QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
+
+ if (visiblityStr.equalsIgnoreCase("visible")) {
+ me->_visible = true;
+ } else if (visiblityStr.equalsIgnoreCase("invisible")) {
+ me->_visible = false;
+ } else {
+ Common::String error = Common::String::format("Error: Invalid visibility string: ('%s')!", visiblityStr.c_str());
+ g_lingo->push(error);
+ return;
+ }
+
+ me->_rect = stringToRect(rectStr);
+
+ Common::Path path = findMoviePath(pathStr);
+ if (path.empty()) {
+ Common::String error = Common::String::format("Error: Movie file ('%s') not found!", pathStr.c_str());
+ g_lingo->push(error);
+ return;
+ }
+
+ me->_video = new Video::QuickTimeDecoder();
+ debugC(5, kDebugXObj, "QtvrxtraXtra::m_QTVROpen(): Loading QT file ('%s')", path.toString().c_str());
+ if (!me->_video->loadFile(path)) {
+ Common::String error = Common::String::format("Error: Failed to load movie file ('%s')!", path.toString().c_str());
+ g_lingo->push(error);
+ return;
+ }
+
+ g_lingo->push(Common::String());
+}
+
+void QtvrxtraXtra::m_QTVRClose(int nargs) {
+ g_lingo->printArgs("QtvrxtraXtra::m_QTVRClose", nargs);
+ ARGNUMCHECK(0);
+
+ QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
+
+ if (me->_video) {
+ me->_video->close();
+ delete me->_video;
+ me->_video = nullptr;
+ }
+}
+
XOBJSTUB(QtvrxtraXtra::m_QTVRUpdate, 0)
XOBJSTUB(QtvrxtraXtra::m_QTVRGetQTVRType, 0)
XOBJSTUB(QtvrxtraXtra::m_QTVRIdle, 0)
diff --git a/engines/director/lingo/xtras/qtvrxtra.h b/engines/director/lingo/xtras/qtvrxtra.h
index 207adc1e560..3c4920f4b61 100644
--- a/engines/director/lingo/xtras/qtvrxtra.h
+++ b/engines/director/lingo/xtras/qtvrxtra.h
@@ -22,6 +22,10 @@
#ifndef DIRECTOR_LINGO_XTRAS_QTVRXTRA_H
#define DIRECTOR_LINGO_XTRAS_QTVRXTRA_H
+namespace Video {
+class QuickTimeDecoder;
+}
+
namespace Director {
class QtvrxtraXtraObject : public Object<QtvrxtraXtraObject> {
@@ -30,6 +34,11 @@ public:
bool hasProp(const Common::String &propName) override;
Datum getProp(const Common::String &propName) override;
+
+ Video::QuickTimeDecoder *_video;
+
+ Common::Rect _rect;
+ bool _visible;
};
namespace QtvrxtraXtra {
Commit: e4a3b8d2bbd5e9da91c97dbfb63959ca3a76c7f1
https://github.com/scummvm/scummvm/commit/e4a3b8d2bbd5e9da91c97dbfb63959ca3a76c7f1
Author: Krish (ganatrakrish2882005 at gmail.com)
Date: 2024-08-14T21:52:03+02:00
Commit Message:
DIRECTOR: LINGO: XOBJ: Implement IsQTVRMovie and remove stub
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 05884cda340..a921d4ad136 100644
--- a/engines/director/lingo/xtras/qtvrxtra.cpp
+++ b/engines/director/lingo/xtras/qtvrxtra.cpp
@@ -416,6 +416,14 @@ XOBJSTUB(QtvrxtraXtra::m_QTVRGetRolloverHotSpotHandler, 0)
XOBJSTUB(QtvrxtraXtra::m_QTVRSetRolloverHotSpotHandler, 0)
XOBJSTUB(QtvrxtraXtra::m_QTVRExitMouseOver, 0)
XOBJSTUB(QtvrxtraXtra::m_QTVRPassMouseDown, 0)
-XOBJSTUB(QtvrxtraXtra::m_IsQTVRMovie, 0)
+
+void QtvrxtraXtra::m_IsQTVRMovie(int nargs) {
+ g_lingo->printArgs("QtvrxtraXtra::m_IsQTVRMovie", nargs);
+ ARGNUMCHECK(0);
+
+ QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
+
+ g_lingo->push((int)(me->_video && me->_video->isVideoLoaded()));
+}
}
Commit: aee953ca0b7d40bd2c8776c08a7604f16b8183ce
https://github.com/scummvm/scummvm/commit/aee953ca0b7d40bd2c8776c08a7604f16b8183ce
Author: Krish (ganatrakrish2882005 at gmail.com)
Date: 2024-08-14T21:52:03+02:00
Commit Message:
COMMON: FORMATS: Make QTVRType enum public
Changed paths:
common/formats/quicktime.h
diff --git a/common/formats/quicktime.h b/common/formats/quicktime.h
index 03afae9d98e..5f275cb9eb2 100644
--- a/common/formats/quicktime.h
+++ b/common/formats/quicktime.h
@@ -99,6 +99,12 @@ public:
/** Find out if this parser has an open file handle */
bool isOpen() const { return _fd != nullptr; }
+ enum class QTVRType {
+ OTHER,
+ OBJECT,
+ PANORAMA
+ };
+
protected:
// This is the file handle from which data is read from. It can be the actual file handle or a decompressed stream.
SeekableReadStream *_fd;
@@ -340,12 +346,6 @@ protected:
float initialVPan;
};
- enum class QTVRType {
- OTHER,
- OBJECT,
- PANORAMA
- };
-
virtual SampleDesc *readSampleDesc(Track *track, uint32 format, uint32 descSize) = 0;
uint32 _timeScale; // movie time
Commit: 88a5199398545c10f93631a6254cdbf4512f4b7c
https://github.com/scummvm/scummvm/commit/88a5199398545c10f93631a6254cdbf4512f4b7c
Author: Krish (ganatrakrish2882005 at gmail.com)
Date: 2024-08-14T21:52:03+02:00
Commit Message:
VIDEO: Implement getQTVRType() function
Changed paths:
video/qt_decoder.h
diff --git a/video/qt_decoder.h b/video/qt_decoder.h
index 32990e66eed..3eeb2992515 100644
--- a/video/qt_decoder.h
+++ b/video/qt_decoder.h
@@ -77,6 +77,7 @@ public:
void handleMouseButton(bool isDown, int16 x = -1, int16 y = -1);
bool isVR() const { return _isVR; }
+ QTVRType getQTVRType() const { return _qtvrType; }
protected:
Common::QuickTimeParser::SampleDesc *readSampleDesc(Common::QuickTimeParser::Track *track, uint32 format, uint32 descSize);
Commit: 3cf3b3e9ee7d7101de7b76a95f5dba76d39f1d18
https://github.com/scummvm/scummvm/commit/3cf3b3e9ee7d7101de7b76a95f5dba76d39f1d18
Author: Krish (ganatrakrish2882005 at gmail.com)
Date: 2024-08-14T21:52:03+02:00
Commit Message:
DIRECTOR: LINGO: XOBJ: Implement QTVRGetQTVRType and remove stub
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 a921d4ad136..c02f9b147b5 100644
--- a/engines/director/lingo/xtras/qtvrxtra.cpp
+++ b/engines/director/lingo/xtras/qtvrxtra.cpp
@@ -359,7 +359,27 @@ void QtvrxtraXtra::m_QTVRClose(int nargs) {
}
XOBJSTUB(QtvrxtraXtra::m_QTVRUpdate, 0)
-XOBJSTUB(QtvrxtraXtra::m_QTVRGetQTVRType, 0)
+
+void QtvrxtraXtra::m_QTVRGetQTVRType(int nargs) {
+ g_lingo->printArgs("QtvrxtraXtra::m_QTVRGetQTVRType", nargs);
+ ARGNUMCHECK(0);
+
+ QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
+
+ switch (me->_video->getQTVRType()) {
+ case Common::QuickTimeParser::QTVRType::PANORAMA:
+ g_lingo->push(Common::String("QTVRPanorama"));
+ break;
+ case Common::QuickTimeParser::QTVRType::OBJECT:
+ g_lingo->push(Common::String("QTVRObject"));
+ break;
+ case Common::QuickTimeParser::QTVRType::OTHER:
+ default:
+ g_lingo->push(Common::String("NotAQTVRType"));
+ break;
+ }
+}
+
XOBJSTUB(QtvrxtraXtra::m_QTVRIdle, 0)
XOBJSTUB(QtvrxtraXtra::m_QTVRMouseDown, 0)
XOBJSTUB(QtvrxtraXtra::m_QTVRMouseOver, 0)
Commit: 63c1deeabdbc465bc80e367d8336945ac5d8c527
https://github.com/scummvm/scummvm/commit/63c1deeabdbc465bc80e367d8336945ac5d8c527
Author: Krish (ganatrakrish2882005 at gmail.com)
Date: 2024-08-14T21:52:03+02:00
Commit Message:
VIDEO: Add get/set methods for panAngle, tiltAngle, FOV
Changed paths:
video/qt_decoder.h
diff --git a/video/qt_decoder.h b/video/qt_decoder.h
index 3eeb2992515..3ff3c73f947 100644
--- a/video/qt_decoder.h
+++ b/video/qt_decoder.h
@@ -76,6 +76,13 @@ public:
void handleMouseMove(int16 x, int16 y);
void handleMouseButton(bool isDown, int16 x = -1, int16 y = -1);
+ float getPanAngle() const { return ((VideoTrackHandler *)_nextVideoTrack)->getPanAngle(); }
+ void setPanAngle(float panAngle) { ((VideoTrackHandler *)_nextVideoTrack)->setPanAngle(panAngle); }
+ float getTiltAngle() const { return ((VideoTrackHandler *)_nextVideoTrack)->getTiltAngle(); }
+ void setTiltAngle(float tiltAngle) { ((VideoTrackHandler *)_nextVideoTrack)->setTiltAngle(tiltAngle); }
+ float getFOV() const { return ((VideoTrackHandler *)_nextVideoTrack)->getFOV(); }
+ void setFOV(float fov) { ((VideoTrackHandler *)_nextVideoTrack)->setFOV(fov); }
+
bool isVR() const { return _isVR; }
QTVRType getQTVRType() const { return _qtvrType; }
@@ -164,6 +171,13 @@ private:
Common::Rational getScaledWidth() const;
Common::Rational getScaledHeight() const;
+ float getPanAngle() const { return _panAngle; }
+ void setPanAngle(float panAngle) { _panAngle = panAngle; }
+ float getTiltAngle() const { return _tiltAngle; }
+ void setTiltAngle(float tiltAngle) { _tiltAngle = tiltAngle; }
+ float getFOV() const { return _fov; }
+ void setFOV(float fov) { _fov = fov; }
+
private:
QuickTimeDecoder *_decoder;
Common::QuickTimeParser::Track *_parent;
@@ -177,6 +191,10 @@ private:
mutable bool _dirtyPalette;
bool _reversed;
+ float _panAngle;
+ float _tiltAngle;
+ float _fov;
+
void constructPanorama();
void projectPanorama();
Commit: 5f186e8553621952c91b22f0c0091363534a252b
https://github.com/scummvm/scummvm/commit/5f186e8553621952c91b22f0c0091363534a252b
Author: Krish (ganatrakrish2882005 at gmail.com)
Date: 2024-08-14T21:52:03+02:00
Commit Message:
DIRECTOR: LINGO: XOBJ: Implement view control methods and remove stubs
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 c02f9b147b5..896fa392999 100644
--- a/engines/director/lingo/xtras/qtvrxtra.cpp
+++ b/engines/director/lingo/xtras/qtvrxtra.cpp
@@ -174,11 +174,11 @@ static MethodProto xlibMethods[] = {
{ "QTVRMouseDown", QtvrxtraXtra::m_QTVRMouseDown, 0, 0, 500 },
{ "QTVRMouseOver", QtvrxtraXtra::m_QTVRMouseOver, 0, 0, 500 },
{ "QTVRGetPanAngle", QtvrxtraXtra::m_QTVRGetPanAngle, 0, 0, 500 },
- { "QTVRSetPanAngle", QtvrxtraXtra::m_QTVRSetPanAngle, 1, 0, 500 },
+ { "QTVRSetPanAngle", QtvrxtraXtra::m_QTVRSetPanAngle, 1, 1, 500 },
{ "QTVRGetTiltAngle", QtvrxtraXtra::m_QTVRGetTiltAngle, 0, 0, 500 },
- { "QTVRSetTiltAngle", QtvrxtraXtra::m_QTVRSetTiltAngle, 1, 0, 500 },
+ { "QTVRSetTiltAngle", QtvrxtraXtra::m_QTVRSetTiltAngle, 1, 1, 500 },
{ "QTVRGetFOV", QtvrxtraXtra::m_QTVRGetFOV, 0, 0, 500 },
- { "QTVRSetFOV", QtvrxtraXtra::m_QTVRSetFOV, 1, 0, 500 },
+ { "QTVRSetFOV", QtvrxtraXtra::m_QTVRSetFOV, 1, 1, 500 },
{ "QTVRGetClickLoc", QtvrxtraXtra::m_QTVRGetClickLoc, 0, 0, 500 },
{ "QTVRSetClickLoc", QtvrxtraXtra::m_QTVRSetClickLoc, 1, 0, 500 },
{ "QTVRGetClickPanAngles", QtvrxtraXtra::m_QTVRGetClickPanAngles, 0, 0, 500 },
@@ -383,12 +383,61 @@ void QtvrxtraXtra::m_QTVRGetQTVRType(int nargs) {
XOBJSTUB(QtvrxtraXtra::m_QTVRIdle, 0)
XOBJSTUB(QtvrxtraXtra::m_QTVRMouseDown, 0)
XOBJSTUB(QtvrxtraXtra::m_QTVRMouseOver, 0)
-XOBJSTUB(QtvrxtraXtra::m_QTVRGetPanAngle, 0)
-XOBJSTUB(QtvrxtraXtra::m_QTVRSetPanAngle, 0)
-XOBJSTUB(QtvrxtraXtra::m_QTVRGetTiltAngle, 0)
-XOBJSTUB(QtvrxtraXtra::m_QTVRSetTiltAngle, 0)
-XOBJSTUB(QtvrxtraXtra::m_QTVRGetFOV, 0)
-XOBJSTUB(QtvrxtraXtra::m_QTVRSetFOV, 0)
+
+void QtvrxtraXtra::m_QTVRGetPanAngle(int nargs) {
+ g_lingo->printArgs("QtvrxtraXtra::m_QTVRGetPanAngle", nargs);
+ ARGNUMCHECK(0);
+
+ QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
+
+ g_lingo->push(Common::String::format("%f", me->_video->getPanAngle()));
+}
+
+void QtvrxtraXtra::m_QTVRSetPanAngle(int nargs) {
+ g_lingo->printArgs("QtvrxtraXtra::m_QTVRSetPanAngle", nargs);
+ ARGNUMCHECK(1);
+
+ QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
+
+ me->_video->setPanAngle(atof(g_lingo->pop().asString().c_str()));
+}
+
+void QtvrxtraXtra::m_QTVRGetTiltAngle(int nargs) {
+ g_lingo->printArgs("QtvrxtraXtra::m_QTVRGetTiltAngle", nargs);
+ ARGNUMCHECK(0);
+
+ QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
+
+ g_lingo->push(Common::String::format("%f", me->_video->getTiltAngle()));
+}
+
+void QtvrxtraXtra::m_QTVRSetTiltAngle(int nargs) {
+ g_lingo->printArgs("QtvrxtraXtra::m_QTVRSetTiltAngle", nargs);
+ ARGNUMCHECK(1);
+
+ QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
+
+ me->_video->setTiltAngle(atof(g_lingo->pop().asString().c_str()));
+}
+
+void QtvrxtraXtra::m_QTVRGetFOV(int nargs) {
+ g_lingo->printArgs("QtvrxtraXtra::m_QTVRGetFOV", nargs);
+ ARGNUMCHECK(0);
+
+ QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
+
+ g_lingo->push(Common::String::format("%f", me->_video->getFOV()));
+}
+
+void QtvrxtraXtra::m_QTVRSetFOV(int nargs) {
+ g_lingo->printArgs("QtvrxtraXtra::m_QTVRSetFOV", nargs);
+ ARGNUMCHECK(1);
+
+ QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
+
+ me->_video->setFOV(atof(g_lingo->pop().asString().c_str()));
+}
+
XOBJSTUB(QtvrxtraXtra::m_QTVRGetClickLoc, 0)
XOBJSTUB(QtvrxtraXtra::m_QTVRSetClickLoc, 0)
XOBJSTUB(QtvrxtraXtra::m_QTVRGetClickPanAngles, 0)
Commit: 764e4c15aea1bfd4765e1d7311a4e839edf3adee
https://github.com/scummvm/scummvm/commit/764e4c15aea1bfd4765e1d7311a4e839edf3adee
Author: Krish (ganatrakrish2882005 at gmail.com)
Date: 2024-08-14T21:52:03+02:00
Commit Message:
COMMON: FORMATS: Make _panoTrack protected
Changed paths:
common/formats/quicktime.h
diff --git a/common/formats/quicktime.h b/common/formats/quicktime.h
index 5f275cb9eb2..4abce63dd2b 100644
--- a/common/formats/quicktime.h
+++ b/common/formats/quicktime.h
@@ -358,6 +358,8 @@ protected:
uint16 _winX;
uint16 _winY;
+ Track *_panoTrack;
+
void init();
private:
@@ -378,8 +380,6 @@ private:
MacResManager *_resFork;
bool _foundMOOV;
- Track *_panoTrack;
-
void initParseTable();
bool parsePanoramaAtoms();
Commit: 8221cd6df07d8d7d2c2f3b0101a6e6a2a0f650d5
https://github.com/scummvm/scummvm/commit/8221cd6df07d8d7d2c2f3b0101a6e6a2a0f650d5
Author: Krish (ganatrakrish2882005 at gmail.com)
Date: 2024-08-14T21:52:03+02:00
Commit Message:
VIDEO: Implement NodeData struct and getNodeData method
Changed paths:
video/qt_decoder.cpp
video/qt_decoder.h
diff --git a/video/qt_decoder.cpp b/video/qt_decoder.cpp
index 1168f45f74c..dea508c00f6 100644
--- a/video/qt_decoder.cpp
+++ b/video/qt_decoder.cpp
@@ -671,6 +671,28 @@ void QuickTimeDecoder::handleMouseButton(bool isDown, int16 x, int16 y) {
}
}
+QuickTimeDecoder::NodeData QuickTimeDecoder::getNodeData(uint32 nodeID) {
+ for (const auto &sample : _panoTrack->panoSamples) {
+ if (sample.hdr.nodeID == nodeID) {
+ return {
+ nodeID,
+ sample.hdr.defHPan,
+ sample.hdr.defVPan,
+ sample.hdr.defZoom,
+ sample.hdr.minHPan,
+ sample.hdr.minVPan,
+ sample.hdr.maxHPan,
+ sample.hdr.maxVPan,
+ sample.hdr.minZoom,
+ sample.strTable.getString(sample.hdr.nameStrOffset)};
+ }
+ }
+
+ error("QuickTimeDecoder::getNodeData(): Node with nodeID %d not found!", nodeID);
+
+ return {};
+}
+
Audio::Timestamp QuickTimeDecoder::VideoTrackHandler::getFrameTime(uint frame) const {
// TODO: This probably doesn't work right with edit lists
int cumulativeDuration = 0;
diff --git a/video/qt_decoder.h b/video/qt_decoder.h
index 3ff3c73f947..a645cb4b76d 100644
--- a/video/qt_decoder.h
+++ b/video/qt_decoder.h
@@ -86,6 +86,24 @@ public:
bool isVR() const { return _isVR; }
QTVRType getQTVRType() const { return _qtvrType; }
+ struct NodeData {
+ uint32 nodeID;
+
+ float defHPan;
+ float defVPan;
+ float defZoom;
+
+ float minHPan;
+ float minVPan;
+ float maxHPan;
+ float maxVPan;
+ float minZoom;
+
+ Common::String name;
+ };
+
+ NodeData getNodeData(uint32 nodeID);
+
protected:
Common::QuickTimeParser::SampleDesc *readSampleDesc(Common::QuickTimeParser::Track *track, uint32 format, uint32 descSize);
Commit: 71c7feaf99f01b898a274138aeb4e4d6166f56d7
https://github.com/scummvm/scummvm/commit/71c7feaf99f01b898a274138aeb4e4d6166f56d7
Author: Krish (ganatrakrish2882005 at gmail.com)
Date: 2024-08-14T21:52:03+02:00
Commit Message:
DIRECTOR: LINGO: XOBJ: Implement node control methods and remove stubs
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 896fa392999..8057d69117e 100644
--- a/engines/director/lingo/xtras/qtvrxtra.cpp
+++ b/engines/director/lingo/xtras/qtvrxtra.cpp
@@ -191,7 +191,7 @@ static MethodProto xlibMethods[] = {
{ "QTVRGetObjectViewAngles", QtvrxtraXtra::m_QTVRGetObjectViewAngles, 0, 0, 500 },
{ "QTVRGetObjectZoomRect", QtvrxtraXtra::m_QTVRGetObjectZoomRect, 0, 0, 500 },
{ "QTVRGetNodeID", QtvrxtraXtra::m_QTVRGetNodeID, 0, 0, 500 },
- { "QTVRSetNodeID", QtvrxtraXtra::m_QTVRSetNodeID, 1, 0, 500 },
+ { "QTVRSetNodeID", QtvrxtraXtra::m_QTVRSetNodeID, 1, 1, 500 },
{ "QTVRGetNodeName", QtvrxtraXtra::m_QTVRGetNodeName, 0, 0, 500 },
{ "QTVRGetQuality", QtvrxtraXtra::m_QTVRGetQuality, 0, 0, 500 },
{ "QTVRSetQuality", QtvrxtraXtra::m_QTVRSetQuality, 1, 0, 500 },
@@ -449,9 +449,41 @@ XOBJSTUB(QtvrxtraXtra::m_QTVRGetHotSpotType, 0)
XOBJSTUB(QtvrxtraXtra::m_QTVRGetHotSpotViewAngles, 0)
XOBJSTUB(QtvrxtraXtra::m_QTVRGetObjectViewAngles, 0)
XOBJSTUB(QtvrxtraXtra::m_QTVRGetObjectZoomRect, 0)
-XOBJSTUB(QtvrxtraXtra::m_QTVRGetNodeID, 0)
-XOBJSTUB(QtvrxtraXtra::m_QTVRSetNodeID, 0)
-XOBJSTUB(QtvrxtraXtra::m_QTVRGetNodeName, 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);
+}
+
+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->setPanAngle(me->_currentNode.defHPan);
+ me->_video->setTiltAngle(me->_currentNode.defVPan);
+ me->_video->setFOV(me->_currentNode.defZoom);
+}
+
+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);
+}
+
XOBJSTUB(QtvrxtraXtra::m_QTVRGetQuality, 0)
XOBJSTUB(QtvrxtraXtra::m_QTVRSetQuality, 0)
XOBJSTUB(QtvrxtraXtra::m_QTVRGetTransitionMode, 0)
diff --git a/engines/director/lingo/xtras/qtvrxtra.h b/engines/director/lingo/xtras/qtvrxtra.h
index 3c4920f4b61..f79952730b8 100644
--- a/engines/director/lingo/xtras/qtvrxtra.h
+++ b/engines/director/lingo/xtras/qtvrxtra.h
@@ -22,9 +22,7 @@
#ifndef DIRECTOR_LINGO_XTRAS_QTVRXTRA_H
#define DIRECTOR_LINGO_XTRAS_QTVRXTRA_H
-namespace Video {
-class QuickTimeDecoder;
-}
+#include "video/qt_decoder.h"
namespace Director {
@@ -39,6 +37,8 @@ public:
Common::Rect _rect;
bool _visible;
+
+ Video::QuickTimeDecoder::NodeData _currentNode;
};
namespace QtvrxtraXtra {
Commit: 0b0cbd2e0b720d970ac596e01765dec7d57089d3
https://github.com/scummvm/scummvm/commit/0b0cbd2e0b720d970ac596e01765dec7d57089d3
Author: Krish (ganatrakrish2882005 at gmail.com)
Date: 2024-08-14T21:52:03+02:00
Commit Message:
DIRECTOR: LINGO: XOBJ: Implement QTVRGet/SetQuality and remove stubs
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 8057d69117e..a9a905c1f19 100644
--- a/engines/director/lingo/xtras/qtvrxtra.cpp
+++ b/engines/director/lingo/xtras/qtvrxtra.cpp
@@ -194,7 +194,7 @@ static MethodProto xlibMethods[] = {
{ "QTVRSetNodeID", QtvrxtraXtra::m_QTVRSetNodeID, 1, 1, 500 },
{ "QTVRGetNodeName", QtvrxtraXtra::m_QTVRGetNodeName, 0, 0, 500 },
{ "QTVRGetQuality", QtvrxtraXtra::m_QTVRGetQuality, 0, 0, 500 },
- { "QTVRSetQuality", QtvrxtraXtra::m_QTVRSetQuality, 1, 0, 500 },
+ { "QTVRSetQuality", QtvrxtraXtra::m_QTVRSetQuality, 1, 1, 500 },
{ "QTVRGetTransitionMode", QtvrxtraXtra::m_QTVRGetTransitionMode, 0, 0, 500 },
{ "QTVRSetTransitionMode", QtvrxtraXtra::m_QTVRSetTransitionMode, 1, 0, 500 },
{ "QTVRGetTransitionSpeed", QtvrxtraXtra::m_QTVRGetTransitionSpeed, 0, 0, 500 },
@@ -241,6 +241,7 @@ QtvrxtraXtraObject::QtvrxtraXtraObject(ObjectType ObjectType) :Object<QtvrxtraXt
_video = nullptr;
_visible = false;
+ _quality = 0.0f;
}
bool QtvrxtraXtraObject::hasProp(const Common::String &propName) {
@@ -484,8 +485,24 @@ void QtvrxtraXtra::m_QTVRGetNodeName(int nargs) {
g_lingo->push(me->_currentNode.name);
}
-XOBJSTUB(QtvrxtraXtra::m_QTVRGetQuality, 0)
-XOBJSTUB(QtvrxtraXtra::m_QTVRSetQuality, 0)
+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());
+}
+
XOBJSTUB(QtvrxtraXtra::m_QTVRGetTransitionMode, 0)
XOBJSTUB(QtvrxtraXtra::m_QTVRSetTransitionMode, 0)
XOBJSTUB(QtvrxtraXtra::m_QTVRGetTransitionSpeed, 0)
diff --git a/engines/director/lingo/xtras/qtvrxtra.h b/engines/director/lingo/xtras/qtvrxtra.h
index f79952730b8..0995d779c85 100644
--- a/engines/director/lingo/xtras/qtvrxtra.h
+++ b/engines/director/lingo/xtras/qtvrxtra.h
@@ -37,6 +37,7 @@ public:
Common::Rect _rect;
bool _visible;
+ float _quality;
Video::QuickTimeDecoder::NodeData _currentNode;
};
Commit: 7bd452041bf157858c37c148c568323132663a92
https://github.com/scummvm/scummvm/commit/7bd452041bf157858c37c148c568323132663a92
Author: Krish (ganatrakrish2882005 at gmail.com)
Date: 2024-08-14T21:52:03+02:00
Commit Message:
DIRECTOR: LINGO: XOBJ: Implement transition control methods and remove stubs
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 a9a905c1f19..1bcf8930df0 100644
--- a/engines/director/lingo/xtras/qtvrxtra.cpp
+++ b/engines/director/lingo/xtras/qtvrxtra.cpp
@@ -196,9 +196,9 @@ static MethodProto xlibMethods[] = {
{ "QTVRGetQuality", QtvrxtraXtra::m_QTVRGetQuality, 0, 0, 500 },
{ "QTVRSetQuality", QtvrxtraXtra::m_QTVRSetQuality, 1, 1, 500 },
{ "QTVRGetTransitionMode", QtvrxtraXtra::m_QTVRGetTransitionMode, 0, 0, 500 },
- { "QTVRSetTransitionMode", QtvrxtraXtra::m_QTVRSetTransitionMode, 1, 0, 500 },
+ { "QTVRSetTransitionMode", QtvrxtraXtra::m_QTVRSetTransitionMode, 1, 1, 500 },
{ "QTVRGetTransitionSpeed", QtvrxtraXtra::m_QTVRGetTransitionSpeed, 0, 0, 500 },
- { "QTVRSetTransitionSpeed", QtvrxtraXtra::m_QTVRSetTransitionSpeed, 1, 0, 500 },
+ { "QTVRSetTransitionSpeed", QtvrxtraXtra::m_QTVRSetTransitionSpeed, 1, 1, 500 },
{ "QTVRGetUpdateMode", QtvrxtraXtra::m_QTVRGetUpdateMode, 0, 0, 500 },
{ "QTVRSetUpdateMode", QtvrxtraXtra::m_QTVRSetUpdateMode, 1, 0, 500 },
{ "QTVRGetVisible", QtvrxtraXtra::m_QTVRGetVisible, 0, 0, 500 },
@@ -242,6 +242,9 @@ QtvrxtraXtraObject::QtvrxtraXtraObject(ObjectType ObjectType) :Object<QtvrxtraXt
_visible = false;
_quality = 0.0f;
+
+ _transitionMode = "normal";
+ _transitionSpeed = 1.0f;
}
bool QtvrxtraXtraObject::hasProp(const Common::String &propName) {
@@ -503,10 +506,42 @@ void QtvrxtraXtra::m_QTVRSetQuality(int nargs) {
me->_quality = atof(g_lingo->pop().asString().c_str());
}
-XOBJSTUB(QtvrxtraXtra::m_QTVRGetTransitionMode, 0)
-XOBJSTUB(QtvrxtraXtra::m_QTVRSetTransitionMode, 0)
-XOBJSTUB(QtvrxtraXtra::m_QTVRGetTransitionSpeed, 0)
-XOBJSTUB(QtvrxtraXtra::m_QTVRSetTransitionSpeed, 0)
+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());
+}
+
XOBJSTUB(QtvrxtraXtra::m_QTVRGetUpdateMode, 0)
XOBJSTUB(QtvrxtraXtra::m_QTVRSetUpdateMode, 0)
XOBJSTUB(QtvrxtraXtra::m_QTVRGetVisible, 0)
diff --git a/engines/director/lingo/xtras/qtvrxtra.h b/engines/director/lingo/xtras/qtvrxtra.h
index 0995d779c85..7095160925d 100644
--- a/engines/director/lingo/xtras/qtvrxtra.h
+++ b/engines/director/lingo/xtras/qtvrxtra.h
@@ -40,6 +40,9 @@ public:
float _quality;
Video::QuickTimeDecoder::NodeData _currentNode;
+
+ Common::String _transitionMode;
+ float _transitionSpeed;
};
namespace QtvrxtraXtra {
Commit: b61450c8b25271fa51547d0b4db7a9b4869b29bc
https://github.com/scummvm/scummvm/commit/b61450c8b25271fa51547d0b4db7a9b4869b29bc
Author: Krish (ganatrakrish2882005 at gmail.com)
Date: 2024-08-14T21:52:03+02:00
Commit Message:
DIRECTOR: LINGO: XOBJ: Implement QTVRGet/SetUpdateMode and remove stubs
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 1bcf8930df0..88eb6b93fc8 100644
--- a/engines/director/lingo/xtras/qtvrxtra.cpp
+++ b/engines/director/lingo/xtras/qtvrxtra.cpp
@@ -200,7 +200,7 @@ static MethodProto xlibMethods[] = {
{ "QTVRGetTransitionSpeed", QtvrxtraXtra::m_QTVRGetTransitionSpeed, 0, 0, 500 },
{ "QTVRSetTransitionSpeed", QtvrxtraXtra::m_QTVRSetTransitionSpeed, 1, 1, 500 },
{ "QTVRGetUpdateMode", QtvrxtraXtra::m_QTVRGetUpdateMode, 0, 0, 500 },
- { "QTVRSetUpdateMode", QtvrxtraXtra::m_QTVRSetUpdateMode, 1, 0, 500 },
+ { "QTVRSetUpdateMode", QtvrxtraXtra::m_QTVRSetUpdateMode, 1, 1, 500 },
{ "QTVRGetVisible", QtvrxtraXtra::m_QTVRGetVisible, 0, 0, 500 },
{ "QTVRSetVisible", QtvrxtraXtra::m_QTVRSetVisible, 1, 0, 500 },
{ "QTVRGetWarpMode", QtvrxtraXtra::m_QTVRGetWarpMode, 0, 0, 500 },
@@ -245,6 +245,8 @@ QtvrxtraXtraObject::QtvrxtraXtraObject(ObjectType ObjectType) :Object<QtvrxtraXt
_transitionMode = "normal";
_transitionSpeed = 1.0f;
+
+ _updateMode = "normal";
}
bool QtvrxtraXtraObject::hasProp(const Common::String &propName) {
@@ -542,8 +544,24 @@ void QtvrxtraXtra::m_QTVRSetTransitionSpeed(int nargs) {
me->_transitionSpeed = atof(g_lingo->pop().asString().c_str());
}
-XOBJSTUB(QtvrxtraXtra::m_QTVRGetUpdateMode, 0)
-XOBJSTUB(QtvrxtraXtra::m_QTVRSetUpdateMode, 0)
+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_QTVRGetVisible, 0)
XOBJSTUB(QtvrxtraXtra::m_QTVRSetVisible, 0)
XOBJSTUB(QtvrxtraXtra::m_QTVRGetWarpMode, 0)
diff --git a/engines/director/lingo/xtras/qtvrxtra.h b/engines/director/lingo/xtras/qtvrxtra.h
index 7095160925d..ec02bcb8921 100644
--- a/engines/director/lingo/xtras/qtvrxtra.h
+++ b/engines/director/lingo/xtras/qtvrxtra.h
@@ -43,6 +43,8 @@ public:
Common::String _transitionMode;
float _transitionSpeed;
+
+ Common::String _updateMode;
};
namespace QtvrxtraXtra {
Commit: 2a095e6c877348e04e13c85776ed218cdfb459af
https://github.com/scummvm/scummvm/commit/2a095e6c877348e04e13c85776ed218cdfb459af
Author: Krish (ganatrakrish2882005 at gmail.com)
Date: 2024-08-14T21:52:03+02:00
Commit Message:
DIRECTOR: LINGO: XOBJ: Implement QTVRGet/SetVisible and remove stubs
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 88eb6b93fc8..9f91236ecd5 100644
--- a/engines/director/lingo/xtras/qtvrxtra.cpp
+++ b/engines/director/lingo/xtras/qtvrxtra.cpp
@@ -202,7 +202,7 @@ static MethodProto xlibMethods[] = {
{ "QTVRGetUpdateMode", QtvrxtraXtra::m_QTVRGetUpdateMode, 0, 0, 500 },
{ "QTVRSetUpdateMode", QtvrxtraXtra::m_QTVRSetUpdateMode, 1, 1, 500 },
{ "QTVRGetVisible", QtvrxtraXtra::m_QTVRGetVisible, 0, 0, 500 },
- { "QTVRSetVisible", QtvrxtraXtra::m_QTVRSetVisible, 1, 0, 500 },
+ { "QTVRSetVisible", QtvrxtraXtra::m_QTVRSetVisible, 1, 1, 500 },
{ "QTVRGetWarpMode", QtvrxtraXtra::m_QTVRGetWarpMode, 0, 0, 500 },
{ "QTVRSetWarpMode", QtvrxtraXtra::m_QTVRSetWarpMode, 1, 0, 500 },
{ "QTVRCollapseToHotSpotRgn", QtvrxtraXtra::m_QTVRCollapseToHotSpotRgn, 0, 0, 500 },
@@ -562,8 +562,24 @@ void QtvrxtraXtra::m_QTVRSetUpdateMode(int nargs) {
me->_updateMode = g_lingo->pop().asString();
}
-XOBJSTUB(QtvrxtraXtra::m_QTVRGetVisible, 0)
-XOBJSTUB(QtvrxtraXtra::m_QTVRSetVisible, 0)
+void QtvrxtraXtra::m_QTVRGetVisible(int nargs) {
+ g_lingo->printArgs("QtvrxtraXtra::m_QTVRGetVisible", nargs);
+ ARGNUMCHECK(0);
+
+ QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
+
+ g_lingo->push((int)me->_visible);
+}
+
+void QtvrxtraXtra::m_QTVRSetVisible(int nargs) {
+ g_lingo->printArgs("QtvrxtraXtra::m_QTVRSetVisible", nargs);
+ ARGNUMCHECK(1);
+
+ QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
+
+ me->_visible = (bool)g_lingo->pop().asInt();
+}
+
XOBJSTUB(QtvrxtraXtra::m_QTVRGetWarpMode, 0)
XOBJSTUB(QtvrxtraXtra::m_QTVRSetWarpMode, 0)
XOBJSTUB(QtvrxtraXtra::m_QTVRCollapseToHotSpotRgn, 0)
Commit: 19647ff996187421a409698c03746db43b7b8961
https://github.com/scummvm/scummvm/commit/19647ff996187421a409698c03746db43b7b8961
Author: Krish (ganatrakrish2882005 at gmail.com)
Date: 2024-08-14T21:52:03+02:00
Commit Message:
VIDEO: Implement row and column navigation methods
Changed paths:
video/qt_decoder.cpp
video/qt_decoder.h
diff --git a/video/qt_decoder.cpp b/video/qt_decoder.cpp
index dea508c00f6..b2f9c959e39 100644
--- a/video/qt_decoder.cpp
+++ b/video/qt_decoder.cpp
@@ -671,6 +671,55 @@ void QuickTimeDecoder::handleMouseButton(bool isDown, int16 x, int16 y) {
}
}
+void QuickTimeDecoder::setCurrentRow(int row) {
+ VideoTrackHandler *track = (VideoTrackHandler *)_nextVideoTrack;
+
+ int currentColumn = track->getCurFrame() % _nav.columns;
+ int newFrame = row * _nav.columns + currentColumn;
+
+ if (newFrame >= 0 && newFrame < track->getFrameCount()) {
+ track->setCurFrame(newFrame);
+ }
+}
+
+void QuickTimeDecoder::setCurrentColumn(int column) {
+ VideoTrackHandler *track = (VideoTrackHandler *)_nextVideoTrack;
+
+ int currentRow = track->getCurFrame() / _nav.columns;
+ int newFrame = currentRow * _nav.columns + column;
+
+ if (newFrame >= 0 && newFrame < track->getFrameCount()) {
+ track->setCurFrame(newFrame);
+ }
+}
+
+void QuickTimeDecoder::nudge(const Common::String &direction) {
+ VideoTrackHandler *track = (VideoTrackHandler *)_nextVideoTrack;
+
+ int curFrame = track->getCurFrame();
+ int currentRow = curFrame / _nav.columns;
+ int currentRowStart = currentRow * _nav.columns;
+ int newFrame = curFrame;
+
+ if (direction.equalsIgnoreCase("left")) {
+ newFrame = (curFrame - 1 - currentRowStart) % _nav.columns + currentRowStart;
+ } else if (direction.equalsIgnoreCase("right")) {
+ newFrame = (curFrame + 1 - currentRowStart) % _nav.columns + currentRowStart;
+ } else if (direction.equalsIgnoreCase("top")) {
+ newFrame = curFrame - _nav.columns;
+ if (newFrame < 0)
+ return;
+ } else if (direction.equalsIgnoreCase("bottom")) {
+ newFrame = curFrame + _nav.columns;
+ if (newFrame >= track->getFrameCount())
+ return;
+ } else {
+ error("QuickTimeDecoder::nudge(): Invald direction: ('%s')!", direction.c_str());
+ }
+
+ track->setCurFrame(newFrame);
+}
+
QuickTimeDecoder::NodeData QuickTimeDecoder::getNodeData(uint32 nodeID) {
for (const auto &sample : _panoTrack->panoSamples) {
if (sample.hdr.nodeID == nodeID) {
diff --git a/video/qt_decoder.h b/video/qt_decoder.h
index a645cb4b76d..ac599a2e660 100644
--- a/video/qt_decoder.h
+++ b/video/qt_decoder.h
@@ -83,6 +83,13 @@ public:
float getFOV() const { return ((VideoTrackHandler *)_nextVideoTrack)->getFOV(); }
void setFOV(float fov) { ((VideoTrackHandler *)_nextVideoTrack)->setFOV(fov); }
+ int getCurrentRow() { return _nextVideoTrack->getCurFrame() / _nav.columns; }
+ void setCurrentRow(int row);
+ int getCurrentColumn() { return _nextVideoTrack->getCurFrame() % _nav.columns; }
+ void setCurrentColumn(int column);
+
+ void nudge(const Common::String &direction);
+
bool isVR() const { return _isVR; }
QTVRType getQTVRType() const { return _qtvrType; }
Commit: cd85cfb4dac6554eb79623f106f8979cf0b46599
https://github.com/scummvm/scummvm/commit/cd85cfb4dac6554eb79623f106f8979cf0b46599
Author: Krish (ganatrakrish2882005 at gmail.com)
Date: 2024-08-14T21:52:03+02:00
Commit Message:
DIRECTOR: LINGO: XOBJ: Implement frame navigation methods and remove stubs
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 9f91236ecd5..2db311249b6 100644
--- a/engines/director/lingo/xtras/qtvrxtra.cpp
+++ b/engines/director/lingo/xtras/qtvrxtra.cpp
@@ -208,10 +208,10 @@ static MethodProto xlibMethods[] = {
{ "QTVRCollapseToHotSpotRgn", QtvrxtraXtra::m_QTVRCollapseToHotSpotRgn, 0, 0, 500 },
{ "QTVRZoomOutEffect", QtvrxtraXtra::m_QTVRZoomOutEffect, 3, 0, 500 },
{ "QTVRGetColumn", QtvrxtraXtra::m_QTVRGetColumn, 0, 0, 500 },
- { "QTVRSetColumn", QtvrxtraXtra::m_QTVRSetColumn, 1, 0, 500 },
+ { "QTVRSetColumn", QtvrxtraXtra::m_QTVRSetColumn, 1, 1, 500 },
{ "QTVRGetRow", QtvrxtraXtra::m_QTVRGetRow, 0, 0, 500 },
- { "QTVRSetRow", QtvrxtraXtra::m_QTVRSetRow, 1, 0, 500 },
- { "QTVRNudge", QtvrxtraXtra::m_QTVRNudge, 1, 0, 500 },
+ { "QTVRSetRow", QtvrxtraXtra::m_QTVRSetRow, 1, 1, 500 },
+ { "QTVRNudge", QtvrxtraXtra::m_QTVRNudge, 1, 1, 500 },
{ "QTVRGetMouseDownHandler", QtvrxtraXtra::m_QTVRGetMouseDownHandler, 0, 0, 500 },
{ "QTVRSetMouseDownHandler", QtvrxtraXtra::m_QTVRSetMouseDownHandler, 1, 0, 500 },
{ "QTVRGetMouseOverHandler", QtvrxtraXtra::m_QTVRGetMouseOverHandler, 0, 0, 500 },
@@ -584,11 +584,60 @@ XOBJSTUB(QtvrxtraXtra::m_QTVRGetWarpMode, 0)
XOBJSTUB(QtvrxtraXtra::m_QTVRSetWarpMode, 0)
XOBJSTUB(QtvrxtraXtra::m_QTVRCollapseToHotSpotRgn, 0)
XOBJSTUB(QtvrxtraXtra::m_QTVRZoomOutEffect, 0)
-XOBJSTUB(QtvrxtraXtra::m_QTVRGetColumn, 0)
-XOBJSTUB(QtvrxtraXtra::m_QTVRSetColumn, 0)
-XOBJSTUB(QtvrxtraXtra::m_QTVRGetRow, 0)
-XOBJSTUB(QtvrxtraXtra::m_QTVRSetRow, 0)
-XOBJSTUB(QtvrxtraXtra::m_QTVRNudge, 0)
+
+void QtvrxtraXtra::m_QTVRGetColumn(int nargs) {
+ g_lingo->printArgs("QtvrxtraXtra::m_QTVRGetColumn", nargs);
+ ARGNUMCHECK(0);
+
+ QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
+
+ g_lingo->push(Common::String::format("%d", me->_video->getCurrentColumn()));
+}
+
+void QtvrxtraXtra::m_QTVRSetColumn(int nargs) {
+ g_lingo->printArgs("QtvrxtraXtra::m_QTVRSetColumn", nargs);
+ ARGNUMCHECK(1);
+
+ QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
+
+ me->_video->setCurrentColumn(atoi(g_lingo->pop().asString().c_str()));
+}
+
+void QtvrxtraXtra::m_QTVRGetRow(int nargs) {
+ g_lingo->printArgs("QtvrxtraXtra::m_QTVRGetRow", nargs);
+ ARGNUMCHECK(0);
+
+ QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
+
+ g_lingo->push(Common::String::format("%d", me->_video->getCurrentRow()));
+}
+
+void QtvrxtraXtra::m_QTVRSetRow(int nargs) {
+ g_lingo->printArgs("QtvrxtraXtra::m_QTVRSetRow", nargs);
+ ARGNUMCHECK(1);
+
+ QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
+
+ me->_video->setCurrentRow(atoi(g_lingo->pop().asString().c_str()));
+}
+
+void QtvrxtraXtra::m_QTVRNudge(int nargs) {
+ g_lingo->printArgs("QtvrxtraXtra::m_QTVRNudge", nargs);
+ ARGNUMCHECK(1);
+
+ QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
+
+ Common::String direction = g_lingo->pop().asString();
+
+ if (!(direction.equalsIgnoreCase("left") || direction.equalsIgnoreCase("right") ||
+ direction.equalsIgnoreCase("top") || direction.equalsIgnoreCase("bottom"))) {
+ error("QtvrxtraXtra::m_QTVRNudge(): Invald direction: ('%s')!", direction.c_str());
+ return;
+ }
+
+ me->_video->nudge(direction);
+}
+
XOBJSTUB(QtvrxtraXtra::m_QTVRGetMouseDownHandler, 0)
XOBJSTUB(QtvrxtraXtra::m_QTVRSetMouseDownHandler, 0)
XOBJSTUB(QtvrxtraXtra::m_QTVRGetMouseOverHandler, 0)
Commit: 4a5f4d250f73aa3dfafa22246b84747912aab7b9
https://github.com/scummvm/scummvm/commit/4a5f4d250f73aa3dfafa22246b84747912aab7b9
Author: Krish (ganatrakrish2882005 at gmail.com)
Date: 2024-08-14T21:52:03+02:00
Commit Message:
DIRECTOR: LINGO: XOBJ: Implement MouseOver method and remove stub
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 2db311249b6..be976429945 100644
--- a/engines/director/lingo/xtras/qtvrxtra.cpp
+++ b/engines/director/lingo/xtras/qtvrxtra.cpp
@@ -388,7 +388,58 @@ void QtvrxtraXtra::m_QTVRGetQTVRType(int nargs) {
XOBJSTUB(QtvrxtraXtra::m_QTVRIdle, 0)
XOBJSTUB(QtvrxtraXtra::m_QTVRMouseDown, 0)
-XOBJSTUB(QtvrxtraXtra::m_QTVRMouseOver, 0)
+
+bool QtvrxtraXtraObject::processEvent(Common::Event &event) {
+ // FIXME: This class needs to inherit from MacWidget and override this function
+
+ if (!_capEventsMouseOver)
+ return false;
+
+ switch (event.type) {
+ case Common::EVENT_LBUTTONDOWN:
+ _video->handleMouseButton(true, event.mouse.x, event.mouse.y);
+ return true;
+ case Common::EVENT_LBUTTONUP:
+ _video->handleMouseButton(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_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));
+}
void QtvrxtraXtra::m_QTVRGetPanAngle(int nargs) {
g_lingo->printArgs("QtvrxtraXtra::m_QTVRGetPanAngle", nargs);
@@ -650,7 +701,16 @@ XOBJSTUB(QtvrxtraXtra::m_QTVRGetPanZoomStartHandler, 0)
XOBJSTUB(QtvrxtraXtra::m_QTVRSetPanZoomStartHandler, 0)
XOBJSTUB(QtvrxtraXtra::m_QTVRGetRolloverHotSpotHandler, 0)
XOBJSTUB(QtvrxtraXtra::m_QTVRSetRolloverHotSpotHandler, 0)
-XOBJSTUB(QtvrxtraXtra::m_QTVRExitMouseOver, 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_QTVRPassMouseDown, 0)
void QtvrxtraXtra::m_IsQTVRMovie(int nargs) {
diff --git a/engines/director/lingo/xtras/qtvrxtra.h b/engines/director/lingo/xtras/qtvrxtra.h
index ec02bcb8921..6bd35ace0e5 100644
--- a/engines/director/lingo/xtras/qtvrxtra.h
+++ b/engines/director/lingo/xtras/qtvrxtra.h
@@ -33,6 +33,8 @@ public:
bool hasProp(const Common::String &propName) override;
Datum getProp(const Common::String &propName) override;
+ bool processEvent(Common::Event &event);
+
Video::QuickTimeDecoder *_video;
Common::Rect _rect;
@@ -45,6 +47,8 @@ public:
float _transitionSpeed;
Common::String _updateMode;
+
+ bool _capEventsMouseOver;
};
namespace QtvrxtraXtra {
Commit: 9e800a6f2909321d588fa0024ca0a2a122c9fa93
https://github.com/scummvm/scummvm/commit/9e800a6f2909321d588fa0024ca0a2a122c9fa93
Author: Krish (ganatrakrish2882005 at gmail.com)
Date: 2024-08-14T21:52:03+02:00
Commit Message:
DIRECTOR: LINGO: XOBJ: Implement MouseDown methods and remove stubs
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 be976429945..3e444cbfd96 100644
--- a/engines/director/lingo/xtras/qtvrxtra.cpp
+++ b/engines/director/lingo/xtras/qtvrxtra.cpp
@@ -387,20 +387,32 @@ void QtvrxtraXtra::m_QTVRGetQTVRType(int nargs) {
}
XOBJSTUB(QtvrxtraXtra::m_QTVRIdle, 0)
-XOBJSTUB(QtvrxtraXtra::m_QTVRMouseDown, 0)
bool QtvrxtraXtraObject::processEvent(Common::Event &event) {
// FIXME: This class needs to inherit from MacWidget and override this function
- if (!_capEventsMouseOver)
+ if (!(_capEventsMouseOver && _capEventsMouseDown))
return false;
switch (event.type) {
case Common::EVENT_LBUTTONDOWN:
- _video->handleMouseButton(true, event.mouse.x, event.mouse.y);
+ 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);
@@ -430,6 +442,17 @@ bool QtvrxtraXtraObject::processEvent(Common::Event &event) {
}
}
+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);
@@ -689,8 +712,24 @@ void QtvrxtraXtra::m_QTVRNudge(int nargs) {
me->_video->nudge(direction);
}
-XOBJSTUB(QtvrxtraXtra::m_QTVRGetMouseDownHandler, 0)
-XOBJSTUB(QtvrxtraXtra::m_QTVRSetMouseDownHandler, 0)
+void QtvrxtraXtra::m_QTVRGetMouseDownHandler(int nargs) {
+ g_lingo->printArgs("QtvrxtraXtra::m_QTVRGetMouseDownHandler", nargs);
+ ARGNUMCHECK(0);
+
+ QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
+
+ g_lingo->push(me->_mouseDownHandler);
+}
+
+void QtvrxtraXtra::m_QTVRSetMouseDownHandler(int nargs) {
+ g_lingo->printArgs("QtvrxtraXtra::m_QTVRSetMouseDownHandler", nargs);
+ ARGNUMCHECK(1);
+
+ QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
+
+ me->_mouseDownHandler = g_lingo->pop().asString();
+}
+
XOBJSTUB(QtvrxtraXtra::m_QTVRGetMouseOverHandler, 0)
XOBJSTUB(QtvrxtraXtra::m_QTVRSetMouseOverHandler, 0)
XOBJSTUB(QtvrxtraXtra::m_QTVRGetMouseStillDownHandler, 0)
@@ -711,7 +750,14 @@ void QtvrxtraXtra::m_QTVRExitMouseOver(int nargs) {
me->_capEventsMouseOver = false;
}
-XOBJSTUB(QtvrxtraXtra::m_QTVRPassMouseDown, 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;
+
+ me->_passMouseDown = true;
+}
void QtvrxtraXtra::m_IsQTVRMovie(int nargs) {
g_lingo->printArgs("QtvrxtraXtra::m_IsQTVRMovie", nargs);
diff --git a/engines/director/lingo/xtras/qtvrxtra.h b/engines/director/lingo/xtras/qtvrxtra.h
index 6bd35ace0e5..12ca2e930c2 100644
--- a/engines/director/lingo/xtras/qtvrxtra.h
+++ b/engines/director/lingo/xtras/qtvrxtra.h
@@ -49,6 +49,11 @@ public:
Common::String _updateMode;
bool _capEventsMouseOver;
+ bool _capEventsMouseDown;
+
+ bool _passMouseDown;
+
+ Common::String _mouseDownHandler;
};
namespace QtvrxtraXtra {
Commit: d237519c1de40a8032f85c9783ebc6b026f64d5a
https://github.com/scummvm/scummvm/commit/d237519c1de40a8032f85c9783ebc6b026f64d5a
Author: Krish (ganatrakrish2882005 at gmail.com)
Date: 2024-08-14T21:52:03+02:00
Commit Message:
DIRECTOR: LINGO: XOBJ: Implement new/forget and remove stubs
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 3e444cbfd96..3ea76faad9b 100644
--- a/engines/director/lingo/xtras/qtvrxtra.cpp
+++ b/engines/director/lingo/xtras/qtvrxtra.cpp
@@ -275,12 +275,23 @@ void QtvrxtraXtra::close(ObjectType type) {
}
void QtvrxtraXtra::m_new(int nargs) {
- g_lingo->printSTUBWithArglist("QtvrxtraXtra::m_new", nargs);
- g_lingo->dropStack(nargs);
+ g_lingo->printArgs("QtvrxtraXtra::m_new", nargs);
+ ARGNUMCHECK(0);
+
g_lingo->push(g_lingo->_state->me);
}
-XOBJSTUB(QtvrxtraXtra::m_forget, 0)
+void QtvrxtraXtra::m_forget(int nargs) {
+ g_lingo->printArgs("QtvrxtraXtra::m_forget", nargs);
+ ARGNUMCHECK(0);
+
+ QtvrxtraXtraObject *me = (QtvrxtraXtraObject *)g_lingo->_state->me.u.obj;
+
+ if (me->_video) {
+ me->_video->close();
+ delete me->_video;
+ }
+}
void QtvrxtraXtra::m_QTVREnter(int nargs) {
g_lingo->printArgs("QtvrxtraXtra::m_QTVREnter", nargs);
Commit: a1d70a25fd2d095a0ec2d6f3c29cfa60c34fa5a7
https://github.com/scummvm/scummvm/commit/a1d70a25fd2d095a0ec2d6f3c29cfa60c34fa5a7
Author: Krish (ganatrakrish2882005 at gmail.com)
Date: 2024-08-14T21:52:03+02:00
Commit Message:
VIDEO: Implement QTVRGet/SetWarpMode methods
Changed paths:
video/qt_decoder.h
diff --git a/video/qt_decoder.h b/video/qt_decoder.h
index ac599a2e660..91d8bd41ea2 100644
--- a/video/qt_decoder.h
+++ b/video/qt_decoder.h
@@ -93,6 +93,9 @@ public:
bool isVR() const { return _isVR; }
QTVRType getQTVRType() const { return _qtvrType; }
+ uint8 getWarpMode() const { return _warpMode; }
+ void setWarpMode(uint8 warpMode) { _warpMode = warpMode; }
+
struct NodeData {
uint32 nodeID;
@@ -126,6 +129,8 @@ private:
bool _isVR;
+ uint8 _warpMode; // (2 | 1 | 0) for 2-d, 1-d or no warping
+
Graphics::Surface *_scaledSurface;
void scaleSurface(const Graphics::Surface *src, Graphics::Surface *dst,
const Common::Rational &scaleFactorX, const Common::Rational &scaleFactorY);
Commit: 6acd9a26593efb522485a3fbb1199622c931741e
https://github.com/scummvm/scummvm/commit/6acd9a26593efb522485a3fbb1199622c931741e
Author: Krish (ganatrakrish2882005 at gmail.com)
Date: 2024-08-14T21:52:03+02:00
Commit Message:
DIRECTOR: LINGO: XOBJ: Implement QTVRGet/SetWarpMode and remove stubs
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 3ea76faad9b..05372a07b21 100644
--- a/engines/director/lingo/xtras/qtvrxtra.cpp
+++ b/engines/director/lingo/xtras/qtvrxtra.cpp
@@ -665,8 +665,24 @@ void QtvrxtraXtra::m_QTVRSetVisible(int nargs) {
me->_visible = (bool)g_lingo->pop().asInt();
}
-XOBJSTUB(QtvrxtraXtra::m_QTVRGetWarpMode, 0)
-XOBJSTUB(QtvrxtraXtra::m_QTVRSetWarpMode, 0)
+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_QTVRCollapseToHotSpotRgn, 0)
XOBJSTUB(QtvrxtraXtra::m_QTVRZoomOutEffect, 0)
Commit: ab0bb7345601851c170cab3184b4fc135f28db6b
https://github.com/scummvm/scummvm/commit/ab0bb7345601851c170cab3184b4fc135f28db6b
Author: Krish (ganatrakrish2882005 at gmail.com)
Date: 2024-08-14T21:52:03+02:00
Commit Message:
DIRECTOR: LINGO: Map 'the member of sprite'
Changed paths:
engines/director/lingo/lingo-builtins.cpp
engines/director/lingo/lingo-bytecode.cpp
engines/director/lingo/lingo-the.cpp
engines/director/lingo/lingo-the.h
diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 0c7b0aaa437..2de6cd99813 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -3360,7 +3360,9 @@ void LB::b_member(int nargs) {
CastMemberID res;
if (nargs == 1) {
Datum member = g_lingo->pop();
- if (member.isNumeric()) {
+ if (member.isCastRef()) {
+ res = member.asMemberID();
+ } else if (member.isNumeric()) {
res = movie->getCastMemberIDByMember(member.asInt());
} else {
res = movie->getCastMemberIDByName(member.asString());
@@ -3374,7 +3376,9 @@ void LB::b_member(int nargs) {
} else {
libId = movie->getCastLibIDByName(library.asString());
}
- if (member.isNumeric()) {
+ if (member.isCastRef()) {
+ res = member.asMemberID();
+ } else if (member.isNumeric()) {
res = CastMemberID(member.asInt(), libId);
} else {
res = movie->getCastMemberIDByNameAndType(member.asString(), libId, kCastTypeAny);
diff --git a/engines/director/lingo/lingo-bytecode.cpp b/engines/director/lingo/lingo-bytecode.cpp
index 603459a85e0..247b4654274 100644
--- a/engines/director/lingo/lingo-bytecode.cpp
+++ b/engines/director/lingo/lingo-bytecode.cpp
@@ -212,6 +212,7 @@ static LingoV4TheEntity lingoV4TheEntity[] = {
{ 0x06, 0x21, kTheSprite, kTheLoc, true, kTEAItemId },
{ 0x06, 0x22, kTheSprite, kTheRect, true, kTEAItemId },
{ 0x06, 0x23, kTheSprite, kTheMemberNum, true, kTEAItemId }, // D5
+ { 0x06, 0x25, kTheSprite, kTheMember, true, kTEAItemId },
{ 0x07, 0x01, kTheBeepOn, kTheNOField, true, kTEANOArgs },
{ 0x07, 0x02, kTheButtonStyle, kTheNOField, true, kTEANOArgs },
diff --git a/engines/director/lingo/lingo-the.cpp b/engines/director/lingo/lingo-the.cpp
index 135eb3c34a3..395efd85442 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -1327,6 +1327,9 @@ Datum Lingo::getTheSprite(Datum &id1, int field) {
case kTheBottom:
d = channel->getBbox().bottom;
break;
+ case kTheMember:
+ d = sprite->_castId;
+ break;
case kTheCastNum:
case kTheMemberNum:
d = sprite->_castId.member;
@@ -1496,6 +1499,20 @@ void Lingo::setTheSprite(Datum &id1, int field, Datum &d) {
sprite->setAutoPuppet(kAPBlend, true);
}
break;
+ case kTheMember:
+ {
+ CastMemberID targetMember = d.asMemberID();
+
+ if (targetMember != sprite->_castId) {
+ movie->getWindow()->addDirtyRect(channel->getBbox());
+ movie->duplicateCastMember(targetMember, sprite->_castId);
+ channel->_sprite->setCast(sprite->_castId);
+ // Ensure the new sprite, whether larger or smaller, appears correctly on the screen
+ movie->getWindow()->addDirtyRect(channel->getBbox());
+ channel->_dirty = true;
+ }
+ }
+ break;
case kTheCastNum:
case kTheMemberNum:
{
diff --git a/engines/director/lingo/lingo-the.h b/engines/director/lingo/lingo-the.h
index 62764afd0b0..db63c3c9fc7 100644
--- a/engines/director/lingo/lingo-the.h
+++ b/engines/director/lingo/lingo-the.h
@@ -189,6 +189,7 @@ enum TheFieldType {
kTheLocV,
kTheLong,
kTheLoop,
+ kTheMember,
kTheMemberNum,
kTheModal,
kTheModified,
Commit: a32db29b1bdade1766d6f6470ef8fbacda4389c7
https://github.com/scummvm/scummvm/commit/a32db29b1bdade1766d6f6470ef8fbacda4389c7
Author: Krish (ganatrakrish2882005 at gmail.com)
Date: 2024-08-14T21:52:03+02:00
Commit Message:
DIRECTOR: LINGO: Map 'scrollTop' entity field
Changed paths:
engines/director/lingo/lingo-the.cpp
engines/director/lingo/lingo-the.h
diff --git a/engines/director/lingo/lingo-the.cpp b/engines/director/lingo/lingo-the.cpp
index 395efd85442..1bfbe6c9a64 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -249,6 +249,8 @@ TheEntityField fields[] = {
{ kTheCast, "textHeight", kTheTextHeight, 300 },// D3 p
{ kTheCast, "textSize", kTheTextSize, 300 },// D3 p
{ kTheCast, "textStyle", kTheTextStyle, 300 },// D3 p
+ { kTheCast, "scrollTop", kTheScrollTop, 300 },// D5 p
+
// Field fields
{ kTheField, "foreColor", kTheForeColor, 400 },// D4 p
@@ -260,6 +262,7 @@ TheEntityField fields[] = {
{ kTheField, "textHeight", kTheTextHeight, 300 },// D3 p
{ kTheField, "textSize", kTheTextSize, 300 },// D3 p
{ kTheField, "textStyle", kTheTextStyle, 300 },// D3 p
+ { kTheField, "scrollTop", kTheScrollTop, 300 },// D5 p
// Chunk fields
{ kTheChunk, "foreColor", kTheForeColor, 400 },// D4 p
diff --git a/engines/director/lingo/lingo-the.h b/engines/director/lingo/lingo-the.h
index db63c3c9fc7..0d23e358033 100644
--- a/engines/director/lingo/lingo-the.h
+++ b/engines/director/lingo/lingo-the.h
@@ -237,6 +237,7 @@ enum TheFieldType {
kTheVolume,
kTheWidth,
kTheWindowType,
+ kTheScrollTop,
kTheMaxTheFieldType // This must be always last
};
Commit: 9b20d74486f3b188ef24d7d0555246568be06b64
https://github.com/scummvm/scummvm/commit/9b20d74486f3b188ef24d7d0555246568be06b64
Author: Krish (ganatrakrish2882005 at gmail.com)
Date: 2024-08-14T21:52:03+02:00
Commit Message:
DIRECTOR: Extend getField to retrieve scrollTop
Changed paths:
engines/director/castmember/text.cpp
diff --git a/engines/director/castmember/text.cpp b/engines/director/castmember/text.cpp
index c76501f7ba5..87b042e524e 100644
--- a/engines/director/castmember/text.cpp
+++ b/engines/director/castmember/text.cpp
@@ -502,6 +502,7 @@ bool TextCastMember::hasField(int field) {
case kTheTextHeight:
case kTheTextSize:
case kTheTextStyle:
+ case kTheScrollTop:
return true;
default:
break;
@@ -549,6 +550,9 @@ Datum TextCastMember::getField(int field) {
case kTheTextStyle:
d = (int)_textSlant;
break;
+ case kTheScrollTop:
+ d = _scroll;
+ break;
default:
d = CastMember::getField(field);
}
@@ -652,6 +656,9 @@ bool TextCastMember::setField(int field, const Datum &d) {
_ptext = ((Graphics::MacText *)toEdit->_widget)->getPlainText();
_ftext = ((Graphics::MacText *)toEdit->_widget)->getTextChunk(0, 0, -1, -1, true);
return true;
+ case kTheScrollTop:
+ _scroll = d.asInt();
+ return true;
default:
break;
}
More information about the Scummvm-git-logs
mailing list