From 1a848dc44070b45d400e336220d8bb267ddff99c Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Sat, 17 Apr 2021 12:50:58 +1000 Subject: [PATCH] track: cache length change invalidations and release when not dragging Not sure if this is the best solution, we'll see. Fixes issue where cache wouldn't respond to length slider. --- app/node/output/track/track.cpp | 11 +++++++++++ app/node/output/track/track.h | 2 ++ 2 files changed, 13 insertions(+) diff --git a/app/node/output/track/track.cpp b/app/node/output/track/track.cpp index 5dd552e58..941f80fc0 100644 --- a/app/node/output/track/track.cpp +++ b/app/node/output/track/track.cpp @@ -672,6 +672,17 @@ void Track::BlockLengthChanged() TimeRange invalidate_region(qMin(old_out, new_out), track_length()); + // The cache won't start while dragging, so we store up our invalidations if it's held down + // and release them once the mouse is no longer pressed + if (qApp->mouseButtons() & Qt::LeftButton) { + block_length_pending_invalidations_.insert(invalidate_region); + } else if (!block_length_pending_invalidations_.isEmpty()) { + foreach (const TimeRange& r, block_length_pending_invalidations_) { + Node::InvalidateCache(r, kBlockInput); + } + block_length_pending_invalidations_.clear(); + } + Node::InvalidateCache(invalidate_region, kBlockInput); } diff --git a/app/node/output/track/track.h b/app/node/output/track/track.h index 271fbf36d..124faa374 100644 --- a/app/node/output/track/track.h +++ b/app/node/output/track/track.h @@ -422,6 +422,8 @@ private: void SetLengthInternal(const rational& r, bool invalidate = true); + TimeRangeList block_length_pending_invalidations_; + QVector blocks_; QVector block_array_indexes_;