Fix several bugs copying name/userData when we clone tilesets

Found on #3630

Co-authored-by: Gaspar Capello <gaspar@igara.com>
This commit is contained in:
David Capello 2022-12-17 13:42:51 -03:00
parent 5a5ac179cd
commit ea17eae524
4 changed files with 15 additions and 10 deletions

View File

@ -125,6 +125,8 @@ protected:
auto newTileset = new doc::Tileset(sprite(), newGrid, tileset->size());
doc::tile_index idx = 0;
newTileset->setName(tileset->name());
newTileset->setUserData(tileset->userData());
for (doc::ImageRef tileImg : *tileset) {
if (idx != 0) {
doc::ImageRef newTileImg(

View File

@ -1,5 +1,5 @@
// Aseprite
// Copyright (C) 2019-2020 Igara Studio S.A.
// Copyright (C) 2019-2022 Igara Studio S.A.
// Copyright (C) 2001-2018 David Capello
//
// This program is distributed under the terms of
@ -508,9 +508,7 @@ Tileset* ExpandCelCanvas::getDestTileset()
const Tileset* srcTileset = static_cast<LayerTilemap*>(m_layer)->tileset();
ASSERT(srcTileset);
m_dstTileset.reset(new Tileset(m_sprite,
srcTileset->grid(),
srcTileset->size()));
m_dstTileset.reset(Tileset::MakeCopyWithoutImages(srcTileset));
copySourceTilestToDestTileset();
}
return m_dstTileset.get();

View File

@ -45,13 +45,21 @@ Tileset::Tileset(Sprite* sprite,
}
// static
Tileset* Tileset::MakeCopyWithSameImages(const Tileset* tileset)
Tileset* Tileset::MakeCopyWithoutImages(const Tileset* tileset)
{
std::unique_ptr<Tileset> copy(
new Tileset(tileset->sprite(),
tileset->grid(),
tileset->size()));
copy->setName(tileset->name());
copy->setUserData(tileset->userData());
return copy.release();
}
// static
Tileset* Tileset::MakeCopyWithSameImages(const Tileset* tileset)
{
std::unique_ptr<Tileset> copy(MakeCopyWithoutImages(tileset));
for (tile_index ti=0; ti<copy->size(); ++ti) {
ImageRef image = tileset->get(ti);
ASSERT(image);
@ -63,11 +71,7 @@ Tileset* Tileset::MakeCopyWithSameImages(const Tileset* tileset)
// static
Tileset* Tileset::MakeCopyCopyingImages(const Tileset* tileset)
{
std::unique_ptr<Tileset> copy(
new Tileset(tileset->sprite(),
tileset->grid(),
tileset->size()));
copy->setName(tileset->name());
std::unique_ptr<Tileset> copy(MakeCopyWithoutImages(tileset));
for (tile_index ti=0; ti<copy->size(); ++ti) {
ImageRef image = tileset->get(ti);
ASSERT(image);

View File

@ -36,6 +36,7 @@ namespace doc {
const Grid& grid,
const tileset_index ntiles);
static Tileset* MakeCopyWithoutImages(const Tileset* tileset);
static Tileset* MakeCopyWithSameImages(const Tileset* tileset);
static Tileset* MakeCopyCopyingImages(const Tileset* tileset);