When copy and paste layers between documents, expand the number of total frames of the destination sprite if it's needed

This commit is contained in:
David Capello 2014-08-12 07:57:40 -03:00
parent dde7915c24
commit 42399df2c8
3 changed files with 19 additions and 1 deletions

View File

@ -311,6 +311,16 @@ void clipboard::paste()
std::vector<Layer*> src_layers;
src_doc->sprite()->getLayersList(src_layers);
// Expand frames of dst_doc if it's needed.
FrameNumber maxFrame(0);
for (LayerIndex i = range.layerBegin(); i <= range.layerEnd(); ++i) {
Cel* lastCel = static_cast<LayerImage*>(src_layers[i])->getLastCel();
if (maxFrame < lastCel->frame())
maxFrame = lastCel->frame();
}
if (dst_doc->sprite()->totalFrames() < maxFrame.next())
dst_doc->getApi().setTotalFrames(dst_spr, maxFrame.next());
for (LayerIndex i = range.layerBegin(); i <= range.layerEnd(); ++i) {
LayerImage* new_layer = new LayerImage(dst_spr);
dst_doc->getApi().addLayer(

View File

@ -146,6 +146,14 @@ void LayerImage::getCels(CelList& cels) const
cels.push_back(*it);
}
Cel* LayerImage::getLastCel() const
{
if (!m_cels.empty())
return m_cels.back();
else
return NULL;
}
void LayerImage::addCel(Cel *cel)
{
CelIterator it = getCelBegin();

View File

@ -111,8 +111,8 @@ namespace raster {
void moveCel(Cel *cel, FrameNumber frame);
const Cel* getCel(FrameNumber frame) const;
Cel* getCel(FrameNumber frame);
void getCels(CelList& cels) const OVERRIDE;
Cel* getLastCel() const;
void configureAsBackground();