From a313fb525c5df38534ed69cd9f7c8bf6ab9803c5 Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Mon, 28 Sep 2020 14:21:17 +1000 Subject: [PATCH] use QGraphicsView::FullViewportUpdate on TimelineViewBase Since this appears to be necessary for all derivatives anyway, we'll add this directly to the base class. --- app/widget/timelinewidget/view/timelineview.cpp | 1 - app/widget/timelinewidget/view/timelineviewbase.cpp | 13 +++++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/app/widget/timelinewidget/view/timelineview.cpp b/app/widget/timelinewidget/view/timelineview.cpp index 99fd892a0..4b60ec0b7 100644 --- a/app/widget/timelinewidget/view/timelineview.cpp +++ b/app/widget/timelinewidget/view/timelineview.cpp @@ -46,7 +46,6 @@ TimelineView::TimelineView(Qt::Alignment vertical_alignment, QWidget *parent) : setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn); setBackgroundRole(QPalette::Window); setContextMenuPolicy(Qt::CustomContextMenu); - setViewportUpdateMode(QGraphicsView::FullViewportUpdate); viewport()->setMouseTracking(true); } diff --git a/app/widget/timelinewidget/view/timelineviewbase.cpp b/app/widget/timelinewidget/view/timelineviewbase.cpp index 68acb08c7..b42978e26 100644 --- a/app/widget/timelinewidget/view/timelineviewbase.cpp +++ b/app/widget/timelinewidget/view/timelineviewbase.cpp @@ -44,16 +44,25 @@ TimelineViewBase::TimelineViewBase(QWidget *parent) : y_axis_enabled_(false), y_scale_(1.0) { + // Sets scene to our scene setScene(&scene_); - // Set default scale + // Set default scale (ensures non-zero scale from beginning) SetScale(1.0); + // Default to no default drag mode SetDefaultDragMode(NoDrag); - connect(&scene_, SIGNAL(changed(const QList&)), this, SLOT(UpdateSceneRect())); + // Signal to update bounding rect when the scene changes + connect(&scene_, &QGraphicsScene::changed, this, &TimelineViewBase::UpdateSceneRect); + // Always enforce maximum scale SetMaximumScale(kMaximumScale); + + // Workaround for Qt drawing issues with the default MinimalViewportUpdate. While this might be + // slower (Qt documentation says it may actually be faster in some situations), + // MinimalViewportUpdate causes all sorts of graphical crud building up in the scene + setViewportUpdateMode(QGraphicsView::FullViewportUpdate); } void TimelineViewBase::TimebaseChangedEvent(const rational &)