mirror of
https://github.com/aseprite/aseprite.git
synced 2025-02-15 21:40:34 +00:00
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:
parent
73c725827e
commit
ef16a9e57d
@ -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]);
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user