blob: ac14f36089ee6fba2e9235d2f6e28f1967fe2f75 [file] [log] [blame]
#ifndef _RIVE_NESTED_ANIMATION_HPP_
#define _RIVE_NESTED_ANIMATION_HPP_
#include "rive/event.hpp"
#include "rive/event_report.hpp"
#include "rive/generated/nested_animation_base.hpp"
#include "rive/nested_artboard.hpp"
#include <stdio.h>
namespace rive
{
class ArtboardInstance;
class NestedEventListener
{
public:
virtual ~NestedEventListener() {}
virtual void notify(const std::vector<EventReport>& events, NestedArtboard* context) = 0;
};
class NestedEventNotifier
{
public:
~NestedEventNotifier()
{
m_nestedArtboard = nullptr;
m_nestedEventListeners.clear();
}
void addNestedEventListener(NestedEventListener* listener)
{
m_nestedEventListeners.push_back(listener);
}
std::vector<NestedEventListener*> nestedEventListeners() { return m_nestedEventListeners; }
void setNestedArtboard(NestedArtboard* artboard) { m_nestedArtboard = artboard; }
NestedArtboard* nestedArtboard() { return m_nestedArtboard; }
void notifyListeners(const std::vector<Event*>& events)
{
std::vector<EventReport> eventReports;
for (auto event : events)
{
eventReports.push_back(EventReport(event, 0));
}
for (auto listener : m_nestedEventListeners)
{
listener->notify(eventReports, m_nestedArtboard);
}
}
private:
NestedArtboard* m_nestedArtboard = nullptr;
std::vector<NestedEventListener*> m_nestedEventListeners;
};
class NestedAnimation : public NestedAnimationBase
{
public:
StatusCode onAddedDirty(CoreContext* context) override;
// Advance animations and apply them to the artboard.
virtual bool advance(float elapsedSeconds) = 0;
// Initialize the animation (make instances as necessary) from the
// source artboard.
virtual void initializeAnimation(ArtboardInstance*) = 0;
};
} // namespace rive
#endif