blob: 6159e7390e1239d21aac4da94a7694dbd1bae6fc [file]
#ifndef _RIVE_PARAMETRIC_PATH_HPP_
#define _RIVE_PARAMETRIC_PATH_HPP_
#include "rive/math/aabb.hpp"
#include "rive/generated/shapes/parametric_path_base.hpp"
namespace rive
{
class ParametricPath : public ParametricPathBase
{
public:
Vec2D measureLayout(
float width,
LayoutMeasureMode widthMode,
float height,
LayoutMeasureMode heightMode) override;
void controlSize(
Vec2D size,
LayoutScaleType widthScaleType,
LayoutScaleType heightScaleType,
LayoutDirection direction) override;
void markPathDirty(bool sendToLayout = true) override;
// A parametric path occupies its declared box, offset by its origin — the
// same extent update() lays its vertices out in. Known before any build,
// so a participant can measure and scale on the first pass.
bool tryPropertyBounds(AABB& result) const override
{
result = AABB::fromLTWH(
-originX() * width(),
-originY() * height(),
width(),
height());
return true;
}
protected:
// Set while a layout sizes us: the size it hands down must not mark that
// layout dirty again, or every resize costs the host a second solve.
bool m_layoutControllingSize = false;
void widthChanged() override;
void heightChanged() override;
void originXChanged() override;
void originYChanged() override;
};
} // namespace rive
#endif