1 #include "transform_component.hpp"
2 #include "shapes/clipping_shape.hpp"
6 StatusCode TransformComponent::onAddedClean(CoreContext* context)
8 m_ParentTransformComponent =
9 parent() != nullptr && parent()->is<TransformComponent>()
10 ? parent()->as<TransformComponent>()
12 return StatusCode::Ok;
15 void TransformComponent::buildDependencies()
17 if (parent() != nullptr)
19 parent()->addDependent(this);
23 void TransformComponent::markTransformDirty()
25 if (!addDirt(ComponentDirt::Transform))
29 markWorldTransformDirty();
32 void TransformComponent::markWorldTransformDirty()
34 addDirt(ComponentDirt::WorldTransform, true);
37 void TransformComponent::updateTransform()
41 Mat2D::fromRotation(m_Transform, rotation());
45 Mat2D::identity(m_Transform);
49 Mat2D::scaleByValues(m_Transform, scaleX(), scaleY());
52 void TransformComponent::updateWorldTransform()
54 if (m_ParentTransformComponent != nullptr)
56 Mat2D::multiply(m_WorldTransform,
57 m_ParentTransformComponent->m_WorldTransform,
62 Mat2D::copy(m_WorldTransform, m_Transform);
66 void TransformComponent::update(ComponentDirt value)
68 if (hasDirt(value, ComponentDirt::Transform))
72 if (hasDirt(value, ComponentDirt::WorldTransform))
74 updateWorldTransform();
76 if (hasDirt(value, ComponentDirt::RenderOpacity))
78 m_RenderOpacity = opacity();
79 if (m_ParentTransformComponent != nullptr)
81 m_RenderOpacity *= m_ParentTransformComponent->childOpacity();
86 const Mat2D& TransformComponent::transform() const { return m_Transform; }
87 const Mat2D& TransformComponent::worldTransform() const
89 return m_WorldTransform;
92 void TransformComponent::rotationChanged() { markTransformDirty(); }
93 void TransformComponent::scaleXChanged() { markTransformDirty(); }
94 void TransformComponent::scaleYChanged() { markTransformDirty(); }
95 void TransformComponent::opacityChanged()
97 addDirt(ComponentDirt::RenderOpacity, true);