Add duplicate slices

This commit is contained in:
sumibi-yakitori 2020-11-23 14:01:24 +09:00
parent ca013ff5d8
commit 25ca9e4a13
3 changed files with 21 additions and 2 deletions

View File

@ -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();

View File

@ -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);

View File

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