| #ifdef WITH_RIVE_SCRIPTING | |
| #include "rive/scripted/script_backend.hpp" | |
| #include "rive/scripted/scripted_object.hpp" | |
| #include <vector> | |
| using namespace rive; | |
| ScriptBackend::~ScriptBackend() { detachScriptedObjects(); } | |
| void ScriptBackend::displayScale(float scale) | |
| { | |
| if (scale == m_displayScale) | |
| { | |
| return; | |
| } | |
| m_displayScale = scale; | |
| // The callback runs script code that can register or unregister objects | |
| // on this backend; walk a snapshot and skip anything since removed. | |
| std::vector<ScriptedObject*> objects(m_scriptedObjects.begin(), | |
| m_scriptedObjects.end()); | |
| for (ScriptedObject* object : objects) | |
| { | |
| if (m_scriptedObjects.count(object) != 0) | |
| { | |
| object->displayScaleChanged(); | |
| } | |
| } | |
| } | |
| void ScriptBackend::registerScriptedObject(ScriptedObject* object) | |
| { | |
| if (object != nullptr) | |
| { | |
| m_scriptedObjects.insert(object); | |
| } | |
| } | |
| void ScriptBackend::unregisterScriptedObject(ScriptedObject* object) | |
| { | |
| if (object != nullptr) | |
| { | |
| m_scriptedObjects.erase(object); | |
| } | |
| } | |
| void ScriptBackend::detachScriptedObjects() | |
| { | |
| for (ScriptedObject* object : m_scriptedObjects) | |
| { | |
| object->m_vm = nullptr; | |
| } | |
| m_scriptedObjects.clear(); | |
| } | |
| #endif |