blob: 378021688e6cb1398d0f090741c31b105d701189 [file]
#include "rive/layout/layout_sizing_style.hpp"
#include "rive/layout/grid_track.hpp"
#include "rive/layout/layout_enums.hpp"
#ifdef WITH_RIVE_LAYOUT
// YGStyle is only forward declared in the headers; the setters below need it.
#include "rive/layout/layout_data.hpp"
#endif
using namespace rive;
#ifdef WITH_RIVE_LAYOUT
YGDisplay LayoutSizingStyle::display()
{
return YGDisplay(displayValue()) == YGDisplayNone ? YGDisplayNone
: YGDisplayFlex;
}
YGUnit LayoutSizingStyle::maxWidthUnits()
{
return YGUnit(maxWidthUnitsValue());
}
YGUnit LayoutSizingStyle::maxHeightUnits()
{
return YGUnit(maxHeightUnitsValue());
}
YGUnit LayoutSizingStyle::minWidthUnits()
{
return YGUnit(minWidthUnitsValue());
}
YGUnit LayoutSizingStyle::minHeightUnits()
{
return YGUnit(minHeightUnitsValue());
}
void LayoutSizingStyle::applyBaseStyle(YGStyle& style,
const LayoutSyncContext& context)
{
style.display() = display();
style.minDimensions()[YGDimensionWidth] =
YGValue{minWidth(), minWidthUnits()};
style.minDimensions()[YGDimensionHeight] =
YGValue{minHeight(), minHeightUnits()};
style.maxDimensions()[YGDimensionWidth] =
YGValue{maxWidth(), maxWidthUnits()};
style.maxDimensions()[YGDimensionHeight] =
YGValue{maxHeight(), maxHeightUnits()};
}
// How this item sits in a grid or stack cell.
void LayoutSizingStyle::applyItemStyle(YGStyle& style,
const LayoutSyncContext& context)
{
if (context.parentIsStack)
{
GridTrack::syncStackItemCell(style);
}
GridTrack::syncItemJustifySelf(style,
justifySelfValue(),
context.parentIsStack,
context.inlineHugs,
context.containerJustifyItems);
// Fill stretches the inline axis over the container's default justify.
if (context.parentIsGrid &&
layoutWidthScaleType() == (uint32_t)LayoutScaleType::fill)
{
style.setJustifySelf(YGJustifyStretch);
}
}
#endif