blob: 325e92a64833d744e448e39b106fe4b0efbe9167 [file] [log] [blame]
#include "rive/animation/keyframe_interpolator.hpp"
#include "rive/core_context.hpp"
#include "rive/layout_component.hpp"
#include "rive/layout/layout_component_style.hpp"
#include <vector>
using namespace rive;
// ---- Flags 0
BitFieldLoc rive::DisplayBits = BitFieldLoc(0, 0);
BitFieldLoc rive::PositionTypeBits = BitFieldLoc(1, 2);
BitFieldLoc rive::FlexDirectionBits = BitFieldLoc(3, 4);
BitFieldLoc rive::DirectionBits = BitFieldLoc(5, 6);
BitFieldLoc rive::AlignContentBits = BitFieldLoc(7, 9);
BitFieldLoc rive::AlignItemsBits = BitFieldLoc(10, 12);
BitFieldLoc rive::AlignSelfBits = BitFieldLoc(13, 15);
BitFieldLoc rive::JustifyContentBits = BitFieldLoc(16, 18);
BitFieldLoc rive::FlexWrapBits = BitFieldLoc(19, 20);
BitFieldLoc rive::OverflowBits = BitFieldLoc(21, 22);
BitFieldLoc rive::IntrinsicallySizedBits = BitFieldLoc(23, 23);
BitFieldLoc rive::WidthUnitsBits = BitFieldLoc(24, 25);
BitFieldLoc rive::HeightUnitsBits = BitFieldLoc(26, 27);
// ---- Flags 1
BitFieldLoc rive::BorderLeftUnitsBits = BitFieldLoc(0, 1);
BitFieldLoc rive::BorderRightUnitsBits = BitFieldLoc(2, 3);
BitFieldLoc rive::BorderTopUnitsBits = BitFieldLoc(4, 5);
BitFieldLoc rive::BorderBottomUnitsBits = BitFieldLoc(6, 7);
BitFieldLoc rive::MarginLeftUnitsBits = BitFieldLoc(8, 9);
BitFieldLoc rive::MarginRightUnitsBits = BitFieldLoc(10, 11);
BitFieldLoc rive::MarginTopUnitsBits = BitFieldLoc(12, 13);
BitFieldLoc rive::MarginBottomUnitsBits = BitFieldLoc(14, 15);
BitFieldLoc rive::PaddingLeftUnitsBits = BitFieldLoc(16, 17);
BitFieldLoc rive::PaddingRightUnitsBits = BitFieldLoc(18, 19);
BitFieldLoc rive::PaddingTopUnitsBits = BitFieldLoc(20, 21);
BitFieldLoc rive::PaddingBottomUnitsBits = BitFieldLoc(22, 23);
BitFieldLoc rive::PositionLeftUnitsBits = BitFieldLoc(24, 25);
BitFieldLoc rive::PositionRightUnitsBits = BitFieldLoc(26, 27);
BitFieldLoc rive::PositionTopUnitsBits = BitFieldLoc(28, 29);
BitFieldLoc rive::PositionBottomUnitsBits = BitFieldLoc(30, 31);
// ---- Flags 2
BitFieldLoc rive::GapHorizontalUnitsBits = BitFieldLoc(0, 1);
BitFieldLoc rive::GapVerticalUnitsBits = BitFieldLoc(2, 3);
BitFieldLoc rive::MinWidthUnitsBits = BitFieldLoc(4, 5);
BitFieldLoc rive::MinHeightUnitsBits = BitFieldLoc(6, 7);
BitFieldLoc rive::MaxWidthUnitsBits = BitFieldLoc(8, 9);
BitFieldLoc rive::MaxHeightUnitsBits = BitFieldLoc(10, 11);
#ifdef WITH_RIVE_LAYOUT
KeyFrameInterpolator* LayoutComponentStyle::interpolator() { return m_interpolator; }
LayoutStyleInterpolation LayoutComponentStyle::interpolation()
{
return LayoutStyleInterpolation(interpolationType());
}
LayoutAnimationStyle LayoutComponentStyle::animationStyle()
{
return LayoutAnimationStyle(animationStyleType());
}
YGDisplay LayoutComponentStyle::display() { return YGDisplay(DisplayBits.read(layoutFlags0())); }
YGPositionType LayoutComponentStyle::positionType()
{
return YGPositionType(PositionTypeBits.read(layoutFlags0()));
}
YGFlexDirection LayoutComponentStyle::flexDirection()
{
return YGFlexDirection(FlexDirectionBits.read(layoutFlags0()));
}
YGDirection LayoutComponentStyle::direction()
{
return YGDirection(DirectionBits.read(layoutFlags0()));
}
YGWrap LayoutComponentStyle::flexWrap() { return YGWrap(FlexWrapBits.read(layoutFlags0())); }
YGAlign LayoutComponentStyle::alignItems() { return YGAlign(AlignItemsBits.read(layoutFlags0())); }
YGAlign LayoutComponentStyle::alignSelf() { return YGAlign(AlignSelfBits.read(layoutFlags0())); }
YGAlign LayoutComponentStyle::alignContent()
{
return YGAlign(AlignContentBits.read(layoutFlags0()));
}
YGJustify LayoutComponentStyle::justifyContent()
{
return YGJustify(JustifyContentBits.read(layoutFlags0()));
}
YGOverflow LayoutComponentStyle::overflow()
{
return YGOverflow(OverflowBits.read(layoutFlags0()));
}
bool LayoutComponentStyle::intrinsicallySized()
{
return IntrinsicallySizedBits.read(layoutFlags0()) == 1;
}
YGUnit LayoutComponentStyle::widthUnits() { return YGUnit(WidthUnitsBits.read(layoutFlags0())); }
YGUnit LayoutComponentStyle::heightUnits() { return YGUnit(HeightUnitsBits.read(layoutFlags0())); }
YGUnit LayoutComponentStyle::borderLeftUnits()
{
return YGUnit(BorderLeftUnitsBits.read(layoutFlags1()));
}
YGUnit LayoutComponentStyle::borderRightUnits()
{
return YGUnit(BorderRightUnitsBits.read(layoutFlags1()));
}
YGUnit LayoutComponentStyle::borderTopUnits()
{
return YGUnit(BorderTopUnitsBits.read(layoutFlags1()));
}
YGUnit LayoutComponentStyle::borderBottomUnits()
{
return YGUnit(BorderBottomUnitsBits.read(layoutFlags1()));
}
YGUnit LayoutComponentStyle::marginLeftUnits()
{
return YGUnit(MarginLeftUnitsBits.read(layoutFlags1()));
}
YGUnit LayoutComponentStyle::marginRightUnits()
{
return YGUnit(MarginRightUnitsBits.read(layoutFlags1()));
}
YGUnit LayoutComponentStyle::marginTopUnits()
{
return YGUnit(MarginTopUnitsBits.read(layoutFlags1()));
}
YGUnit LayoutComponentStyle::marginBottomUnits()
{
return YGUnit(MarginBottomUnitsBits.read(layoutFlags1()));
}
YGUnit LayoutComponentStyle::paddingLeftUnits()
{
return YGUnit(PaddingLeftUnitsBits.read(layoutFlags1()));
}
YGUnit LayoutComponentStyle::paddingRightUnits()
{
return YGUnit(PaddingRightUnitsBits.read(layoutFlags1()));
}
YGUnit LayoutComponentStyle::paddingTopUnits()
{
return YGUnit(PaddingTopUnitsBits.read(layoutFlags1()));
}
YGUnit LayoutComponentStyle::paddingBottomUnits()
{
return YGUnit(PaddingBottomUnitsBits.read(layoutFlags1()));
}
YGUnit LayoutComponentStyle::positionLeftUnits()
{
return YGUnit(PositionLeftUnitsBits.read(layoutFlags1()));
}
YGUnit LayoutComponentStyle::positionRightUnits()
{
return YGUnit(PositionRightUnitsBits.read(layoutFlags1()));
}
YGUnit LayoutComponentStyle::positionTopUnits()
{
return YGUnit(PositionTopUnitsBits.read(layoutFlags1()));
}
YGUnit LayoutComponentStyle::positionBottomUnits()
{
return YGUnit(PositionBottomUnitsBits.read(layoutFlags1()));
}
YGUnit LayoutComponentStyle::gapHorizontalUnits()
{
return YGUnit(GapHorizontalUnitsBits.read(layoutFlags2()));
}
YGUnit LayoutComponentStyle::gapVerticalUnits()
{
return YGUnit(GapVerticalUnitsBits.read(layoutFlags2()));
}
YGUnit LayoutComponentStyle::maxWidthUnits()
{
return YGUnit(MaxWidthUnitsBits.read(layoutFlags2()));
}
YGUnit LayoutComponentStyle::maxHeightUnits()
{
return YGUnit(MaxHeightUnitsBits.read(layoutFlags2()));
}
YGUnit LayoutComponentStyle::minWidthUnits()
{
return YGUnit(MinWidthUnitsBits.read(layoutFlags2()));
}
YGUnit LayoutComponentStyle::minHeightUnits()
{
return YGUnit(MinHeightUnitsBits.read(layoutFlags2()));
}
void LayoutComponentStyle::markLayoutNodeDirty()
{
if (parent()->is<LayoutComponent>())
{
parent()->as<LayoutComponent>()->markLayoutNodeDirty();
}
}
void LayoutComponentStyle::markLayoutStyleDirty()
{
if (parent()->is<LayoutComponent>())
{
parent()->as<LayoutComponent>()->markLayoutStyleDirty();
}
}
StatusCode LayoutComponentStyle::onAddedDirty(CoreContext* context)
{
auto code = Super::onAddedDirty(context);
if (code != StatusCode::Ok)
{
return code;
}
auto coreObject = context->resolve(interpolatorId());
if (coreObject != nullptr && coreObject->is<KeyFrameInterpolator>())
{
m_interpolator = static_cast<KeyFrameInterpolator*>(coreObject);
}
return StatusCode::Ok;
}
#else
void LayoutComponentStyle::markLayoutNodeDirty() {}
void LayoutComponentStyle::markLayoutStyleDirty() {}
#endif
void LayoutComponentStyle::layoutFlags0Changed() { markLayoutNodeDirty(); }
void LayoutComponentStyle::layoutFlags1Changed() { markLayoutNodeDirty(); }
void LayoutComponentStyle::layoutFlags2Changed() { markLayoutNodeDirty(); }
void LayoutComponentStyle::flexChanged() { markLayoutNodeDirty(); }
void LayoutComponentStyle::flexGrowChanged() { markLayoutNodeDirty(); }
void LayoutComponentStyle::flexShrinkChanged() { markLayoutNodeDirty(); }
void LayoutComponentStyle::flexBasisChanged() { markLayoutNodeDirty(); }
void LayoutComponentStyle::aspectRatioChanged() { markLayoutNodeDirty(); }
void LayoutComponentStyle::gapHorizontalChanged() { markLayoutNodeDirty(); }
void LayoutComponentStyle::gapVerticalChanged() { markLayoutNodeDirty(); }
void LayoutComponentStyle::maxWidthChanged() { markLayoutNodeDirty(); }
void LayoutComponentStyle::maxHeightChanged() { markLayoutNodeDirty(); }
void LayoutComponentStyle::minWidthChanged() { markLayoutNodeDirty(); }
void LayoutComponentStyle::minHeightChanged() { markLayoutNodeDirty(); }
void LayoutComponentStyle::borderLeftChanged() { markLayoutNodeDirty(); }
void LayoutComponentStyle::borderRightChanged() { markLayoutNodeDirty(); }
void LayoutComponentStyle::borderTopChanged() { markLayoutNodeDirty(); }
void LayoutComponentStyle::borderBottomChanged() { markLayoutNodeDirty(); }
void LayoutComponentStyle::marginLeftChanged() { markLayoutNodeDirty(); }
void LayoutComponentStyle::marginRightChanged() { markLayoutNodeDirty(); }
void LayoutComponentStyle::marginTopChanged() { markLayoutNodeDirty(); }
void LayoutComponentStyle::marginBottomChanged() { markLayoutNodeDirty(); }
void LayoutComponentStyle::paddingLeftChanged() { markLayoutNodeDirty(); }
void LayoutComponentStyle::paddingRightChanged() { markLayoutNodeDirty(); }
void LayoutComponentStyle::paddingTopChanged() { markLayoutNodeDirty(); }
void LayoutComponentStyle::paddingBottomChanged() { markLayoutNodeDirty(); }
void LayoutComponentStyle::positionLeftChanged() { markLayoutNodeDirty(); }
void LayoutComponentStyle::positionRightChanged() { markLayoutNodeDirty(); }
void LayoutComponentStyle::positionTopChanged() { markLayoutNodeDirty(); }
void LayoutComponentStyle::positionBottomChanged() { markLayoutNodeDirty(); }