nodes: bypass invalidate length limit for certain track operations

Fixes #1290
Fixes #1228
This commit is contained in:
itsmattkc
2020-11-18 12:56:00 +11:00
parent 3edac8a07f
commit 04dd502a40
2 changed files with 26 additions and 24 deletions
+12 -11
View File
@@ -300,7 +300,7 @@ void TrackOutput::PrependBlock(Block *block)
EndOperation();
// Everything has shifted at this point
InvalidateCache(TimeRange(0, track_length()), block_input_, block_input_);
Node::InvalidateCache(TimeRange(0, track_length()), block_input_, block_input_);
}
void TrackOutput::InsertBlockAtIndex(Block *block, int index)
@@ -314,7 +314,7 @@ void TrackOutput::InsertBlockAtIndex(Block *block, int index)
EndOperation();
InvalidateCache(TimeRange(block->in(), track_length()), block_input_, block_input_);
Node::InvalidateCache(TimeRange(block->in(), track_length()), block_input_, block_input_);
}
void TrackOutput::AppendBlock(Block *block)
@@ -327,7 +327,7 @@ void TrackOutput::AppendBlock(Block *block)
EndOperation();
// Invalidate area that block was added to
InvalidateCache(TimeRange(block->in(), track_length()), block_input_, block_input_);
Node::InvalidateCache(TimeRange(block->in(), track_length()), block_input_, block_input_);
}
void TrackOutput::RippleRemoveBlock(Block *block)
@@ -335,12 +335,13 @@ void TrackOutput::RippleRemoveBlock(Block *block)
BeginOperation();
rational remove_in = block->in();
rational remove_out = block->out();
block_input_->RemoveAt(GetInputIndexFromCacheIndex(block));
EndOperation();
InvalidateCache(TimeRange(remove_in, track_length()), block_input_, block_input_);
Node::InvalidateCache(TimeRange(remove_in, qMax(track_length(), remove_out)), block_input_, block_input_);
}
void TrackOutput::ReplaceBlock(Block *old, Block *replace)
@@ -358,9 +359,9 @@ void TrackOutput::ReplaceBlock(Block *old, Block *replace)
EndOperation();
if (old->length() == replace->length()) {
InvalidateCache(TimeRange(replace->in(), replace->out()), block_input_, block_input_);
Node::InvalidateCache(TimeRange(replace->in(), replace->out()), block_input_, block_input_);
} else {
InvalidateCache(TimeRange(replace->in(), RATIONAL_MAX), block_input_, block_input_);
Node::InvalidateCache(TimeRange(replace->in(), RATIONAL_MAX), block_input_, block_input_);
}
}
@@ -434,7 +435,7 @@ void TrackOutput::Hash(QCryptographicHash &hash, const rational &time) const
void TrackOutput::SetMuted(bool e)
{
muted_input_->set_standard_value(e);
InvalidateCache(TimeRange(0, track_length()), block_input_, block_input_);
Node::InvalidateCache(TimeRange(0, track_length()), block_input_, block_input_);
}
void TrackOutput::SetLocked(bool e)
@@ -489,9 +490,9 @@ void TrackOutput::SetLengthInternal(const rational &r, bool invalidate)
emit TrackLengthChanged();
if (invalidate) {
InvalidateCache(invalidate_range,
block_input_,
block_input_);
Node::InvalidateCache(invalidate_range,
block_input_,
block_input_);
}
}
}
@@ -594,7 +595,7 @@ void TrackOutput::BlockLengthChanged()
TimeRange invalidate_region(qMin(old_out, new_out), track_length());
InvalidateCache(invalidate_region, block_input_, block_input_);
Node::InvalidateCache(invalidate_region, block_input_, block_input_);
}
void TrackOutput::MutedInputValueChanged()
+14 -13
View File
@@ -284,9 +284,9 @@ void TrackRippleRemoveAreaCommand::redo_internal()
track_->EndOperation();
track_->InvalidateCache(TimeRange(in_, insert_ ? out_ : RATIONAL_MAX),
track_->block_input(),
track_->block_input());
track_->Node::InvalidateCache(TimeRange(in_, insert_ ? out_ : RATIONAL_MAX),
track_->block_input(),
track_->block_input());
}
void TrackRippleRemoveAreaCommand::undo_internal()
@@ -342,7 +342,8 @@ void TrackRippleRemoveAreaCommand::undo_internal()
track_->EndOperation();
track_->InvalidateCache(TimeRange(in_, insert_ ? out_ : RATIONAL_MAX), track_->block_input(), track_->block_input());
track_->Node::InvalidateCache(TimeRange(in_, insert_ ? out_ : RATIONAL_MAX),
track_->block_input(), track_->block_input());
}
TrackPlaceBlockCommand::TrackPlaceBlockCommand(TrackList *timeline, int track, Block *block, rational in, QUndoCommand *parent) :
@@ -1092,7 +1093,7 @@ void TrackReplaceBlockWithGapCommand::redo_internal()
track_->EndOperation();
track_->InvalidateCache(invalidate_range, track_->block_input(), track_->block_input());
track_->Node::InvalidateCache(invalidate_range, track_->block_input(), track_->block_input());
}
void TrackReplaceBlockWithGapCommand::undo_internal()
@@ -1137,20 +1138,20 @@ void TrackReplaceBlockWithGapCommand::undo_internal()
// required no gap extension/replacement
// However, we may have removed an unnecessary gap that preceded it
if (existing_merged_gap_) {
static_cast<NodeGraph*>(track_->parent())->AddNode(existing_merged_gap_);
track_->AppendBlock(existing_merged_gap_);
existing_merged_gap_ = nullptr;
}
if (existing_merged_gap_) {
static_cast<NodeGraph*>(track_->parent())->AddNode(existing_merged_gap_);
track_->AppendBlock(existing_merged_gap_);
existing_merged_gap_ = nullptr;
}
// Restore block
track_->AppendBlock(block_);
// Restore block
track_->AppendBlock(block_);
}
track_->EndOperation();
track_->InvalidateCache(TimeRange(block_->in(), block_->out()), track_->block_input(), track_->block_input());
track_->Node::InvalidateCache(TimeRange(block_->in(), block_->out()), track_->block_input(), track_->block_input());
}
TrackSlideCommand::TrackSlideCommand(TrackOutput* track, const QList<Block*>& moving_blocks, Block *in_adjacent, Block *out_adjacent, const rational& movement, QUndoCommand* parent) :