From e54854b78ae46480d7642772e5cbcd7257b24f11 Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Tue, 13 Apr 2021 13:22:46 +1000 Subject: [PATCH] fixed issue where timecodes in UI weren't updated correctly --- app/widget/timebased/timebasedwidget.cpp | 40 ++++++++++---------- app/widget/timelinewidget/timelinewidget.cpp | 14 ++++--- app/widget/timeruler/seekablewidget.cpp | 6 ++- 3 files changed, 31 insertions(+), 29 deletions(-) diff --git a/app/widget/timebased/timebasedwidget.cpp b/app/widget/timebased/timebasedwidget.cpp index 34c2a6e6f..df7d264ff 100644 --- a/app/widget/timebased/timebasedwidget.cpp +++ b/app/widget/timebased/timebasedwidget.cpp @@ -288,29 +288,27 @@ void TimeBasedWidget::PassWheelEventsToScrollBar(QObject *object) void TimeBasedWidget::SetTimestamp(int64_t timestamp) { - if (GetTime() != timestamp) { - if (UserIsDraggingPlayhead()) { - // If the user is dragging the playhead, we will simply nudge over and not use autoscroll rules. - QMetaObject::invokeMethod(this, "CatchUpScrollToPlayhead", Qt::QueuedConnection); - } else { - // Otherwise, assume we jumped to this out of nowhere and must now autoscroll - switch (static_cast(Config::Current()["Autoscroll"].toInt())) { - case AutoScroll::kNone: - // Do nothing - break; - case AutoScroll::kPage: - QMetaObject::invokeMethod(this, "PageScrollToPlayhead", Qt::QueuedConnection); - break; - case AutoScroll::kSmooth: - QMetaObject::invokeMethod(this, "CenterScrollOnPlayhead", Qt::QueuedConnection); - break; - } + if (UserIsDraggingPlayhead()) { + // If the user is dragging the playhead, we will simply nudge over and not use autoscroll rules. + QMetaObject::invokeMethod(this, "CatchUpScrollToPlayhead", Qt::QueuedConnection); + } else { + // Otherwise, assume we jumped to this out of nowhere and must now autoscroll + switch (static_cast(Config::Current()["Autoscroll"].toInt())) { + case AutoScroll::kNone: + // Do nothing + break; + case AutoScroll::kPage: + QMetaObject::invokeMethod(this, "PageScrollToPlayhead", Qt::QueuedConnection); + break; + case AutoScroll::kSmooth: + QMetaObject::invokeMethod(this, "CenterScrollOnPlayhead", Qt::QueuedConnection); + break; } - - ruler_->SetTime(timestamp); - - TimeChangedEvent(timestamp); } + + ruler_->SetTime(timestamp); + + TimeChangedEvent(timestamp); } void TimeBasedWidget::SetTimebase(const rational &timebase) diff --git a/app/widget/timelinewidget/timelinewidget.cpp b/app/widget/timelinewidget/timelinewidget.cpp index 799b0e21c..520a21c5e 100644 --- a/app/widget/timelinewidget/timelinewidget.cpp +++ b/app/widget/timelinewidget/timelinewidget.cpp @@ -50,8 +50,10 @@ namespace olive { +#define super TimeBasedWidget + TimelineWidget::TimelineWidget(QWidget *parent) : - TimeBasedWidget(true, true, parent), + super(true, true, parent), rubberband_(QRubberBand::Rectangle, this), active_tool_(nullptr), use_audio_time_units_(false) @@ -111,8 +113,6 @@ TimelineWidget::TimelineWidget(QWidget *parent) : connect(views_.first()->view()->horizontalScrollBar(), &QScrollBar::rangeChanged, scrollbar(), &QScrollBar::setRange); vert_layout->addWidget(scrollbar()); - connect(ruler(), &TimeRuler::TimeChanged, this, &TimelineWidget::SetViewTimestamp); - foreach (TimelineAndTrackView* tview, views_) { TimelineView* view = tview->view(); @@ -187,7 +187,7 @@ void TimelineWidget::Clear() void TimelineWidget::TimebaseChangedEvent(const rational &timebase) { - TimeBasedWidget::TimebaseChangedEvent(timebase); + super::TimebaseChangedEvent(timebase); timecode_label_->SetTimebase(timebase); @@ -198,7 +198,7 @@ void TimelineWidget::TimebaseChangedEvent(const rational &timebase) void TimelineWidget::resizeEvent(QResizeEvent *event) { - TimeBasedWidget::resizeEvent(event); + super::resizeEvent(event); // Update timecode label size UpdateTimecodeWidthFromSplitters(views_.first()->splitter()); @@ -206,6 +206,8 @@ void TimelineWidget::resizeEvent(QResizeEvent *event) void TimelineWidget::TimeChangedEvent(const int64_t& timestamp) { + super::TimeChangedEvent(timestamp); + SetViewTimestamp(timestamp); timecode_label_->SetValue(timestamp); @@ -213,7 +215,7 @@ void TimelineWidget::TimeChangedEvent(const int64_t& timestamp) void TimelineWidget::ScaleChangedEvent(const double &scale) { - TimeBasedWidget::ScaleChangedEvent(scale); + super::ScaleChangedEvent(scale); foreach (TimelineAndTrackView* view, views_) { view->view()->SetScale(scale); diff --git a/app/widget/timeruler/seekablewidget.cpp b/app/widget/timeruler/seekablewidget.cpp index 83ceba890..719dbd367 100644 --- a/app/widget/timeruler/seekablewidget.cpp +++ b/app/widget/timeruler/seekablewidget.cpp @@ -180,9 +180,11 @@ void SeekableWidget::SeekToScreenPoint(int screen) } } - SetTime(timestamp); + if (timestamp != GetTime()) { + SetTime(timestamp); - emit TimeChanged(timestamp); + emit TimeChanged(timestamp); + } } void SeekableWidget::DrawTimelinePoints(QPainter* p, int marker_bottom)