From 6e8295666d1c93e896db773882919b49b8f40278 Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Sat, 10 Oct 2020 17:22:04 +1100 Subject: [PATCH] timeline: optimized rubberband selections --- app/widget/timelinewidget/timelinewidget.cpp | 27 +++++++++++++++----- 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/app/widget/timelinewidget/timelinewidget.cpp b/app/widget/timelinewidget/timelinewidget.cpp index b9c942cf1..57faf7510 100644 --- a/app/widget/timelinewidget/timelinewidget.cpp +++ b/app/widget/timelinewidget/timelinewidget.cpp @@ -1230,6 +1230,10 @@ const QRect& TimelineWidget::GetRubberBandGeometry() const void TimelineWidget::SignalSelectedBlocks(QList input, bool filter) { + if (input.isEmpty()) { + return; + } + if (filter) { // If filtering, remove all the blocks that are already selected for (int i=0; i input, bool filter) void TimelineWidget::SignalDeselectedBlocks(const QList &deselected_blocks) { + if (deselected_blocks.isEmpty()) { + return; + } + foreach (Block* b, deselected_blocks) { selected_blocks_.removeOne(b); } @@ -1258,8 +1266,10 @@ void TimelineWidget::SignalDeselectedBlocks(const QList &deselected_blo void TimelineWidget::SignalDeselectedAllBlocks() { - emit BlocksDeselected(selected_blocks_); - selected_blocks_.clear(); + if (!selected_blocks_.isEmpty()) { + emit BlocksDeselected(selected_blocks_); + selected_blocks_.clear(); + } } QVector TimelineWidget::GetEditToInfo(const rational& playhead_time, @@ -1474,6 +1484,7 @@ void TimelineWidget::MoveRubberBandSelect(bool enable_selecting, bool select_lin // Add any blocks in rubberband rubberband_now_selected_.clear(); + foreach (QGraphicsItem* item, items_in_rubberband) { TimelineViewBlockItem* block_item = dynamic_cast(item); @@ -1489,13 +1500,17 @@ void TimelineWidget::MoveRubberBandSelect(bool enable_selecting, bool select_lin continue; } - AddSelection(block_item); - rubberband_now_selected_.append(block_item->block()); + if (!rubberband_now_selected_.contains(b)) { + AddSelection(block_item); + rubberband_now_selected_.append(b); + } if (select_links) { foreach (Block* link, b->linked_clips()) { - AddSelection(block_items_.value(link)); - rubberband_now_selected_.append(link); + if (!rubberband_now_selected_.contains(link)) { + AddSelection(block_items_.value(link)); + rubberband_now_selected_.append(link); + } } } }