|  | #include "rive/component.hpp" | 
|  | #include "rive/artboard.hpp" | 
|  | #include "rive/container_component.hpp" | 
|  | #include "rive/core_context.hpp" | 
|  | #include "rive/importers/artboard_importer.hpp" | 
|  | #include "rive/importers/import_stack.hpp" | 
|  | #include <algorithm> | 
|  |  | 
|  | using namespace rive; | 
|  |  | 
|  | StatusCode Component::onAddedDirty(CoreContext* context) { | 
|  | m_Artboard = static_cast<Artboard*>(context); | 
|  | if (this == m_Artboard) { | 
|  | // We're the artboard, don't parent to ourselves. | 
|  | return StatusCode::Ok; | 
|  | } | 
|  | auto coreObject = context->resolve(parentId()); | 
|  | if (coreObject == nullptr || !coreObject->is<ContainerComponent>()) { | 
|  | return StatusCode::MissingObject; | 
|  | } | 
|  | m_Parent = reinterpret_cast<ContainerComponent*>(coreObject); | 
|  | return StatusCode::Ok; | 
|  | } | 
|  |  | 
|  | void Component::addDependent(Component* component) { | 
|  | // Make it's not already a dependent. | 
|  | if (std::find(m_Dependents.begin(), m_Dependents.end(), component) != m_Dependents.end()) { | 
|  | return; | 
|  | } | 
|  | m_Dependents.push_back(component); | 
|  | } | 
|  |  | 
|  | bool Component::addDirt(ComponentDirt value, bool recurse) { | 
|  | if ((m_Dirt & value) == value) { | 
|  | // Already marked. | 
|  | return false; | 
|  | } | 
|  |  | 
|  | // Make sure dirt is set before calling anything that can set more dirt. | 
|  | m_Dirt |= value; | 
|  |  | 
|  | onDirty(m_Dirt); | 
|  |  | 
|  | m_Artboard->onComponentDirty(this); | 
|  |  | 
|  | if (!recurse) { | 
|  | return true; | 
|  | } | 
|  |  | 
|  | for (auto d : m_Dependents) { | 
|  | d->addDirt(value, true); | 
|  | } | 
|  | return true; | 
|  | } | 
|  |  | 
|  | StatusCode Component::import(ImportStack& importStack) { | 
|  | if (is<Artboard>()) { | 
|  | // Artboards are always their first object. | 
|  | assert(as<Artboard>()->objects().size() == 0); | 
|  | as<Artboard>()->addObject(this); | 
|  | return Super::import(importStack); | 
|  | } | 
|  |  | 
|  | auto artboardImporter = importStack.latest<ArtboardImporter>(ArtboardBase::typeKey); | 
|  | if (artboardImporter == nullptr) { | 
|  | return StatusCode::MissingObject; | 
|  | } | 
|  | artboardImporter->addComponent(this); | 
|  | return Super::import(importStack); | 
|  | } |