diff --git a/app/widget/timelinewidget/view/timelineview.cpp b/app/widget/timelinewidget/view/timelineview.cpp index 415427334..97424c59a 100644 --- a/app/widget/timelinewidget/view/timelineview.cpp +++ b/app/widget/timelinewidget/view/timelineview.cpp @@ -485,14 +485,33 @@ void TimelineView::DrawBlock(QPainter *painter, bool foreground, Block *block, q painter->setBrush(block->is_enabled() ? block->brush(block_top, block_top + block_height) : Qt::gray); painter->drawRect(r); - // Draw waveform - if (show_waveforms_) { - if (ClipBlock *clip = dynamic_cast(block)) { + if (ClipBlock *clip = dynamic_cast(block)) { + // Draw waveform + if (show_waveforms_) { QRect waveform_rect = r.adjusted(0, text_total_height, 0, 0).toRect(); painter->setPen(shadow_color); AudioVisualWaveform::DrawWaveform(painter, waveform_rect, this->GetScale(), clip->waveform(), SceneToTime(block_left - block_in, GetScale(), connected_track_list_->parent()->GetAudioParams().sample_rate_as_time_base())); } + + // Draw zebra stripes + if (clip->connected_viewer() && !clip->connected_viewer()->GetLength().isNull()) { + if (clip->media_in() < 0) { + // Draw stripes for sections of clip < 0 + qreal zebra_right = TimeToScene(-clip->media_in()); + if (zebra_right > GetTimelineLeftBound()) { + DrawZebraStripes(painter, QRectF(block_left, block_top, zebra_right, block_height)); + } + } + + if (clip->length() + clip->media_in() > clip->connected_viewer()->GetLength()) { + // Draw stripes for sections for clip > clip length + qreal zebra_left = TimeToScene(clip->out() - (clip->media_in() + clip->length() - clip->connected_viewer()->GetLength())); + if (zebra_left < GetTimelineRightBound()) { + DrawZebraStripes(painter, QRectF(zebra_left, block_top, block_right - zebra_left, block_height)); + } + } + } } // For transitions, show lines representing a transition @@ -540,6 +559,28 @@ void TimelineView::DrawBlock(QPainter *painter, bool foreground, Block *block, q } } +void TimelineView::DrawZebraStripes(QPainter *painter, const QRectF &r) +{ + int zebra_interval = fontMetrics().height(); + + painter->setPen(QPen(QColor(0, 0, 0, 128), zebra_interval/4)); + painter->setBrush(Qt::NoBrush); + + QVector lines; + lines.reserve(qCeil(r.width() / zebra_interval)); + + qreal left = r.left() - r.height(); + qreal right = r.right() + r.height(); + + for (qreal i=left; isetClipRect(r); + painter->drawLines(lines); + painter->setClipping(false); +} + 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 7770f8418..878efca76 100644 --- a/app/widget/timelinewidget/view/timelineview.h +++ b/app/widget/timelinewidget/view/timelineview.h @@ -130,6 +130,8 @@ private: DrawBlock(painter, foreground, block, top, height, block->in(), block->out()); } + void DrawZebraStripes(QPainter *painter, const QRectF &r); + int GetHeightOfAllTracks() const; void UpdatePlayheadRect();