From 82df680c52b383b4373a8d56b1c13527a1a4bf2c Mon Sep 17 00:00:00 2001 From: Thomas Wilshaw Date: Mon, 25 Oct 2021 21:33:58 +0100 Subject: [PATCH] Only draw clip marker names if there is space --- .../timelinewidget/view/timelineview.cpp | 25 ++++++++++++++++--- app/widget/timelinewidget/view/timelineview.h | 2 +- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/app/widget/timelinewidget/view/timelineview.cpp b/app/widget/timelinewidget/view/timelineview.cpp index 4b4808a0a..e4b3b38e2 100644 --- a/app/widget/timelinewidget/view/timelineview.cpp +++ b/app/widget/timelinewidget/view/timelineview.cpp @@ -520,11 +520,28 @@ void TimelineView::DrawBlock(QPainter *painter, bool foreground, Block *block, q int marker_width = QtUtils::QFontMetricsWidth(fm, "H"); + + // Only draw markers if the block UI is large enough to draw all the markers if (marker_list.length() * marker_width < block_right - block_left) { - foreach (TimelineMarker *marker, marker_list) { + + QListIterator iterator(marker_list); + while(iterator.hasNext()) { + TimelineMarker *marker = iterator.next(); + // Make sure marker is within In/Out points of the clip if (marker->time().in() >= clip->media_in() && marker->time().out() <= clip->media_in() + clip->length()) { + // Only draw names that we have room for + bool draw_name = true; + if (!marker->name().isEmpty()) { + int length = fm.horizontalAdvance(marker->name()); + if (iterator.hasNext()) { + if (TimeToScene(iterator.peekNext()->time().in()) - TimeToScene(marker->time().out()) < + (double)length) { + draw_name = false; + } + } + } DrawClipMarker(painter, TimeToScene(clip->in() - clip->media_in() + marker->time().in()), - block_top + block_height, marker->color(), marker->name()); + block_top + block_height, marker->color(), draw_name, marker->name()); } } } @@ -599,7 +616,7 @@ 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) +void TimelineView::DrawClipMarker(QPainter* painter, double marker_x, qreal marker_y, int marker_color, bool draw_name, QString name) { QFontMetrics fm = fontMetrics(); @@ -633,7 +650,7 @@ void TimelineView::DrawClipMarker(QPainter* painter, double marker_x, qreal mark painter->drawPolygon(points, 6); - if (!name.isEmpty()) { + if (!name.isEmpty() && draw_name) { painter->drawText(x + marker_width, y - half_marker_height, name); } } diff --git a/app/widget/timelinewidget/view/timelineview.h b/app/widget/timelinewidget/view/timelineview.h index 1c17dabce..36a964ed5 100644 --- a/app/widget/timelinewidget/view/timelineview.h +++ b/app/widget/timelinewidget/view/timelineview.h @@ -132,7 +132,7 @@ private: void DrawZebraStripes(QPainter *painter, const QRectF &r); - void DrawClipMarker(QPainter* painter, double narker_x, qreal marker_y, int marker_color, QString name = QString()); + void DrawClipMarker(QPainter* painter, double narker_x, qreal marker_y, int marker_color, bool draw_name, QString name = QString()); int GetHeightOfAllTracks() const;