mirror of
https://github.com/aseprite/aseprite.git
synced 2025-03-01 10:13:22 +00:00
Fixed Sprite(const Sprite&) constructor.
This commit is contained in:
parent
19dd9f6c90
commit
d976011597
@ -50,8 +50,8 @@ public:
|
||||
SpriteImpl(Sprite* sprite, int imgtype, int width, int height, int ncolors);
|
||||
~SpriteImpl();
|
||||
|
||||
static SpriteImpl* copy(Sprite* new_sprite, const SpriteImpl* src_sprite);
|
||||
static SpriteImpl* copyBase(Sprite* new_sprite, const SpriteImpl* src_sprite);
|
||||
static SpriteImpl* copyLayers(SpriteImpl* dst_sprite, const SpriteImpl* src_sprite);
|
||||
|
||||
bool lock(bool write);
|
||||
bool lockToWrite();
|
||||
@ -474,37 +474,6 @@ SpriteImpl::SpriteImpl(Sprite* sprite, int imgtype, int width, int height, int n
|
||||
setPalette(&pal, true);
|
||||
}
|
||||
|
||||
SpriteImpl* SpriteImpl::copy(Sprite* sprite, const SpriteImpl* src_sprite)
|
||||
{
|
||||
SpriteImpl* dst_sprite = copyBase(sprite, src_sprite);
|
||||
|
||||
// Copy layers
|
||||
if (dst_sprite->m_folder) {
|
||||
delete dst_sprite->m_folder; // delete
|
||||
dst_sprite->m_folder = NULL;
|
||||
}
|
||||
|
||||
assert(src_sprite->getFolder() != NULL);
|
||||
|
||||
undo_disable(dst_sprite->getUndo());
|
||||
dst_sprite->m_folder = src_sprite->getFolder()->duplicate_for(dst_sprite->m_self);
|
||||
undo_enable(dst_sprite->getUndo());
|
||||
|
||||
if (dst_sprite->m_folder == NULL) {
|
||||
delete dst_sprite;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// Selected layer
|
||||
if (src_sprite->getCurrentLayer() != NULL) {
|
||||
int selected_layer = src_sprite->layerToIndex(src_sprite->getCurrentLayer());
|
||||
dst_sprite->setCurrentLayer(dst_sprite->indexToLayer(selected_layer));
|
||||
}
|
||||
|
||||
dst_sprite->generateMaskBoundaries();
|
||||
return dst_sprite;
|
||||
}
|
||||
|
||||
/**
|
||||
* Makes a copy "sprite" without the layers (only with the empty layer set)
|
||||
*/
|
||||
@ -516,6 +485,7 @@ SpriteImpl* SpriteImpl::copyBase(Sprite* new_sprite, const SpriteImpl* src_sprit
|
||||
src_sprite->m_width, src_sprite->m_height,
|
||||
src_sprite->getPalette(0)->size());
|
||||
|
||||
|
||||
// Copy stock
|
||||
stock_free(dst_sprite->m_stock);
|
||||
dst_sprite->m_stock = stock_new_copy(src_sprite->m_stock);
|
||||
@ -524,7 +494,7 @@ SpriteImpl* SpriteImpl::copyBase(Sprite* new_sprite, const SpriteImpl* src_sprit
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* copy general properties */
|
||||
// Copy general properties
|
||||
dst_sprite->m_filename = src_sprite->m_filename;
|
||||
dst_sprite->setTotalFrames(src_sprite->m_frames);
|
||||
std::copy(src_sprite->m_frlens.begin(),
|
||||
@ -574,6 +544,35 @@ SpriteImpl* SpriteImpl::copyBase(Sprite* new_sprite, const SpriteImpl* src_sprit
|
||||
return dst_sprite;
|
||||
}
|
||||
|
||||
SpriteImpl* SpriteImpl::copyLayers(SpriteImpl* dst_sprite, const SpriteImpl* src_sprite)
|
||||
{
|
||||
// Copy layers
|
||||
if (dst_sprite->m_folder) {
|
||||
delete dst_sprite->m_folder; // delete
|
||||
dst_sprite->m_folder = NULL;
|
||||
}
|
||||
|
||||
assert(src_sprite->getFolder() != NULL);
|
||||
|
||||
undo_disable(dst_sprite->getUndo());
|
||||
dst_sprite->m_folder = src_sprite->getFolder()->duplicate_for(dst_sprite->m_self);
|
||||
undo_enable(dst_sprite->getUndo());
|
||||
|
||||
if (dst_sprite->m_folder == NULL) {
|
||||
delete dst_sprite;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// Selected layer
|
||||
if (src_sprite->getCurrentLayer() != NULL) {
|
||||
int selected_layer = src_sprite->layerToIndex(src_sprite->getCurrentLayer());
|
||||
dst_sprite->setCurrentLayer(dst_sprite->indexToLayer(selected_layer));
|
||||
}
|
||||
|
||||
dst_sprite->generateMaskBoundaries();
|
||||
return dst_sprite;
|
||||
}
|
||||
|
||||
SpriteImpl::~SpriteImpl()
|
||||
{
|
||||
JLink link;
|
||||
@ -937,8 +936,9 @@ Sprite::~Sprite()
|
||||
|
||||
Sprite::Sprite(const Sprite& original)
|
||||
: GfxObj(GFXOBJ_SPRITE)
|
||||
, m_impl(SpriteImpl::copy(this, original.m_impl))
|
||||
, m_impl(SpriteImpl::copyBase(this, original.m_impl))
|
||||
{
|
||||
SpriteImpl::copyLayers(m_impl, original.m_impl);
|
||||
}
|
||||
|
||||
Sprite* Sprite::createFlattenCopy(const Sprite& src_sprite)
|
||||
|
Loading…
x
Reference in New Issue
Block a user