]> git.sesse.net Git - nageru/blobdiff - mainwindow.cpp
Make it possible to set width/height on the command line, instead of compiling it...
[nageru] / mainwindow.cpp
index eb78d0e545dc73c817c50d8bc762bb579ceee82a..a99d2ae04fbb0d809f989e9fc598236d687d1b84 100644 (file)
@@ -1,42 +1,70 @@
 #include "mainwindow.h"
 
-#include <math.h>
-#include <stdio.h>
+#include <assert.h>
 #include <signal.h>
-#include <algorithm>
-#include <chrono>
-#include <string>
-#include <vector>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <QAbstractButton>
+#include <QAbstractSlider>
+#include <QAction>
+#include <QActionGroup>
+#include <QApplication>
 #include <QBoxLayout>
+#include <QCheckBox>
+#include <QDial>
+#include <QDialog>
+#include <QEvent>
+#include <QFlags>
+#include <QFrame>
+#include <QImage>
 #include <QInputDialog>
 #include <QKeySequence>
 #include <QLabel>
+#include <QLayoutItem>
+#include <QMenuBar>
 #include <QMessageBox>
-#include <QMetaType>
+#include <QMouseEvent>
+#include <QObject>
 #include <QPushButton>
-#include <QResizeEvent>
+#include <QRect>
+#include <QRgb>
 #include <QShortcut>
-#include <QSize>
-#include <QString>
+#include <QStackedWidget>
+#include <QToolButton>
+#include <QWidget>
+#include <algorithm>
+#include <chrono>
+#include <cmath>
+#include <functional>
+#include <limits>
+#include <memory>
+#include <ratio>
+#include <string>
+#include <vector>
 
 #include "aboutdialog.h"
+#include "alsa_pool.h"
+#include "clickable_label.h"
+#include "correlation_meter.h"
 #include "disk_space_estimator.h"
+#include "ellipsis_label.h"
 #include "flags.h"
 #include "glwidget.h"
+#include "input_mapping.h"
 #include "input_mapping_dialog.h"
 #include "lrameter.h"
 #include "midi_mapping.pb.h"
 #include "midi_mapping_dialog.h"
 #include "mixer.h"
+#include "nonlinear_fader.h"
 #include "post_to_main_thread.h"
-#include "ui_audio_miniview.h"
 #include "ui_audio_expanded_view.h"
+#include "ui_audio_miniview.h"
 #include "ui_display.h"
 #include "ui_mainwindow.h"
 #include "vumeter.h"
 
-class QResizeEvent;
-
 using namespace std;
 using namespace std::chrono;
 using namespace std::placeholders;
@@ -221,7 +249,8 @@ MainWindow::MainWindow()
                }
                midi_mapper.set_midi_mapping(midi_mapping);
        }
-       midi_mapper.start_thread();
+       midi_mapper.refresh_highlights();
+       midi_mapper.refresh_lights();
 }
 
 void MainWindow::resizeEvent(QResizeEvent* event)
@@ -336,6 +365,7 @@ void MainWindow::mixer_created(Mixer *mixer)
 
        midi_mapper.refresh_highlights();
        midi_mapper.refresh_lights();
+       midi_mapper.start_thread();
 
        struct sigaction act;
        memset(&act, 0, sizeof(act));
@@ -499,13 +529,6 @@ void MainWindow::setup_audio_expanded_view()
                                global_audio_mixer->reset_peak(bus_index);
                                midi_mapper.refresh_lights();
                        });
-
-               // Set up the compression attenuation meter.
-               VUMeter *reduction_meter = ui_audio_expanded_view->reduction_meter;
-               reduction_meter->set_min_level(0.0f);
-               reduction_meter->set_max_level(10.0f);
-               reduction_meter->set_ref_level(0.0f);
-               reduction_meter->set_flip(true);
        }
 
        update_cutoff_labels(global_audio_mixer->get_locut_cutoff());
@@ -787,7 +810,7 @@ void MainWindow::audio_level_callback(float level_lufs, float peak_db, vector<Au
                                        level.current_level_dbfs[0], level.current_level_dbfs[1]);
                                view->peak_meter->set_peak(
                                        level.peak_level_dbfs[0], level.peak_level_dbfs[1]);
-                               view->reduction_meter->set_level(level.compressor_attenuation_db);
+                               view->reduction_meter->set_reduction_db(level.compressor_attenuation_db);
                                view->gainstaging_knob->blockSignals(true);
                                view->gainstaging_knob->setValue(lrintf(level.gain_staging_db * 10.0f));
                                view->gainstaging_knob->blockSignals(false);
@@ -832,9 +855,9 @@ void MainWindow::relayout()
        double remaining_height = height;
 
        // Allocate the height; the most important part is to keep the main displays
-       // at 16:9 if at all possible.
+       // at the right aspect if at all possible.
        double me_width = ui->me_preview->width();
-       double me_height = me_width * 9.0 / 16.0 + ui->label_preview->height() + ui->preview_vertical_layout->spacing();
+       double me_height = me_width * double(global_flags.height) / double(global_flags.width) + ui->label_preview->height() + ui->preview_vertical_layout->spacing();
 
        // TODO: Scale the widths when we need to do this.
        if (me_height / double(height) > 0.8) {
@@ -854,7 +877,7 @@ void MainWindow::relayout()
        double preview_label_height = previews[0]->title_bar->geometry().height() +
                previews[0]->main_vertical_layout->spacing();
        int preview_total_width = ui->preview_displays->geometry().width() - (previews.size() - 1) * ui->preview_displays->spacing();
-       double preview_height = min(remaining_height - preview_label_height, (preview_total_width / double(previews.size())) * 9.0 / 16.0);
+       double preview_height = min(remaining_height - preview_label_height, (preview_total_width / double(previews.size())) * double(global_flags.height) / double(global_flags.width));
        remaining_height -= preview_height + preview_label_height + ui->vertical_layout->spacing();
 
        ui->vertical_layout->setStretch(0, lrintf(me_height));
@@ -868,7 +891,7 @@ void MainWindow::relayout()
        ui->compact_audio_layout->setStretch(2, lrintf(preview_height + preview_label_height));
 
        // Set the widths for the previews.
-       double preview_width = preview_height * 16.0 / 9.0;
+       double preview_width = preview_height * double(global_flags.width) / double(global_flags.height);
        for (unsigned i = 0; i < previews.size(); ++i) {
                ui->preview_displays->setStretch(i, lrintf(preview_width));
        }
@@ -1267,6 +1290,9 @@ void MainWindow::set_white_balance(int channel_number, int x, int y)
 void MainWindow::audio_state_changed()
 {
        post_to_main_thread([this]{
+               if (global_audio_mixer->get_mapping_mode() == AudioMixer::MappingMode::SIMPLE) {
+                       return;
+               }
                InputMapping mapping = global_audio_mixer->get_input_mapping();
                for (unsigned bus_index = 0; bus_index < mapping.buses.size(); ++bus_index) {
                        const InputMapping::Bus &bus = mapping.buses[bus_index];