From a92c8452f398f95540a9c740e34267279fd00bd5 Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Sat, 29 Sep 2018 22:52:20 +0200 Subject: [PATCH] Make it possible to scrub pts_in on a clip even if pts_out is not set. --- mainwindow.cpp | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/mainwindow.cpp b/mainwindow.cpp index fd94e89..0d9e80a 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -321,6 +321,17 @@ void MainWindow::relayout() ui->preview_display->setMinimumWidth(ui->preview_display->height() * 16 / 9); } +void set_pts_in(int64_t pts, int64_t current_pts, ClipProxy &clip) +{ + pts = std::max(pts, 0); + if (clip->pts_out == -1) { + pts = std::min(pts, current_pts); + } else { + pts = std::min(pts, clip->pts_out); + } + clip->pts_in = pts; +} + bool MainWindow::eventFilter(QObject *watched, QEvent *event) { constexpr int dead_zone_pixels = 3; // To avoid that simple clicks get misinterpreted. @@ -398,9 +409,7 @@ bool MainWindow::eventFilter(QObject *watched, QEvent *event) if (scrub_type == SCRUBBING_CLIP_LIST) { ClipProxy clip = cliplist_clips->mutable_clip(scrub_row); if (scrub_column == int(ClipList::Column::IN)) { - pts = std::max(pts, 0); - pts = std::min(pts, clip->pts_out); - clip->pts_in = pts; + set_pts_in(pts, current_pts, clip); preview_single_frame(pts, stream_idx, FIRST_AT_OR_AFTER); } else { pts = std::max(pts, clip->pts_in); @@ -411,9 +420,7 @@ bool MainWindow::eventFilter(QObject *watched, QEvent *event) } else { ClipProxy clip = playlist_clips->mutable_clip(scrub_row); if (scrub_column == int(PlayList::Column::IN)) { - pts = std::max(pts, 0); - pts = std::min(pts, clip->pts_out); - clip->pts_in = pts; + set_pts_in(pts, current_pts, clip); preview_single_frame(pts, clip->stream_idx, FIRST_AT_OR_AFTER); } else { pts = std::max(pts, clip->pts_in); @@ -460,9 +467,7 @@ bool MainWindow::eventFilter(QObject *watched, QEvent *event) } if (column == in_column) { int64_t pts = clip->pts_in + wheel->angleDelta().y() * wheel_sensitivity; - pts = std::max(pts, 0); - pts = std::min(pts, clip->pts_out); - clip->pts_in = pts; + set_pts_in(pts, current_pts, clip); preview_single_frame(pts, stream_idx, FIRST_AT_OR_AFTER); } else if (column == out_column) { int64_t pts = clip->pts_out + wheel->angleDelta().y() * wheel_sensitivity; -- 2.39.2