diff --git a/libraries/script-engine/src/ScriptEngine.cpp b/libraries/script-engine/src/ScriptEngine.cpp index 525928897d..067c7c1412 100644 --- a/libraries/script-engine/src/ScriptEngine.cpp +++ b/libraries/script-engine/src/ScriptEngine.cpp @@ -669,6 +669,7 @@ void ScriptEngine::init() { globalObject().setProperty("TREE_SCALE", newVariant(QVariant(TREE_SCALE))); registerGlobalObject("Tablet", DependencyManager::get().data()); + qScriptRegisterMetaType(this, tabletToScriptValue, tabletFromScriptValue); registerGlobalObject("Assets", &_assetScriptingInterface); registerGlobalObject("Resources", DependencyManager::get().data()); diff --git a/libraries/script-engine/src/TabletScriptingInterface.cpp b/libraries/script-engine/src/TabletScriptingInterface.cpp index 0891e4e981..0c68ca9d6c 100644 --- a/libraries/script-engine/src/TabletScriptingInterface.cpp +++ b/libraries/script-engine/src/TabletScriptingInterface.cpp @@ -21,6 +21,17 @@ #include #include "SoundEffect.h" + +QScriptValue tabletToScriptValue(QScriptEngine* engine, TabletProxy* const &in) { + qDebug() << "------------------- converting tabletProxy to scriptValue <--------------------"; + return engine->newQObject(in, QScriptEngine::QtOwnership, QScriptEngine::ExcludeDeleteLater | QScriptEngine::ExcludeChildObjects); +} + +void tabletFromScriptValue(const QScriptValue& value, TabletProxy* &out) { + qDebug() << "----------------> value to tabletProxy <----------------"; + out = qobject_cast(value.toQObject()); +} + TabletScriptingInterface::TabletScriptingInterface() { qmlRegisterType("Hifi", 1, 0, "SoundEffect"); } @@ -41,7 +52,7 @@ QObject* TabletScriptingInterface::getSystemToolbarProxy() { } } -QObject* TabletScriptingInterface::getTablet(const QString& tabletId) { +TabletProxy* TabletScriptingInterface::getTablet(const QString& tabletId) { std::lock_guard guard(_mutex); @@ -81,11 +92,6 @@ void TabletScriptingInterface::setQmlTabletRoot(QString tabletId, QQuickItem* qm QQuickWindow* TabletScriptingInterface::getTabletWindow() { TabletProxy* tablet = qobject_cast(getTablet("com.highfidelity.interface.tablet.system")); - - if (!tablet) { - return nullptr; - } - QObject* qmlSurface = tablet->getTabletSurface(); OffscreenQmlSurface* surface = dynamic_cast(qmlSurface); diff --git a/libraries/script-engine/src/TabletScriptingInterface.h b/libraries/script-engine/src/TabletScriptingInterface.h index 008f97222e..aff14128db 100644 --- a/libraries/script-engine/src/TabletScriptingInterface.h +++ b/libraries/script-engine/src/TabletScriptingInterface.h @@ -14,7 +14,9 @@ #include #include -#include +#include +#include +#include #include #include @@ -45,7 +47,7 @@ public: * @param name {String} tablet name * @return {TabletProxy} tablet instance */ - Q_INVOKABLE QObject* getTablet(const QString& tabletId); + Q_INVOKABLE TabletProxy* getTablet(const QString& tabletId); void setToolbarMode(bool toolbarMode); @@ -259,6 +261,11 @@ protected: bool _landscape { false }; }; +Q_DECLARE_METATYPE(TabletProxy*); + +QScriptValue tabletToScriptValue(QScriptEngine* engine, TabletProxy* const &in); +void tabletFromScriptValue(const QScriptValue& value, TabletProxy* &out); + /**jsdoc * @class TabletButtonProxy * @property uuid {QUuid} READ_ONLY: uniquely identifies this button