diff --git a/src/app/util/clipboard.cpp b/src/app/util/clipboard.cpp index e15523253..3245589ee 100644 --- a/src/app/util/clipboard.cpp +++ b/src/app/util/clipboard.cpp @@ -311,6 +311,16 @@ void clipboard::paste() std::vector 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(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( diff --git a/src/raster/layer.cpp b/src/raster/layer.cpp index 7f0508558..10500abd1 100644 --- a/src/raster/layer.cpp +++ b/src/raster/layer.cpp @@ -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(); diff --git a/src/raster/layer.h b/src/raster/layer.h index 7793ddf30..5de16b6f1 100644 --- a/src/raster/layer.h +++ b/src/raster/layer.h @@ -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();