blob: 443854b704552b9901d0d9a072c80f513373ac5e [file] [log] [blame]
#include "rive/component_dirt.hpp"
#include "rive/generated/component_base.hpp"
#include <vector>
namespace rive {
class ContainerComponent;
class Artboard;
class Component : public ComponentBase {
friend class Artboard;
ContainerComponent* m_Parent = nullptr;
std::vector<Component*> m_Dependents;
unsigned int m_GraphOrder;
Artboard* m_Artboard = nullptr;
ComponentDirt m_Dirt = ComponentDirt::Filthy;
inline Artboard* artboard() const { return m_Artboard; }
StatusCode onAddedDirty(CoreContext* context) override;
inline ContainerComponent* parent() const { return m_Parent; }
const std::vector<Component*>& dependents() const { return m_Dependents; }
void addDependent(Component* component);
// TODO: re-evaluate when more of the lib is complete...
// These could be pure virtual but we define them empty here to avoid
// having to implement them in a bunch of concrete classes that
// currently don't use this logic.
virtual void buildDependencies() {}
virtual void onDirty(ComponentDirt dirt) {}
virtual void update(ComponentDirt value) {}
unsigned int graphOrder() const { return m_GraphOrder; }
bool addDirt(ComponentDirt value, bool recurse = false);
inline bool hasDirt(ComponentDirt flag) const { return (m_Dirt & flag) == flag; }
static inline bool hasDirt(ComponentDirt value, ComponentDirt flag) {
return (value & flag) != ComponentDirt::None;
StatusCode import(ImportStack& importStack) override;
} // namespace rive