X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=futatabi%2Fmainwindow.cpp;h=77b1cfe448f9f4406b39c7c54c33203e1d24e677;hb=ac1f4741a43cd9ab6ff5ff5a6f6bd52f3995a121;hp=350b1b2966d5327b20f0980b21e3eda31de401d3;hpb=a6f3a2275ad116e6ab338e583ab8ef1b1141b468;p=nageru diff --git a/futatabi/mainwindow.cpp b/futatabi/mainwindow.cpp index 350b1b2..77b1cfe 100644 --- a/futatabi/mainwindow.cpp +++ b/futatabi/mainwindow.cpp @@ -181,6 +181,9 @@ MainWindow::MainWindow() connect(ui->stop_btn, &QPushButton::clicked, this, &MainWindow::stop_clicked); ui->stop_btn->setEnabled(false); + connect(ui->speed_slider, &QAbstractSlider::valueChanged, this, &MainWindow::speed_slider_changed); + connect(ui->speed_lock_btn, &QPushButton::clicked, this, &MainWindow::speed_lock_clicked); + connect(ui->playlist_duplicate_btn, &QPushButton::clicked, this, &MainWindow::playlist_duplicate); connect(ui->playlist_remove_btn, &QPushButton::clicked, this, &MainWindow::playlist_remove); @@ -624,6 +627,21 @@ void MainWindow::stop_clicked() ui->stop_btn->setEnabled(false); } +void MainWindow::speed_slider_changed(int percent) +{ + float speed = percent / 100.0f; + ui->speed_lock_btn->setText(QString::fromStdString(" " + to_string(percent) + "%")); + live_player->set_master_speed(speed); +} + +void MainWindow::speed_lock_clicked() +{ + // TODO: Make for a less abrupt transition if we're not already at 100%. + ui->speed_slider->setValue(100); // Also actually sets the master speed and updates the label. + ui->speed_slider->setEnabled(!ui->speed_lock_btn->isChecked()); + midi_mapper.set_locked(ui->speed_lock_btn->isChecked()); +} + void MainWindow::live_player_done() { playlist_selection_changed(); @@ -1191,6 +1209,14 @@ void MainWindow::play() }); } +void MainWindow::toggle_lock() +{ + post_to_main_thread([this] { + ui->speed_lock_btn->setChecked(!ui->speed_lock_btn->isChecked()); + speed_lock_clicked(); + }); +} + void MainWindow::jog(int delta) { post_to_main_thread([this, delta] { @@ -1225,6 +1251,25 @@ void MainWindow::switch_camera(unsigned camera_idx) }); } +void MainWindow::set_master_speed(float speed) +{ + speed = min(max(speed, 0.1f), 2.0f); + + post_to_main_thread([this, speed] { + if (ui->speed_lock_btn->isChecked()) { + return; + } + + int percent = lrintf(speed * 100.0f); + ui->speed_slider->blockSignals(true); + ui->speed_slider->setValue(percent); + ui->speed_slider->blockSignals(false); + ui->speed_lock_btn->setText(QString::fromStdString(" " + to_string(percent) + "%")); + + live_player->set_master_speed(speed); + }); +} + void MainWindow::cue_in() { post_to_main_thread([this] { cue_in_clicked(); });