| #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 |