blob: 4b3d0f1e7288ebc35a97272ed785d7450c7c8abe [file]
#ifndef _RIVE_LAYOUT_NODE_PROVIDER_HPP_
#define _RIVE_LAYOUT_NODE_PROVIDER_HPP_
#include "rive/layout/layout_enums.hpp"
#include <assert.h>
#include <vector>
namespace rive
{
class AABB;
class Component;
class KeyFrameInterpolator;
class LayoutConstraint;
class TransformComponent;
class LayoutNodeProvider
{
protected:
std::vector<LayoutConstraint*> m_layoutConstraints;
public:
#ifdef WITH_RIVE_LAYOUT
virtual void* layoutNode(int index) = 0;
#endif
static LayoutNodeProvider* from(Component* component);
virtual TransformComponent* transformComponent() = 0;
void addLayoutConstraint(LayoutConstraint* constraint);
virtual AABB layoutBounds() = 0;
virtual AABB layoutBoundsForNode(int index) { return layoutBounds(); }
virtual bool syncStyleChanges() { return false; };
virtual void updateLayoutBounds(bool animate = true) {};
virtual void markLayoutNodeDirty(bool shouldForceUpdateLayoutBounds = false)
{}
virtual size_t numLayoutNodes() = 0;
#ifdef WITH_RIVE_LAYOUT
virtual bool cascadeLayoutStyle(
LayoutStyleInterpolation inheritedInterpolation,
KeyFrameInterpolator* inheritedInterpolator,
float inheritedInterpolationTime,
LayoutDirection direction)
{
return false;
}
#endif
};
} // namespace rive
#endif