From 587e82e7a650ea199923c2158bcb7ac7684a7237 Mon Sep 17 00:00:00 2001 From: James H Ball Date: Wed, 1 Jan 2025 16:38:58 +0000 Subject: [PATCH] Put settings windows always on top and scrollable if they are not sized correctly --- Source/CommonPluginEditor.cpp | 6 ++---- Source/CommonPluginEditor.h | 4 ++-- Source/visualiser/VisualiserSettings.h | 14 +++++++++++++- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/Source/CommonPluginEditor.cpp b/Source/CommonPluginEditor.cpp index 6eaa5d8..8d9d890 100644 --- a/Source/CommonPluginEditor.cpp +++ b/Source/CommonPluginEditor.cpp @@ -47,8 +47,7 @@ CommonPluginEditor::CommonPluginEditor(CommonAudioProcessor& p, juce::String app }; visualiserSettings.setLookAndFeel(&getLookAndFeel()); - visualiserSettings.setSize(550, 450); - visualiserSettingsWindow.setContentNonOwned(&visualiserSettings, true); + visualiserSettings.setSize(550, 600); visualiserSettingsWindow.centreWithSize(550, 450); #if JUCE_WINDOWS // if not standalone, use native title bar for compatibility with DAWs @@ -58,8 +57,7 @@ CommonPluginEditor::CommonPluginEditor(CommonAudioProcessor& p, juce::String app #endif recordingSettings.setLookAndFeel(&getLookAndFeel()); - recordingSettings.setSize(300, 200); - recordingSettingsWindow.setContentNonOwned(&recordingSettings, true); + recordingSettings.setSize(300, 300); recordingSettingsWindow.centreWithSize(300, 200); #if JUCE_WINDOWS // if not standalone, use native title bar for compatibility with DAWs diff --git a/Source/CommonPluginEditor.h b/Source/CommonPluginEditor.h index a85183a..fc67eb5 100644 --- a/Source/CommonPluginEditor.h +++ b/Source/CommonPluginEditor.h @@ -45,9 +45,9 @@ public: juce::String projectFileType; VisualiserSettings visualiserSettings = VisualiserSettings(audioProcessor.visualiserParameters, 3); - SettingsWindow visualiserSettingsWindow = SettingsWindow("Visualiser Settings"); + SettingsWindow visualiserSettingsWindow = SettingsWindow("Visualiser Settings", visualiserSettings); RecordingSettings recordingSettings = RecordingSettings(audioProcessor.recordingParameters); - SettingsWindow recordingSettingsWindow = SettingsWindow("Recording Settings"); + SettingsWindow recordingSettingsWindow = SettingsWindow("Recording Settings", recordingSettings); VisualiserComponent visualiser{audioProcessor.lastOpenedDirectory, applicationFolder.getChildFile(ffmpegFileName), audioProcessor.haltRecording, audioProcessor.threadManager, visualiserSettings, audioProcessor.recordingParameters, nullptr, appName == "sosci"}; std::unique_ptr chooser; diff --git a/Source/visualiser/VisualiserSettings.h b/Source/visualiser/VisualiserSettings.h index 9a5096e..8ebb6e5 100644 --- a/Source/visualiser/VisualiserSettings.h +++ b/Source/visualiser/VisualiserSettings.h @@ -253,11 +253,23 @@ private: class SettingsWindow : public juce::DocumentWindow { public: - SettingsWindow(juce::String name) : juce::DocumentWindow(name, Colours::darker, juce::DocumentWindow::TitleBarButtons::closeButton) { + SettingsWindow(juce::String name, juce::Component& component) : juce::DocumentWindow(name, Colours::darker, juce::DocumentWindow::TitleBarButtons::closeButton), component(component) { + juce::Component::addAndMakeVisible(viewport); setResizable(false, false); + viewport.setViewedComponent(&component, false); + viewport.setScrollBarsShown(false, false, true, false); + setAlwaysOnTop(true); } void closeButtonPressed() override { setVisible(false); } + + void resized() override { + viewport.setBounds(getLocalBounds()); + } + +private: + juce::Viewport viewport; + juce::Component& component; };