blob: f3a2c8c60b8f2c946539db2b7b63fad41973418f [file]
#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