Move visualiser settings to right always, fix scrolling issues

pre-release-3
James H Ball 2025-01-06 11:17:42 +00:00
rodzic 3340d9dd45
commit ed027bbfc4
11 zmienionych plików z 78 dodań i 32 usunięć

Wyświetl plik

@ -38,26 +38,12 @@ CommonPluginEditor::CommonPluginEditor(CommonAudioProcessor& p, juce::String app
addAndMakeVisible(visualiser);
visualiser.openSettings = [this] {
openVisualiserSettings();
};
visualiser.closeSettings = [this] {
visualiserSettingsWindow.setVisible(false);
};
visualiserSettings.setLookAndFeel(&getLookAndFeel());
visualiserSettings.setSize(550, 550);
visualiserSettingsWindow.centreWithSize(550, 400);
#if JUCE_WINDOWS
// if not standalone, use native title bar for compatibility with DAWs
visualiserSettingsWindow.setUsingNativeTitleBar(processor.wrapperType == juce::AudioProcessor::WrapperType::wrapperType_Standalone);
#elif JUCE_MAC
visualiserSettingsWindow.setUsingNativeTitleBar(true);
#endif
visualiserSettings.setColour(juce::ResizableWindow::backgroundColourId, Colours::dark);
recordingSettings.setLookAndFeel(&getLookAndFeel());
recordingSettings.setSize(300, 300);
recordingSettings.setSize(300, 200);
recordingSettingsWindow.centreWithSize(300, 200);
#if JUCE_WINDOWS
// if not standalone, use native title bar for compatibility with DAWs
@ -163,7 +149,6 @@ void CommonPluginEditor::openAudioSettings() {
void CommonPluginEditor::openRecordingSettings() {
recordingSettingsWindow.setVisible(true);
recordingSettingsWindow.toFront(true);
}
void CommonPluginEditor::resetToDefault() {
@ -172,8 +157,3 @@ void CommonPluginEditor::resetToDefault() {
window->resetToDefaultState();
}
}
void CommonPluginEditor::openVisualiserSettings() {
visualiserSettingsWindow.setVisible(true);
visualiserSettingsWindow.toFront(true);
}

Wyświetl plik

@ -22,7 +22,6 @@ public:
void openAudioSettings();
void openRecordingSettings();
void resetToDefault();
void openVisualiserSettings();
private:
CommonAudioProcessor& audioProcessor;
@ -50,7 +49,6 @@ public:
#endif
VisualiserSettings visualiserSettings = VisualiserSettings(audioProcessor.visualiserParameters, 3);
SettingsWindow visualiserSettingsWindow = SettingsWindow("Visualiser Settings", visualiserSettings);
RecordingSettings recordingSettings = RecordingSettings(audioProcessor.recordingParameters);
SettingsWindow recordingSettingsWindow = SettingsWindow("Recording Settings", recordingSettings);
VisualiserComponent visualiser{

Wyświetl plik

@ -71,6 +71,22 @@ OscirenderAudioProcessorEditor::OscirenderAudioProcessorEditor(OscirenderAudioPr
addAndMakeVisible(luaResizerBar);
addAndMakeVisible(visualiser);
visualiser.openSettings = [this] {
openVisualiserSettings();
};
visualiser.closeSettings = [this] {
visualiserSettingsWindow.setVisible(false);
};
visualiserSettingsWindow.centreWithSize(550, 400);
#if JUCE_WINDOWS
// if not standalone, use native title bar for compatibility with DAWs
visualiserSettingsWindow.setUsingNativeTitleBar(processor.wrapperType == juce::AudioProcessor::WrapperType::wrapperType_Standalone);
#elif JUCE_MAC
visualiserSettingsWindow.setUsingNativeTitleBar(true);
#endif
initialiseMenuBar(model);
}
@ -427,3 +443,8 @@ void OscirenderAudioProcessorEditor::mouseMove(const juce::MouseEvent& event) {
setMouseCursor(juce::MouseCursor::NormalCursor);
}
}
void OscirenderAudioProcessorEditor::openVisualiserSettings() {
visualiserSettingsWindow.setVisible(true);
visualiserSettingsWindow.toFront(true);
}

Wyświetl plik

@ -27,6 +27,7 @@ public:
void handleAsyncUpdate() override;
void changeListenerCallback(juce::ChangeBroadcaster* source) override;
void toggleLayout(juce::StretchableLayoutManager& layout, double prefSize);
void openVisualiserSettings();
void editCustomFunction(bool enabled);
@ -48,6 +49,8 @@ public:
juce::ComponentAnimator codeEditorAnimator;
LuaComponent lua{audioProcessor, *this};
SettingsWindow visualiserSettingsWindow = SettingsWindow("Visualiser Settings", visualiserSettings);
LuaConsole console;
std::vector<std::shared_ptr<juce::CodeDocument>> codeDocuments;

Wyświetl plik

@ -2,9 +2,11 @@
#include "SosciPluginEditor.h"
#include <juce_audio_plugin_client/Standalone/juce_StandaloneFilterWindow.h>
SosciPluginEditor::SosciPluginEditor(SosciAudioProcessor& p) : CommonPluginEditor(p, "sosci", "sosci", 700, 750), audioProcessor(p) {
SosciPluginEditor::SosciPluginEditor(SosciAudioProcessor& p) : CommonPluginEditor(p, "sosci", "sosci", 1180, 750), audioProcessor(p) {
initialiseMenuBar(model);
addAndMakeVisible(volume);
addAndMakeVisible(visualiserSettingsWrapper);
resized();
}
@ -24,5 +26,9 @@ void SosciPluginEditor::resized() {
auto volumeArea = area.removeFromLeft(30);
volume.setBounds(volumeArea.withSizeKeepingCentre(volumeArea.getWidth(), juce::jmin(volumeArea.getHeight(), 300)));
auto settingsArea = area.removeFromRight(juce::jmax(juce::jmin(0.4 * getWidth(), 550.0), 350.0));
visualiserSettings.setSize(settingsArea.getWidth(), 550);
visualiserSettingsWrapper.setBounds(settingsArea);
visualiser.setBounds(area);
}

Wyświetl plik

@ -19,6 +19,8 @@ public:
private:
SosciAudioProcessor& audioProcessor;
ScrollableComponent visualiserSettingsWrapper = ScrollableComponent(visualiserSettings);
SosciMainMenuBarModel model{*this, audioProcessor};

Wyświetl plik

@ -26,7 +26,7 @@ private:
public:
EffectParameter qualityParameter = EffectParameter(
"Quality",
"Video Quality",
"Controls the quality of the recording video. 0 is the worst possible quality, and 1 is lossless.",
"brightness",
VERSION_HINT, 0.7, 0.0, 1.0

Wyświetl plik

@ -101,7 +101,9 @@ VisualiserComponent::VisualiserComponent(
};
settingsButton.onClick = [this]() {
openSettings();
if (openSettings != nullptr) {
openSettings();
}
};
popOutButton.onClick = [this]() {
@ -411,7 +413,12 @@ void VisualiserComponent::resized() {
if (child == nullptr && parent == nullptr && !visualiserOnly) {
popOutButton.setBounds(buttons.removeFromRight(30));
}
settingsButton.setBounds(buttons.removeFromRight(30));
if (openSettings != nullptr) {
settingsButton.setVisible(true);
settingsButton.setBounds(buttons.removeFromRight(30));
} else {
settingsButton.setVisible(false);
}
#if SOSCI_FEATURES
sharedTextureButton.setBounds(buttons.removeFromRight(30));
#endif

Wyświetl plik

@ -56,6 +56,10 @@ VisualiserSettings::VisualiserSettings(VisualiserParameters& p, int numChannels)
VisualiserSettings::~VisualiserSettings() {}
void VisualiserSettings::paint(juce::Graphics& g) {
g.fillAll(Colours::darker);
}
void VisualiserSettings::resized() {
auto area = getLocalBounds().reduced(20, 0).withTrimmedBottom(20);
double rowHeight = 30;

Wyświetl plik

@ -179,7 +179,7 @@ public:
"Sweep (ms)",
"The number of milliseconds it takes for the oscilloscope to sweep from left to right.",
"sweepMs",
VERSION_HINT, 30.0, 0.0, 1000.0
VERSION_HINT, 10.0, 0.0, 1000.0
)
);
std::shared_ptr<Effect> triggerValueEffect = std::make_shared<Effect>(
@ -201,6 +201,7 @@ public:
VisualiserSettings(VisualiserParameters&, int numChannels = 2);
~VisualiserSettings();
void paint(juce::Graphics& g) override;
void resized() override;
double getIntensity() {
@ -285,6 +286,27 @@ private:
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(VisualiserSettings)
};
class ScrollableComponent : public juce::Component {
public:
ScrollableComponent(juce::Component& component) : component(component) {
addAndMakeVisible(viewport);
viewport.setViewedComponent(&component, false);
viewport.setScrollBarsShown(true, false, true, false);
}
void paint(juce::Graphics& g) override {
g.fillAll(Colours::darker);
}
void resized() override {
viewport.setBounds(getLocalBounds());
}
private:
juce::Viewport viewport;
juce::Component& component;
};
class SettingsWindow : public juce::DocumentWindow {
public:
SettingsWindow(juce::String name, juce::Component& component) : juce::DocumentWindow(name, Colours::darker, juce::DocumentWindow::TitleBarButtons::closeButton), component(component) {
@ -294,15 +316,15 @@ public:
viewport.setScrollBarsShown(true, false, true, false);
setAlwaysOnTop(true);
}
void closeButtonPressed() override {
setVisible(false);
}
void resized() override {
viewport.setBounds(getLocalBounds());
}
private:
juce::Viewport viewport;
juce::Component& component;

Wyświetl plik

@ -6,6 +6,9 @@ WavParser::WavParser(CommonAudioProcessor& p, std::unique_ptr<juce::InputStream>
juce::AudioFormatManager formatManager;
formatManager.registerBasicFormats();
juce::AudioFormatReader* reader = formatManager.createReaderFor(std::move(stream));
if (reader == nullptr) {
return;
}
auto* afSource = new juce::AudioFormatReaderSource(reader, true);
afSource->setLooping(true);
source = std::make_unique<juce::ResamplingAudioSource>(afSource, true);