From 3ff59544b246839cd0e942646b03bb4720254d43 Mon Sep 17 00:00:00 2001 From: Thomas Wilshaw Date: Fri, 13 Aug 2021 23:40:33 +0100 Subject: [PATCH] Position markers correctly and update with scroll --- app/widget/timeruler/seekablewidget.cpp | 26 +++++++++++++++++++++++-- app/widget/timeruler/seekablewidget.h | 6 ++++++ 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/app/widget/timeruler/seekablewidget.cpp b/app/widget/timeruler/seekablewidget.cpp index 7e9b7ff36..33930fb82 100644 --- a/app/widget/timeruler/seekablewidget.cpp +++ b/app/widget/timeruler/seekablewidget.cpp @@ -67,7 +67,7 @@ void SeekableWidget::ConnectTimelinePoints(TimelinePoints *points) connect(timeline_points_->markers(), &TimelineMarkerList::MarkerAdded, this, static_cast(&SeekableWidget::update)); connect(timeline_points_->markers(), &TimelineMarkerList::MarkerRemoved, this, static_cast(&SeekableWidget::update)); - connect(timeline_points_->markers(), &TimelineMarkerList::MarkerAdded, this, static_cast(&SeekableWidget::UpdateMarkers)); + connect(timeline_points_->markers(), &TimelineMarkerList::MarkerAdded, this, &SeekableWidget::addMarker); } update(); @@ -131,6 +131,8 @@ void SeekableWidget::SetScroll(int s) scroll_ = s; update(); + + updateMarkerPositions(); } void SeekableWidget::UpdateMarkers() @@ -150,6 +152,26 @@ void SeekableWidget::UpdateMarkers() } } +void SeekableWidget::addMarker(TimelineMarker* marker) +{ + if (!marker_map_.contains(marker)) { + Marker *marker_widget = new Marker(this); + marker_map_.insert(marker, marker_widget); + + //marker_widget->setGeometry(TimeToScreen(marker->time().in()), 20, 20, 20); + marker_widget->move(TimeToScreen(marker->time().in()), 20); + marker_widget->show(); + } +} + +void SeekableWidget::updateMarkerPositions() +{ + foreach (TimelineMarker *marker, marker_map_.keys()) { + Marker *m = marker_map_.value(marker); + m->move(TimeToScreen(marker->time().in()), 20); + } +} + int SeekableWidget::TimeToScreen(const rational &time) const { return qFloor(TimeToScene(time)) - scroll_; @@ -224,7 +246,7 @@ void SeekableWidget::DrawTimelinePoints(QPainter* p, int marker_bottom) if (marker->time().length() == 0) { // Single point in time marker - DrawPlayhead(p, marker_left, marker_bottom); + //DrawPlayhead(p, marker_left, marker_bottom); } else { // Marker range int rect_left = qMax(0, marker_left); diff --git a/app/widget/timeruler/seekablewidget.h b/app/widget/timeruler/seekablewidget.h index 74f930d6d..6a2d84171 100644 --- a/app/widget/timeruler/seekablewidget.h +++ b/app/widget/timeruler/seekablewidget.h @@ -60,6 +60,10 @@ public slots: void UpdateMarkers(); + void addMarker(TimelineMarker* marker); + + void updateMarkerPositions(); + protected: void SeekToScreenPoint(int screen); @@ -111,6 +115,8 @@ private: QVector marker_widgets; + QMap marker_map_; + }; }