submodule: add rive-cpp to rive-tizen as submodule
[platform/core/uifw/rive-tizen.git] / submodule / src / component.cpp
1 #include "component.hpp"
2 #include "artboard.hpp"
3 #include "container_component.hpp"
4 #include "core_context.hpp"
5 #include <algorithm>
6
7 using namespace rive;
8
9 StatusCode Component::onAddedDirty(CoreContext* context)
10 {
11         m_Artboard = static_cast<Artboard*>(context);
12         if (this == m_Artboard)
13         {
14                 // We're the artboard, don't parent to ourselves.
15                 return StatusCode::Ok;
16         }
17         auto coreObject = context->resolve(parentId());
18         if (coreObject == nullptr || !coreObject->is<ContainerComponent>())
19         {
20                 return StatusCode::MissingObject;
21         }
22         m_Parent = reinterpret_cast<ContainerComponent*>(coreObject);
23         return StatusCode::Ok;
24 }
25
26 void Component::addDependent(Component* component)
27 {
28         // Make it's not already a dependent.
29         assert(std::find(m_Dependents.begin(), m_Dependents.end(), component) ==
30                m_Dependents.end());
31         m_Dependents.push_back(component);
32 }
33
34 bool Component::addDirt(ComponentDirt value, bool recurse)
35 {
36         if ((m_Dirt & value) == value)
37         {
38                 // Already marked.
39                 return false;
40         }
41
42         // Make sure dirt is set before calling anything that can set more dirt.
43         m_Dirt |= value;
44
45         onDirty(m_Dirt);
46
47         m_Artboard->onComponentDirty(this);
48
49         if (!recurse)
50         {
51                 return true;
52         }
53
54         for (auto d : m_Dependents)
55         {
56                 d->addDirt(value, true);
57         }
58         return true;
59 }