]> git.sesse.net Git - nageru/blobdiff - mainwindow.cpp
Start of persistence work: Keep existing frames that are at frames/ at startup.
[nageru] / mainwindow.cpp
index 1b7a71f8dcef5207b515883da66bf21324ab6de8..0d9e80a4752a5d13cb882c7cdddf3a4e321ede55 100644 (file)
@@ -145,7 +145,10 @@ void MainWindow::queue_clicked()
        if (!selected->hasSelection()) {
                Clip clip = *cliplist_clips->back();
                clip.stream_idx = 0;
-               playlist_clips->add_clip(clip);
+               if (clip.pts_out != -1) {
+                       playlist_clips->add_clip(clip);
+                       playlist_selection_changed();
+               }
                return;
        }
 
@@ -158,8 +161,10 @@ void MainWindow::queue_clicked()
                clip.stream_idx = ui->preview_display->get_stream_idx();
        }
 
-       playlist_clips->add_clip(clip);
-       playlist_selection_changed();
+       if (clip.pts_out != -1) {
+               playlist_clips->add_clip(clip);
+               playlist_selection_changed();
+       }
 }
 
 void MainWindow::preview_clicked()
@@ -316,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<int64_t>(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.
@@ -393,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<int64_t>(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);
@@ -406,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<int64_t>(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);
@@ -455,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<int64_t>(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;