#ifndef _RIVE_INTRINSICALLY_SIZEABLE_HPP_
#define _RIVE_INTRINSICALLY_SIZEABLE_HPP_

#include <stdint.h>
#include "rive/component.hpp"
#include "rive/layout/layout_enums.hpp"
#include "rive/layout/layout_measure_mode.hpp"
#include "rive/math/vec2d.hpp"

namespace rive
{
class IntrinsicallySizeable
{
public:
    virtual Vec2D measureLayout(float width,
                                LayoutMeasureMode widthMode,
                                float height,
                                LayoutMeasureMode heightMode)
    {
        return Vec2D();
    }

    virtual void controlSize(Vec2D size,
                             LayoutScaleType widthScaleType,
                             LayoutScaleType heightScaleType,
                             LayoutDirection direction)
    {}
    virtual bool shouldPropagateSizeToChildren() { return true; }
    static IntrinsicallySizeable* from(Component* component);
};
} // namespace rive
#endif