[Adaptation Layer] Added rive-tizen adaptation layer class.
[platform/core/uifw/rive-tizen.git] / submodule / src / transform_component.cpp
1 #include "transform_component.hpp"
2 #include "shapes/clipping_shape.hpp"
3
4 using namespace rive;
5
6 StatusCode TransformComponent::onAddedClean(CoreContext* context)
7 {
8         m_ParentTransformComponent =
9             parent() != nullptr && parent()->is<TransformComponent>()
10                 ? parent()->as<TransformComponent>()
11                 : nullptr;
12         return StatusCode::Ok;
13 }
14
15 void TransformComponent::buildDependencies()
16 {
17         if (parent() != nullptr)
18         {
19                 parent()->addDependent(this);
20         }
21 }
22
23 void TransformComponent::markTransformDirty()
24 {
25         if (!addDirt(ComponentDirt::Transform))
26         {
27                 return;
28         }
29         markWorldTransformDirty();
30 }
31
32 void TransformComponent::markWorldTransformDirty()
33 {
34         addDirt(ComponentDirt::WorldTransform, true);
35 }
36
37 void TransformComponent::updateTransform()
38 {
39         if (rotation() != 0)
40         {
41                 Mat2D::fromRotation(m_Transform, rotation());
42         }
43         else
44         {
45                 Mat2D::identity(m_Transform);
46         }
47         m_Transform[4] = x();
48         m_Transform[5] = y();
49         Mat2D::scaleByValues(m_Transform, scaleX(), scaleY());
50 }
51
52 void TransformComponent::updateWorldTransform()
53 {
54         if (m_ParentTransformComponent != nullptr)
55         {
56                 Mat2D::multiply(m_WorldTransform,
57                                 m_ParentTransformComponent->m_WorldTransform,
58                                 m_Transform);
59         }
60         else
61         {
62                 Mat2D::copy(m_WorldTransform, m_Transform);
63         }
64 }
65
66 void TransformComponent::update(ComponentDirt value)
67 {
68         if (hasDirt(value, ComponentDirt::Transform))
69         {
70                 updateTransform();
71         }
72         if (hasDirt(value, ComponentDirt::WorldTransform))
73         {
74                 updateWorldTransform();
75         }
76         if (hasDirt(value, ComponentDirt::RenderOpacity))
77         {
78                 m_RenderOpacity = opacity();
79                 if (m_ParentTransformComponent != nullptr)
80                 {
81                         m_RenderOpacity *= m_ParentTransformComponent->childOpacity();
82                 }
83         }
84 }
85
86 const Mat2D& TransformComponent::transform() const { return m_Transform; }
87 const Mat2D& TransformComponent::worldTransform() const
88 {
89         return m_WorldTransform;
90 }
91
92 void TransformComponent::rotationChanged() { markTransformDirty(); }
93 void TransformComponent::scaleXChanged() { markTransformDirty(); }
94 void TransformComponent::scaleYChanged() { markTransformDirty(); }
95 void TransformComponent::opacityChanged()
96 {
97         addDirt(ComponentDirt::RenderOpacity, true);
98 }