blob: 4e4ebd112e3b6acf01ef1726a43e36639ddc7eb1 [file] [log] [blame] [edit]
#include "rive/node.hpp"
#include "rive/world_transform_component.hpp"
#include "rive/layout_component.hpp"
#include "rive/artboard.hpp"
#include "rive/artboard_host.hpp"
using namespace rive;
void Node::xChanged() { markTransformDirty(); }
void Node::yChanged() { markTransformDirty(); }
float Node::computedRootX()
{
auto wt = worldTransform();
auto rootPos = artboard()->rootTransform(Vec2D(wt[4], wt[5]));
return rootPos.x;
};
float Node::computedRootY()
{
auto wt = worldTransform();
auto rootPos = artboard()->rootTransform(Vec2D(wt[4], wt[5]));
return rootPos.y;
};
Mat2D Node::localTransform()
{
if (m_LocalTransformNeedsRecompute)
{
m_LocalTransformNeedsRecompute = false;
if (m_ParentTransformComponent != nullptr)
{
auto parentWorld = m_ParentTransformComponent->worldTransform();
Mat2D inverse;
if (parentWorld.invert(&inverse))
{
m_LocalTransform = inverse * worldTransform();
return m_LocalTransform;
}
}
m_LocalTransform = Mat2D();
}
return m_LocalTransform;
}
#ifdef WITH_RIVE_LAYOUT
void Node::markLayoutNodeDirty()
{
for (ContainerComponent* p = parent(); p != nullptr; p = p->parent())
{
if (p->is<LayoutComponent>())
{
p->as<LayoutComponent>()->markLayoutNodeDirty();
}
}
}
#endif