audiomonitor: update parameters immediately when panels are focused
This commit is contained in:
@@ -35,6 +35,11 @@ class AudioMonitorPanel : public PanelWidget
|
||||
public:
|
||||
AudioMonitorPanel(QWidget* parent = nullptr);
|
||||
|
||||
void SetParams(const AudioParams& params)
|
||||
{
|
||||
audio_monitor_->SetParams(params);
|
||||
}
|
||||
|
||||
private:
|
||||
virtual void Retranslate() override;
|
||||
|
||||
|
||||
@@ -58,6 +58,8 @@ void AudioMonitor::SetParams(const AudioParams ¶ms)
|
||||
|
||||
peaked_.resize(params_.channel_count());
|
||||
peaked_.fill(false);
|
||||
|
||||
update();
|
||||
}
|
||||
|
||||
void AudioMonitor::OutputDeviceSet(AudioPlaybackCache *cache, qint64 offset, int playback_speed)
|
||||
@@ -72,6 +74,11 @@ void AudioMonitor::OutputDeviceSet(AudioPlaybackCache *cache, qint64 offset, int
|
||||
return;
|
||||
}
|
||||
|
||||
if (offset > file_->size()) {
|
||||
Stop();
|
||||
return;
|
||||
}
|
||||
|
||||
file_->seek(offset);
|
||||
|
||||
playback_speed_ = playback_speed;
|
||||
@@ -86,6 +93,8 @@ void AudioMonitor::Stop()
|
||||
delete file_;
|
||||
file_ = nullptr;
|
||||
waveform_ = nullptr;
|
||||
|
||||
SetUpdateLoop(false);
|
||||
}
|
||||
|
||||
void AudioMonitor::OutputPushed(const QByteArray &d)
|
||||
@@ -103,6 +112,10 @@ void AudioMonitor::OutputAudioVisualWaveformSet(const AudioVisualWaveform *wavef
|
||||
{
|
||||
Stop();
|
||||
|
||||
if (start >= waveform->length()) {
|
||||
return;
|
||||
}
|
||||
|
||||
waveform_ = waveform;
|
||||
waveform_time_ = start;
|
||||
|
||||
@@ -240,8 +253,16 @@ void AudioMonitor::paintGL()
|
||||
|
||||
if (file_) {
|
||||
UpdateValuesFromFile(v, delta_time);
|
||||
|
||||
if (file_->atEnd()) {
|
||||
Stop();
|
||||
}
|
||||
} else if (waveform_) {
|
||||
UpdateValuesFromWaveform(v, delta_time);
|
||||
|
||||
if (waveform_time_ >= waveform_->length()) {
|
||||
Stop();
|
||||
}
|
||||
}
|
||||
|
||||
last_time_ = current_time;
|
||||
|
||||
@@ -194,6 +194,7 @@ TimelinePanel* MainWindow::OpenSequence(Sequence *sequence, bool enable_focus)
|
||||
|
||||
if (enable_focus) {
|
||||
TimelineFocused(sequence);
|
||||
UpdateAudioMonitorParams(sequence);
|
||||
}
|
||||
|
||||
return panel;
|
||||
@@ -689,17 +690,28 @@ void MainWindow::SaveCustomShortcuts()
|
||||
|
||||
}
|
||||
|
||||
void MainWindow::UpdateAudioMonitorParams(ViewerOutput *viewer)
|
||||
{
|
||||
audio_monitor_panel_->SetParams(viewer ? viewer->GetAudioParams() : AudioParams());
|
||||
}
|
||||
|
||||
void MainWindow::FocusedPanelChanged(PanelWidget *panel)
|
||||
{
|
||||
TimelinePanel* timeline = dynamic_cast<TimelinePanel*>(panel);
|
||||
// Update audio monitor panel
|
||||
TimeBasedPanel* tbp = dynamic_cast<TimeBasedPanel*>(panel);
|
||||
if (tbp) {
|
||||
UpdateAudioMonitorParams(tbp->GetConnectedViewer());
|
||||
}
|
||||
|
||||
// Signal timeline focus
|
||||
TimelinePanel* timeline = dynamic_cast<TimelinePanel*>(panel);
|
||||
if (timeline) {
|
||||
TimelineFocused(timeline->GetConnectedViewer());
|
||||
return;
|
||||
}
|
||||
|
||||
// Signal project panel focus
|
||||
ProjectPanel* project = dynamic_cast<ProjectPanel*>(panel);
|
||||
|
||||
if (project) {
|
||||
UpdateTitle();
|
||||
node_panel_->SetGraph(project->project());
|
||||
|
||||
@@ -140,6 +140,8 @@ private:
|
||||
|
||||
void SaveCustomShortcuts();
|
||||
|
||||
void UpdateAudioMonitorParams(ViewerOutput* viewer);
|
||||
|
||||
QByteArray premaximized_state_;
|
||||
|
||||
// Standard panels
|
||||
|
||||
Reference in New Issue
Block a user