Position markers correctly and update with scroll
This commit is contained in:
@@ -67,7 +67,7 @@ void SeekableWidget::ConnectTimelinePoints(TimelinePoints *points)
|
||||
connect(timeline_points_->markers(), &TimelineMarkerList::MarkerAdded, this, static_cast<void (SeekableWidget::*)()>(&SeekableWidget::update));
|
||||
connect(timeline_points_->markers(), &TimelineMarkerList::MarkerRemoved, this, static_cast<void (SeekableWidget::*)()>(&SeekableWidget::update));
|
||||
|
||||
connect(timeline_points_->markers(), &TimelineMarkerList::MarkerAdded, this, static_cast<void (SeekableWidget::*)()>(&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);
|
||||
|
||||
@@ -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*> marker_widgets;
|
||||
|
||||
QMap<TimelineMarker*, Marker*> marker_map_;
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user