From a331104d4c42032bb1f0264c64f63dc820f65b72 Mon Sep 17 00:00:00 2001 From: Thomas Wilshaw Date: Sat, 23 Oct 2021 19:45:17 +0100 Subject: [PATCH] Draw clip markers on timeline --- .../timelinewidget/view/timelineview.cpp | 58 +++++++++++++++++++ app/widget/timelinewidget/view/timelineview.h | 2 + 2 files changed, 60 insertions(+) diff --git a/app/widget/timelinewidget/view/timelineview.cpp b/app/widget/timelinewidget/view/timelineview.cpp index 97424c59a..cd2572095 100644 --- a/app/widget/timelinewidget/view/timelineview.cpp +++ b/app/widget/timelinewidget/view/timelineview.cpp @@ -512,6 +512,25 @@ void TimelineView::DrawBlock(QPainter *painter, bool foreground, Block *block, q } } } + + // Draw markers + if (clip->connected_viewer() && !clip->connected_viewer()->GetLength().isNull()) { + if (clip->connected_viewer()->GetTimelinePoints()->markers()->list().size() > 0) { + QList marker_list = clip->connected_viewer()->GetTimelinePoints()->markers()->list(); + + QFontMetrics fm = fontMetrics(); + int marker_width = QtUtils::QFontMetricsWidth(fm, "H"); + + if (marker_list.length() * marker_width < block_right - block_left) { + foreach (TimelineMarker *marker, marker_list) { + if (marker->time().in() >= clip->media_in() && marker->time().out() <= clip->media_in() + clip->length()) { + DrawClipMarker(painter, TimeToScene(clip->in() - clip->media_in() + marker->time().in()), + block_top + block_height, marker->color(), marker->name()); + } + } + } + } + } } // For transitions, show lines representing a transition @@ -581,6 +600,45 @@ void TimelineView::DrawZebraStripes(QPainter *painter, const QRectF &r) painter->setClipping(false); } +void TimelineView::DrawClipMarker(QPainter* painter, double marker_x, qreal marker_y, int marker_color, QString name) +{ + QFontMetrics fm = fontMetrics(); + + int marker_height = fm.height(); + int marker_width = QtUtils::QFontMetricsWidth(fm, "H"); + + int y = marker_y - 1; + + int half_width = marker_width / 2; + + int x = marker_x + half_width; + + painter->setPen(Qt::black); + + painter->setBrush(ColorCoding::GetColor(marker_color).toQColor()); + + painter->setRenderHint(QPainter::Antialiasing); + + int half_marker_height = marker_height / 3; + + qDebug() << x << y; + + QPoint points[] = { + QPoint(x, y), + QPoint(x - half_width, y - half_marker_height), + QPoint(x - half_width, y - marker_height), + QPoint(x + 1 + half_width, y - marker_height), + QPoint(x + 1 + half_width, y - half_marker_height), + QPoint(x + 1, y), + }; + + painter->drawPolygon(points, 6); + + if (!name.isEmpty()) { + painter->drawText(x + marker_width, y - half_marker_height, name); + } +} + int TimelineView::GetHeightOfAllTracks() const { if (connected_track_list_) { diff --git a/app/widget/timelinewidget/view/timelineview.h b/app/widget/timelinewidget/view/timelineview.h index 878efca76..1c17dabce 100644 --- a/app/widget/timelinewidget/view/timelineview.h +++ b/app/widget/timelinewidget/view/timelineview.h @@ -132,6 +132,8 @@ private: void DrawZebraStripes(QPainter *painter, const QRectF &r); + void DrawClipMarker(QPainter* painter, double narker_x, qreal marker_y, int marker_color, QString name = QString()); + int GetHeightOfAllTracks() const; void UpdatePlayheadRect();