Make visualiser settings resizable, allow drag and drop for files in osci-render

pull/281/head
James H Ball 2025-02-01 18:14:16 +00:00
rodzic 6ab6fd5e36
commit 146cd27a29
7 zmienionych plików z 62 dodań i 16 usunięć

Wyświetl plik

@ -95,22 +95,25 @@ bool CommonPluginEditor::keyPressed(const juce::KeyPress& key) {
return false;
}
void CommonPluginEditor::openProject(const juce::File& file) {
if (file != juce::File()) {
auto data = juce::MemoryBlock();
if (file.loadFileAsData(data)) {
audioProcessor.setStateInformation(data.getData(), data.getSize());
}
audioProcessor.currentProjectFile = file.getFullPathName();
audioProcessor.lastOpenedDirectory = file.getParentDirectory();
updateTitle();
}
}
void CommonPluginEditor::openProject() {
chooser = std::make_unique<juce::FileChooser>("Load " + appName + " Project", audioProcessor.lastOpenedDirectory, "*." + projectFileType);
auto flags = juce::FileBrowserComponent::openMode |
juce::FileBrowserComponent::canSelectFiles;
chooser->launchAsync(flags, [this](const juce::FileChooser& chooser) {
auto file = chooser.getResult();
if (file != juce::File()) {
auto data = juce::MemoryBlock();
if (file.loadFileAsData(data)) {
audioProcessor.setStateInformation(data.getData(), data.getSize());
}
audioProcessor.currentProjectFile = file.getFullPathName();
audioProcessor.lastOpenedDirectory = file.getParentDirectory();
updateTitle();
}
openProject(chooser.getResult());
});
}

Wyświetl plik

@ -15,6 +15,7 @@ public:
~CommonPluginEditor() override;
void initialiseMenuBar(juce::MenuBarModel& menuBarModel);
void openProject(const juce::File& file);
void openProject();
void saveProject();
void saveProjectAs();

Wyświetl plik

@ -17,9 +17,8 @@ MainComponent::MainComponent(OscirenderAudioProcessor& p, OscirenderAudioProcess
chooser->launchAsync(flags, [this](const juce::FileChooser& chooser) {
juce::SpinLock::ScopedLockType lock(audioProcessor.parsersLock);
bool fileAdded = false;
for (auto& url : chooser.getURLResults()) {
if (url.isLocalFile()) {
juce::File file = url.getLocalFile();
for (auto& file : chooser.getResults()) {
if (file != juce::File()) {
audioProcessor.lastOpenedDirectory = file.getParentDirectory();
audioProcessor.addFile(file);
pluginEditor.addCodeEditor(audioProcessor.getCurrentFileIndex());

Wyświetl plik

@ -79,7 +79,6 @@ OscirenderAudioProcessorEditor::OscirenderAudioProcessorEditor(OscirenderAudioPr
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);
@ -97,6 +96,43 @@ OscirenderAudioProcessorEditor::~OscirenderAudioProcessorEditor() {
audioProcessor.fileChangeBroadcaster.removeChangeListener(this);
}
bool OscirenderAudioProcessorEditor::isInterestedInFileDrag(const juce::StringArray& files) {
if (files.size() != 1) {
return false;
}
juce::File file(files[0]);
return
file.hasFileExtension("wav") ||
file.hasFileExtension("aiff") ||
file.hasFileExtension("osci") ||
file.hasFileExtension("txt") ||
file.hasFileExtension("lua") ||
file.hasFileExtension("svg") ||
file.hasFileExtension("obj") ||
file.hasFileExtension("gif") ||
file.hasFileExtension("png") ||
file.hasFileExtension("jpg") ||
file.hasFileExtension("gpla");
}
void OscirenderAudioProcessorEditor::filesDropped(const juce::StringArray& files, int x, int y) {
if (files.size() != 1) {
return;
}
juce::File file(files[0]);
if (file.hasFileExtension("osci")) {
openProject(file);
} else {
juce::SpinLock::ScopedLockType lock1(audioProcessor.parsersLock);
juce::SpinLock::ScopedLockType lock2(audioProcessor.effectsLock);
audioProcessor.addFile(file);
addCodeEditor(audioProcessor.getCurrentFileIndex());
fileUpdated(audioProcessor.getCurrentFileName());
}
}
bool OscirenderAudioProcessorEditor::isBinaryFile(juce::String name) {
return name.endsWith(".gpla") || name.endsWith(".gif") || name.endsWith(".png") || name.endsWith(".jpg") || name.endsWith(".jpeg") || name.endsWith(".wav") || name.endsWith(".aiff");
}

Wyświetl plik

@ -11,7 +11,7 @@
#include "visualiser/VisualiserSettings.h"
#include "CommonPluginEditor.h"
class OscirenderAudioProcessorEditor : public CommonPluginEditor, private juce::CodeDocument::Listener, public juce::AsyncUpdater, public juce::ChangeListener {
class OscirenderAudioProcessorEditor : public CommonPluginEditor, private juce::CodeDocument::Listener, public juce::AsyncUpdater, public juce::ChangeListener, public juce::FileDragAndDropTarget {
public:
OscirenderAudioProcessorEditor(OscirenderAudioProcessor&);
~OscirenderAudioProcessorEditor() override;
@ -28,6 +28,8 @@ public:
void changeListenerCallback(juce::ChangeBroadcaster* source) override;
void toggleLayout(juce::StretchableLayoutManager& layout, double prefSize);
void openVisualiserSettings();
bool isInterestedInFileDrag(const juce::StringArray& files) override;
void filesDropped(const juce::StringArray& files, int x, int y) override;
void editCustomFunction(bool enabled);

Wyświetl plik

@ -102,6 +102,9 @@ void ImageParser::resetPosition() {
float ImageParser::getPixelValue(int x, int y, bool invert) {
int index = (height - y - 1) * width + x;
if (index < 0 || index >= frames[frameIndex].size()) {
return 0;
}
float pixel = frames[frameIndex][index] / (float) std::numeric_limits<uint8_t>::max();
// never traverse transparent pixels
if (invert && pixel > 0) {

Wyświetl plik

@ -417,7 +417,9 @@ class SettingsWindow : public juce::DialogWindow {
public:
SettingsWindow(juce::String name, juce::Component& component) : juce::DialogWindow(name, Colours::darker, true, true), component(component) {
setContentComponent(&viewport);
setResizable(false, false);
centreWithSize(550, 400);
setResizeLimits(getWidth(), 300, getWidth(), 1080);
setResizable(true, false);
viewport.setColour(juce::ScrollBar::trackColourId, juce::Colours::white);
viewport.setViewedComponent(&component, false);
viewport.setScrollBarsShown(true, false, true, false);