From 25ca9e4a13baad436dd56a360ddbd564f9400995 Mon Sep 17 00:00:00 2001 From: sumibi-yakitori Date: Mon, 23 Nov 2020 14:01:24 +0900 Subject: [PATCH] Add duplicate slices --- src/app/doc.cpp | 12 ++++++++++++ src/doc/slice.cpp | 8 ++++++++ src/doc/slice.h | 3 +-- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/app/doc.cpp b/src/app/doc.cpp index 31b4c0e94..d4e636e34 100644 --- a/src/app/doc.cpp +++ b/src/app/doc.cpp @@ -32,6 +32,7 @@ #include "doc/palette.h" #include "doc/sprite.h" #include "doc/tag.h" +#include "doc/slice.h" #include "os/display.h" #include "os/system.h" #include "ui/system.h" @@ -511,6 +512,17 @@ Doc* Doc::duplicate(DuplicateType type) const for (const Tag* tag : sourceSprite->tags()) spriteCopy->tags().add(new Tag(*tag)); + // Copy slices + for (const Slice *slice : sourceSprite->slices()) { + auto sliceCopy = new Slice(*slice); + sliceCopy->setUserData(slice->userData()); + + for (frame_t i(0); i < sourceSprite->totalFrames(); ++i) + sliceCopy->insert(i, *slice->getByFrame(i)); + + spriteCopy->slices().add(sliceCopy); + } + // Copy color palettes { PalettesList::const_iterator it = sourceSprite->getPalettes().begin(); diff --git a/src/doc/slice.cpp b/src/doc/slice.cpp index 1fa10d62c..b7f5904ff 100644 --- a/src/doc/slice.cpp +++ b/src/doc/slice.cpp @@ -41,6 +41,14 @@ Slice::Slice() { } +Slice::Slice(const Slice& other) + : WithUserData(ObjectType::Slice) + , m_owner(nullptr) + , m_name(other.m_name) +{ +} + + Slice::~Slice() { ASSERT(!m_owner); diff --git a/src/doc/slice.h b/src/doc/slice.h index 1c7fb73e8..fa6089742 100644 --- a/src/doc/slice.h +++ b/src/doc/slice.h @@ -54,6 +54,7 @@ namespace doc { typedef List::const_iterator const_iterator; Slice(); + Slice(const Slice& other); ~Slice(); int getMemSize() const override; @@ -88,8 +89,6 @@ namespace doc { Slices* m_owner; std::string m_name; List m_keys; - - DISABLE_COPYING(Slice); }; } // namespace doc