blob: 363d83695362957a70dd164732c2c1a7787517b7 [file] [log] [blame] [edit]
#include "rive/layout_component.hpp"
#include "rive/math/aabb.hpp"
#include "rive/node.hpp"
#include "rive/shapes/parametric_path.hpp"
#include "rive/shapes/shape.hpp"
using namespace rive;
Vec2D ParametricPath::measureLayout(float width,
LayoutMeasureMode widthMode,
float height,
LayoutMeasureMode heightMode)
{
return Vec2D(std::min((widthMode == LayoutMeasureMode::undefined
? std::numeric_limits<float>::max()
: width),
ParametricPath::width()),
std::min((heightMode == LayoutMeasureMode::undefined
? std::numeric_limits<float>::max()
: height),
ParametricPath::height()));
}
void ParametricPath::controlSize(Vec2D size,
LayoutScaleType widthScaleType,
LayoutScaleType heightScaleType,
LayoutDirection direction)
{
width(size.x);
height(size.y);
markWorldTransformDirty();
markPathDirty(false);
}
void ParametricPath::markPathDirty(bool sendToLayout)
{
Super::markPathDirty();
#ifdef WITH_RIVE_LAYOUT
if (sendToLayout)
{
for (ContainerComponent* p = parent(); p != nullptr; p = p->parent())
{
if (p->is<LayoutComponent>())
{
p->as<LayoutComponent>()->markLayoutNodeDirty();
break;
}
// If we're in a group we break out because objects in groups do
// not affect nor are affected by parent LayoutComponents
if (p->is<Node>())
{
if (p->is<Shape>() && p->as<Shape>() == shape())
{
continue;
}
break;
}
}
}
#endif
}
void ParametricPath::widthChanged() { markPathDirty(); }
void ParametricPath::heightChanged() { markPathDirty(); }
void ParametricPath::originXChanged() { markPathDirty(); }
void ParametricPath::originYChanged() { markPathDirty(); }