blob: c359f01bdcdb48d3ecad678b272342fb6f72ee47 [file] [log] [blame]
#include "rive/shapes/cubic_vertex.hpp"
#include "rive/bones/cubic_weight.hpp"
using namespace rive;
const Vec2D& CubicVertex::renderIn() {
if (hasWeight()) {
return weight<CubicWeight>()->inTranslation();
} else {
return inPoint();
}
}
const Vec2D& CubicVertex::renderOut() {
if (hasWeight()) {
return weight<CubicWeight>()->outTranslation();
} else {
return outPoint();
}
}
const Vec2D& CubicVertex::inPoint() {
if (!m_InValid) {
computeIn();
m_InValid = true;
}
return m_InPoint;
}
const Vec2D& CubicVertex::outPoint() {
if (!m_OutValid) {
computeOut();
m_OutValid = true;
}
return m_OutPoint;
}
void CubicVertex::outPoint(const Vec2D& value) {
m_OutPoint = value;
m_OutValid = true;
}
void CubicVertex::inPoint(const Vec2D& value) {
m_InPoint = value;
m_InValid = true;
}
void CubicVertex::xChanged() {
Super::xChanged();
m_InValid = m_OutValid = false;
}
void CubicVertex::yChanged() {
Super::yChanged();
m_InValid = m_OutValid = false;
}
void CubicVertex::deform(const Mat2D& worldTransform, const float* boneTransforms) {
Super::deform(worldTransform, boneTransforms);
auto cubicWeight = weight<CubicWeight>();
auto inp = inPoint();
Weight::deform(inp[0],
inp[1],
cubicWeight->inIndices(),
cubicWeight->inValues(),
worldTransform,
boneTransforms,
cubicWeight->inTranslation());
auto outp = outPoint();
Weight::deform(outp[0],
outp[1],
cubicWeight->outIndices(),
cubicWeight->outValues(),
worldTransform,
boneTransforms,
cubicWeight->outTranslation());
}