blob: 1a91f39577387d7dd6848ab3faec1ebd267ac5de [file] [log] [blame] [edit]
#ifndef _RIVE_CONTAINER_COMPONENT_HPP_
#define _RIVE_CONTAINER_COMPONENT_HPP_
#include "rive/generated/container_component_base.hpp"
#include "rive/typed_children.hpp"
#include <vector>
#include <functional>
namespace rive
{
class ContainerComponent : public ContainerComponentBase
{
public:
template <typename T> TypedChildren<T> children()
{
return TypedChildren<T>(
Span<Core*>((Core**)m_children.data(), m_children.size()));
}
const std::vector<Component*>& children() const { return m_children; }
virtual void addChild(Component* component);
bool collapse(bool value) override;
// Returns whether predicate returns true for the current Component.
bool forAll(std::function<bool(Component*)> predicate);
// Recursively descend onto all the children in the hierarchy tree.
// If predicate returns false, it won't recurse down a particular
// branch.
void forEachChild(std::function<bool(Component*)> predicate);
private:
std::vector<Component*> m_children;
};
} // namespace rive
#endif