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 60e40c76f5..bffe318c11 100644 --- a/libraries/script-engine/src/TabletScriptingInterface.cpp +++ b/libraries/script-engine/src/TabletScriptingInterface.cpp @@ -21,6 +21,15 @@ #include #include "SoundEffect.h" + +QScriptValue tabletToScriptValue(QScriptEngine* engine, TabletProxy* const &in) { + return engine->newQObject(in, QScriptEngine::QtOwnership, QScriptEngine::ExcludeDeleteLater | QScriptEngine::ExcludeChildObjects); +} + +void tabletFromScriptValue(const QScriptValue& value, TabletProxy* &out) { + out = qobject_cast(value.toQObject()); +} + TabletScriptingInterface::TabletScriptingInterface() { qmlRegisterType("Hifi", 1, 0, "SoundEffect"); } @@ -41,7 +50,7 @@ QObject* TabletScriptingInterface::getSystemToolbarProxy() { } } -QObject* TabletScriptingInterface::getTablet(const QString& tabletId) { +TabletProxy* TabletScriptingInterface::getTablet(const QString& tabletId) { std::lock_guard guard(_mutex); 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 diff --git a/libraries/ui/src/OffscreenUi.cpp b/libraries/ui/src/OffscreenUi.cpp index 1cb9045e79..2a8f3ec9d5 100644 --- a/libraries/ui/src/OffscreenUi.cpp +++ b/libraries/ui/src/OffscreenUi.cpp @@ -96,6 +96,9 @@ void OffscreenUi::create(QOpenGLContext* context) { rootContext->setContextProperty("OffscreenUi", this); rootContext->setContextProperty("offscreenFlags", offscreenFlags = new OffscreenFlags()); rootContext->setContextProperty("fileDialogHelper", new FileDialogHelper()); + auto tabletScriptingInterface = DependencyManager::get(); + TabletProxy* tablet = tabletScriptingInterface->getTablet("com.highfidelity.interface.tablet.system"); + rootContext->engine()->setObjectOwnership(tablet, QQmlEngine::CppOwnership); } void OffscreenUi::show(const QUrl& url, const QString& name, std::function f) {