@@ -25,8 +25,10 @@ RenderedTarget::RenderedTarget(QNanoQuickItem *parent) :
2525
2626RenderedTarget::~RenderedTarget ()
2727{
28- for (const auto &[costume, skin] : m_skins)
29- delete skin;
28+ if (!m_skinsInherited) {
29+ for (const auto &[costume, skin] : m_skins)
30+ delete skin;
31+ }
3032}
3133
3234void RenderedTarget::updateVisibility (bool visible)
@@ -121,9 +123,12 @@ bool RenderedTarget::costumesLoaded() const
121123void RenderedTarget::loadCostumes ()
122124{
123125 // Delete previous skins
124- for (const auto &[costume, skin] : m_skins)
125- delete skin;
126+ if (!m_skinsInherited) {
127+ for (const auto &[costume, skin] : m_skins)
128+ delete skin;
129+ }
126130
131+ m_skinsInherited = false ;
127132 m_skins.clear ();
128133
129134 // Generate a skin for each costume
@@ -227,6 +232,20 @@ void RenderedTarget::setSpriteModel(SpriteModel *newSpriteModel)
227232 m_spriteModel = newSpriteModel;
228233
229234 if (m_spriteModel) {
235+ SpriteModel *cloneRoot = m_spriteModel->cloneRoot ();
236+
237+ if (cloneRoot) {
238+ // Inherit skins from the clone root
239+ RenderedTarget *target = dynamic_cast <RenderedTarget *>(cloneRoot->renderedTarget ());
240+ Q_ASSERT (target);
241+
242+ if (target->costumesLoaded ()) {
243+ m_skins = target->m_skins ; // TODO: Avoid copying - maybe using a pointer?
244+ m_costumesLoaded = true ;
245+ m_skinsInherited = true ; // avoid double free
246+ }
247+ }
248+
230249 Sprite *sprite = m_spriteModel->sprite ();
231250
232251 if (sprite) {
0 commit comments