From 50a6a63cc3a9e2f13877d72eef360a294211103d Mon Sep 17 00:00:00 2001 From: ksuprynowicz Date: Mon, 15 Aug 2022 23:19:13 +0200 Subject: [PATCH] Fixes to problems with meta-types --- .../scripting/PerformanceScriptingInterface.cpp | 14 ++++++++++++-- .../src/scripting/PerformanceScriptingInterface.h | 5 +++-- .../scripting/PlatformInfoScriptingInterface.cpp | 8 ++++++++ .../src/scripting/PlatformInfoScriptingInterface.h | 3 ++- libraries/script-engine/src/EventTypes.cpp | 13 +++++++------ libraries/script-engine/src/MIDIEvent.cpp | 5 +++-- libraries/script-engine/src/MenuItemProperties.cpp | 3 ++- libraries/script-engine/src/ScriptEngineCast.h | 7 ++++++- 8 files changed, 43 insertions(+), 15 deletions(-) diff --git a/interface/src/scripting/PerformanceScriptingInterface.cpp b/interface/src/scripting/PerformanceScriptingInterface.cpp index fb4561aea8..780def24af 100644 --- a/interface/src/scripting/PerformanceScriptingInterface.cpp +++ b/interface/src/scripting/PerformanceScriptingInterface.cpp @@ -1,6 +1,7 @@ // // Created by Bradley Austin Davis on 2019/05/14 // Copyright 2013-2019 High Fidelity, Inc. +// Copyright 2022 Overte e.V. // // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html @@ -9,15 +10,24 @@ #include "PerformanceScriptingInterface.h" +#include + #include "../Application.h" +STATIC_SCRIPT_INITIALIZER(+[](ScriptManager* manager){ + auto scriptEngine = manager->engine().get(); + + scriptRegisterMetaType(scriptEngine, scriptValueFromEnumClass, scriptValueToEnumClass, "PerformancePreset"); + scriptRegisterMetaType(scriptEngine, scriptValueFromEnumClass, scriptValueToEnumClass, "RefreshRateProfile"); +}); + std::once_flag PerformanceScriptingInterface::registry_flag; PerformanceScriptingInterface::PerformanceScriptingInterface() { std::call_once(registry_flag, [] { qmlRegisterType("PerformanceEnums", 1, 0, "PerformanceEnums"); - qRegisterMetaType("PerformanceScriptingInterface::PerformancePreset"); - qRegisterMetaType("PerformanceScriptingInterface::RefreshRateProfile"); + //qRegisterMetaType("PerformanceScriptingInterface::PerformancePreset"); + //qRegisterMetaType("PerformanceScriptingInterface::RefreshRateProfile"); }); } diff --git a/interface/src/scripting/PerformanceScriptingInterface.h b/interface/src/scripting/PerformanceScriptingInterface.h index 76e58f29b6..086602857b 100644 --- a/interface/src/scripting/PerformanceScriptingInterface.h +++ b/interface/src/scripting/PerformanceScriptingInterface.h @@ -1,6 +1,7 @@ // // Created by Bradley Austin Davis on 2019/05/14 // Copyright 2013-2019 High Fidelity, Inc. +// Copyright 2022 Overte e.V. // // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html @@ -55,7 +56,7 @@ public: * @typedef {number} Performance.PerformancePreset */ // PerformanceManager PerformancePreset tri state level enums - enum PerformancePreset { + enum class PerformancePreset { UNKNOWN = PerformanceManager::PerformancePreset::UNKNOWN, LOW_POWER = PerformanceManager::PerformancePreset::LOW_POWER, LOW = PerformanceManager::PerformancePreset::LOW, @@ -82,7 +83,7 @@ public: * @typedef {number} Performance.RefreshRateProfile */ // Must match RefreshRateManager enums - enum RefreshRateProfile { + enum class RefreshRateProfile { ECO = RefreshRateManager::RefreshRateProfile::ECO, INTERACTIVE = RefreshRateManager::RefreshRateProfile::INTERACTIVE, REALTIME = RefreshRateManager::RefreshRateProfile::REALTIME, diff --git a/interface/src/scripting/PlatformInfoScriptingInterface.cpp b/interface/src/scripting/PlatformInfoScriptingInterface.cpp index c1f325237e..fb7de16627 100644 --- a/interface/src/scripting/PlatformInfoScriptingInterface.cpp +++ b/interface/src/scripting/PlatformInfoScriptingInterface.cpp @@ -1,6 +1,7 @@ // // Created by Nissim Hadar on 2018/12/28 // Copyright 2013-2016 High Fidelity, Inc. +// Copyright 2022 Overte e.V. // // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html @@ -12,6 +13,7 @@ #include #include +#include #ifdef Q_OS_WIN #include @@ -19,6 +21,12 @@ #include #endif +STATIC_SCRIPT_INITIALIZER(+[](ScriptManager* manager){ + auto scriptEngine = manager->engine().get(); + + scriptRegisterMetaType(scriptEngine, scriptValueFromEnumClass, scriptValueToEnumClass, "PlatformTier"); +}); + PlatformInfoScriptingInterface* PlatformInfoScriptingInterface::getInstance() { static PlatformInfoScriptingInterface sharedInstance; return &sharedInstance; diff --git a/interface/src/scripting/PlatformInfoScriptingInterface.h b/interface/src/scripting/PlatformInfoScriptingInterface.h index 8391c404d8..767b776e8c 100644 --- a/interface/src/scripting/PlatformInfoScriptingInterface.h +++ b/interface/src/scripting/PlatformInfoScriptingInterface.h @@ -1,6 +1,7 @@ // // Created by Nissim Hadar on 2018/12/28 // Copyright 2013-2016 High Fidelity, Inc. +// Copyright 2022 Overte e.V. // // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html @@ -45,7 +46,7 @@ public: * @typedef {number} PlatformInfo.PlatformTier */ // Platform tier enum type - enum PlatformTier { + enum class PlatformTier { UNKNOWN = platform::Profiler::Tier::UNKNOWN, LOW = platform::Profiler::Tier::LOW, MID = platform::Profiler::Tier::MID, diff --git a/libraries/script-engine/src/EventTypes.cpp b/libraries/script-engine/src/EventTypes.cpp index 2715d6252b..e4083f2b80 100644 --- a/libraries/script-engine/src/EventTypes.cpp +++ b/libraries/script-engine/src/EventTypes.cpp @@ -4,6 +4,7 @@ // // Created by Brad Hefta-Gaub on 1/28/14. // Copyright 2014 High Fidelity, Inc. +// Copyright 2022 Overte e.V. // // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html @@ -21,10 +22,10 @@ #include "WheelEvent.h" void registerEventTypes(ScriptEngine* engine) { - scriptRegisterMetaType(engine, KeyEvent::toScriptValue, KeyEvent::fromScriptValue); - scriptRegisterMetaType(engine, MouseEvent::toScriptValue, MouseEvent::fromScriptValue); - scriptRegisterMetaType(engine, PointerEvent::toScriptValue, PointerEvent::fromScriptValue); - scriptRegisterMetaType(engine, TouchEvent::toScriptValue, TouchEvent::fromScriptValue); - scriptRegisterMetaType(engine, WheelEvent::toScriptValue, WheelEvent::fromScriptValue); - scriptRegisterMetaType(engine, SpatialEvent::toScriptValue, SpatialEvent::fromScriptValue); + scriptRegisterMetaType(engine, KeyEvent::toScriptValue, KeyEvent::fromScriptValue, "KeyEvent"); + scriptRegisterMetaType(engine, MouseEvent::toScriptValue, MouseEvent::fromScriptValue, "MouseEvent"); + scriptRegisterMetaType(engine, PointerEvent::toScriptValue, PointerEvent::fromScriptValue, "PointerEvent"); + scriptRegisterMetaType(engine, TouchEvent::toScriptValue, TouchEvent::fromScriptValue, "TouchEvent"); + scriptRegisterMetaType(engine, WheelEvent::toScriptValue, WheelEvent::fromScriptValue, "WheelEvent"); + scriptRegisterMetaType(engine, SpatialEvent::toScriptValue, SpatialEvent::fromScriptValue, "SpatialEvent"); } diff --git a/libraries/script-engine/src/MIDIEvent.cpp b/libraries/script-engine/src/MIDIEvent.cpp index 2070e7bbc9..361877d80c 100644 --- a/libraries/script-engine/src/MIDIEvent.cpp +++ b/libraries/script-engine/src/MIDIEvent.cpp @@ -4,6 +4,7 @@ // // Created by Stephen Birarda on 2014-06-30. // Copyright 2014 High Fidelity, Inc. +// Copyright 2022 Overte e.V. // // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html @@ -18,7 +19,7 @@ #include "ScriptValue.h" void registerMIDIMetaTypes(ScriptEngine* engine) { - scriptRegisterMetaType(engine, midiEventToScriptValue, midiEventFromScriptValue); + scriptRegisterMetaType(engine, midiEventToScriptValue, midiEventFromScriptValue, "MIDIEvent"); } const QString MIDI_DELTA_TIME_PROP_NAME = "deltaTime"; @@ -41,4 +42,4 @@ bool midiEventFromScriptValue(const ScriptValue &object, MIDIEvent& event) { event.data1 = object.property(MIDI_DATA_1_PROP_NAME).toVariant().toUInt(); event.data2 = object.property(MIDI_DATA_2_PROP_NAME).toVariant().toUInt(); return true; -} \ No newline at end of file +} diff --git a/libraries/script-engine/src/MenuItemProperties.cpp b/libraries/script-engine/src/MenuItemProperties.cpp index f25d05ddf9..f2f335253b 100644 --- a/libraries/script-engine/src/MenuItemProperties.cpp +++ b/libraries/script-engine/src/MenuItemProperties.cpp @@ -4,6 +4,7 @@ // // Created by Brad Hefta-Gaub on 1/28/14. // Copyright 2014 High Fidelity, Inc. +// Copyright 2022 Overte e.V. // // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html @@ -44,7 +45,7 @@ MenuItemProperties::MenuItemProperties(const QString& menuName, const QString& m } void registerMenuItemProperties(ScriptEngine* engine) { - scriptRegisterMetaType(engine, menuItemPropertiesToScriptValue, menuItemPropertiesFromScriptValue); + scriptRegisterMetaType(engine, menuItemPropertiesToScriptValue, menuItemPropertiesFromScriptValue, "MenuItemProperties"); } ScriptValue menuItemPropertiesToScriptValue(ScriptEngine* engine, const MenuItemProperties& properties) { diff --git a/libraries/script-engine/src/ScriptEngineCast.h b/libraries/script-engine/src/ScriptEngineCast.h index ae2282bd34..59493275fd 100644 --- a/libraries/script-engine/src/ScriptEngineCast.h +++ b/libraries/script-engine/src/ScriptEngineCast.h @@ -76,7 +76,12 @@ int scriptRegisterMetaType(ScriptEngine* eng, if (strlen(name) > 0) { // make sure it's registered id = qRegisterMetaType(name); } else { - id = qRegisterMetaType(); + if (!QMetaType::fromType().name().isNull()) { + qDebug() << "scriptRegisterMetaType: " << QMetaType::fromType().name(); + id = qRegisterMetaType(QMetaType::fromType().name()); + }else{ + id = qRegisterMetaType(); + } } eng->registerCustomType(id, reinterpret_cast(toScriptValue), reinterpret_cast(fromScriptValue));