Fix crash on copy & paste in same place (fix #758)

This crash happened when the selection was created from top to bottom.
This commit is contained in:
David Capello 2015-08-19 16:43:13 -03:00
parent 73c725827e
commit ef16a9e57d
2 changed files with 17 additions and 6 deletions

View File

@ -141,6 +141,10 @@ static DocumentRange drop_range_op(
dstLayerIdx = dstLayerBegin; srcLayerIdx != srcLayerEnd; ) {
for (frame_t srcFrame = srcFrameBegin,
dstFrame = dstFrameBegin; srcFrame != srcFrameEnd; ) {
if (dstLayerIdx < 0 || dstLayerIdx >= int(layers.size()) ||
srcLayerIdx < 0 || srcLayerIdx >= int(layers.size()))
break;
LayerImage* srcLayer = static_cast<LayerImage*>(layers[srcLayerIdx]);
LayerImage* dstLayer = static_cast<LayerImage*>(layers[dstLayerIdx]);

View File

@ -316,16 +316,23 @@ void clipboard::paste()
// We can use a document range op (copy_range) to copy/paste
// cels in the same document.
if (srcDoc == dstDoc) {
DocumentRange dstRange;
Timeline* timeline = App::instance()->getMainWindow()->getTimeline();
DocumentRange dstRange = timeline->range();
LayerIndex dstLayer = srcSpr->layerToIndex(editor->layer());
frame_t dstFrame = editor->frame();
dstRange.startRange(dstLayer, dstFrame,
DocumentRange::kCels);
dstRange.endRange(dstLayer + LayerIndex(- srcRange.layers() + 1),
dstFrame + srcRange.frames() - 1);
if (dstRange.enabled()) {
dstLayer = dstRange.layerEnd();
dstFrame = dstRange.frameBegin();
}
copy_range(srcDoc, srcRange, dstRange, kDocumentRangeBefore);
LayerIndex dstLayer2(int(dstLayer)-srcRange.layers()+1);
dstRange.startRange(dstLayer, dstFrame, DocumentRange::kCels);
dstRange.endRange(dstLayer2, dstFrame+srcRange.frames()-1);
// This is the app::copy_range (not clipboard::copy_range()).
app::copy_range(srcDoc, srcRange, dstRange, kDocumentRangeBefore);
editor->invalidate();
return;
}