| #include "rive/artboard_referencer.hpp" | |
| #include "rive/artboard.hpp" | |
| #include "rive/nested_artboard.hpp" | |
| #include "rive/nested_artboard_leaf.hpp" | |
| #include "rive/nested_artboard_layout.hpp" | |
| #include "rive/script_input_artboard.hpp" | |
| #include "rive/file.hpp" | |
| #include "rive/viewmodel/viewmodel_instance_artboard.hpp" | |
| using namespace rive; | |
| Artboard* ArtboardReferencer::findArtboard( | |
| ViewModelInstanceArtboard* viewModelInstanceArtboard, | |
| Artboard* parentArtboard, | |
| File* file) | |
| { | |
| if (viewModelInstanceArtboard == nullptr) | |
| { | |
| return nullptr; | |
| } | |
| if (viewModelInstanceArtboard->asset() != nullptr) | |
| { | |
| if (!parentArtboard || | |
| !parentArtboard->isAncestor( | |
| viewModelInstanceArtboard->asset()->artboard())) | |
| { | |
| return viewModelInstanceArtboard->asset()->artboard(); | |
| } | |
| return nullptr; | |
| } | |
| else if (file != nullptr) | |
| { | |
| auto asset = file->artboard(viewModelInstanceArtboard->propertyValue()); | |
| if (asset != nullptr) | |
| { | |
| auto artboardAsset = asset->as<Artboard>(); | |
| if (!parentArtboard || !parentArtboard->isAncestor(artboardAsset)) | |
| { | |
| return artboardAsset; | |
| } | |
| } | |
| } | |
| return nullptr; | |
| } | |
| ArtboardReferencer* ArtboardReferencer::from(Core* component) | |
| { | |
| switch (component->coreType()) | |
| { | |
| case NestedArtboardBase::typeKey: | |
| case NestedArtboardLeafBase::typeKey: | |
| case NestedArtboardLayoutBase::typeKey: | |
| return component->as<NestedArtboard>(); | |
| case ScriptInputArtboardBase::typeKey: | |
| return component->as<ScriptInputArtboard>(); | |
| } | |
| return nullptr; | |
| } |