| #include "rive/artboard_component_list.hpp" |
| #include "rive/component.hpp" |
| #include "rive/constraints/layout_constraint.hpp" |
| #include "rive/layout_component.hpp" |
| #include "rive/layout/layout_node_provider.hpp" |
| #include "rive/layout/layout_participant.hpp" |
| #include "rive/nested_artboard_layout.hpp" |
| #include "rive/text/text.hpp" |
| #include "rive/shapes/image.hpp" |
| #include "rive/shapes/shape.hpp" |
| #include "rive/solo.hpp" |
| |
| using namespace rive; |
| |
| LayoutNodeProvider* LayoutNodeProvider::from(Component* component) |
| { |
| if (component == nullptr) |
| { |
| return nullptr; |
| } |
| switch (component->coreType()) |
| { |
| case LayoutComponent::typeKey: |
| return component->as<LayoutComponent>(); |
| case NestedArtboardLayout::typeKey: |
| return component->as<NestedArtboardLayout>(); |
| case ArtboardComponentListBase::typeKey: |
| return component->as<ArtboardComponentList>(); |
| case TextBase::typeKey: |
| // A migrated Text is no longer a provider itself; it |
| // provides via its optional LayoutParticipant child. |
| return component->as<Text>()->layoutParticipant(); |
| case ImageBase::typeKey: |
| // A migrated Image is no longer a provider itself; it |
| // provides via its optional LayoutParticipant child. |
| return component->as<Image>()->layoutParticipant(); |
| case ShapeBase::typeKey: |
| // A migrated Shape is no longer a provider itself; it |
| // provides via its optional LayoutParticipant child. |
| return component->as<Shape>()->layoutParticipant(); |
| } |
| return nullptr; |
| } |
| |
| void LayoutNodeProvider::addLayoutConstraint(LayoutConstraint* constraint) |
| { |
| if (m_layoutConstraints == nullptr) |
| { |
| m_layoutConstraints = new std::vector<LayoutConstraint*>(); |
| } |
| assert(std::find(m_layoutConstraints->begin(), |
| m_layoutConstraints->end(), |
| constraint) == m_layoutConstraints->end()); |
| m_layoutConstraints->push_back(constraint); |
| constraint->addLayoutChild(this); |
| } |