ArtboardInstance its own type
diff --git a/include/rive/artboard.hpp b/include/rive/artboard.hpp index 003b72c..5f33451 100644 --- a/include/rive/artboard.hpp +++ b/include/rive/artboard.hpp
@@ -22,6 +22,7 @@ class DrawTarget; class ArtboardImporter; class NestedArtboard; + class ArtboardInstance; class Artboard : public ArtboardBase, public CoreContext, public ShapePaintContainer { friend class File; @@ -132,7 +133,7 @@ /// Make an instance of this artboard, must be explictly deleted when no /// longer needed. - std::unique_ptr<Artboard> instance() const; + std::unique_ptr<ArtboardInstance> instance() const; /// Returns true if the artboard is an instance of another bool isInstance() const { return m_IsInstance; } @@ -151,6 +152,10 @@ StatusCode import(ImportStack& importStack) override; }; + + class ArtboardInstance : public Artboard { + public: + }; } // namespace rive #endif
diff --git a/src/artboard.cpp b/src/artboard.cpp index 85251ea..7a3cf9f 100644 --- a/src/artboard.cpp +++ b/src/artboard.cpp
@@ -31,6 +31,7 @@ // Instances reference back to the original artboard's animations and state // machines, so don't delete them here, they'll get cleaned up when the // source is deleted. + // TODO: move this logic into ArtboardInstance destructor??? if (!m_IsInstance) { for (auto object : m_Animations) { delete object; @@ -490,8 +491,10 @@ return m_StateMachines[index]; } -std::unique_ptr<Artboard> Artboard::instance() const { - std::unique_ptr<Artboard> artboardClone(clone()->as<Artboard>()); +std::unique_ptr<ArtboardInstance> Artboard::instance() const { + std::unique_ptr<ArtboardInstance> artboardClone(new ArtboardInstance); + artboardClone->copy(*this); + artboardClone->m_FrameOrigin = m_FrameOrigin; std::vector<Core*>& cloneObjects = artboardClone->m_Objects;