kopia lustrzana https://github.com/jameshball/osci-render
Make visualiser settings resizable, allow drag and drop for files in osci-render
rodzic
6ab6fd5e36
commit
146cd27a29
|
@ -95,13 +95,7 @@ bool CommonPluginEditor::keyPressed(const juce::KeyPress& key) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CommonPluginEditor::openProject() {
|
void CommonPluginEditor::openProject(const juce::File& file) {
|
||||||
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()) {
|
if (file != juce::File()) {
|
||||||
auto data = juce::MemoryBlock();
|
auto data = juce::MemoryBlock();
|
||||||
if (file.loadFileAsData(data)) {
|
if (file.loadFileAsData(data)) {
|
||||||
|
@ -111,6 +105,15 @@ void CommonPluginEditor::openProject() {
|
||||||
audioProcessor.lastOpenedDirectory = file.getParentDirectory();
|
audioProcessor.lastOpenedDirectory = file.getParentDirectory();
|
||||||
updateTitle();
|
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) {
|
||||||
|
openProject(chooser.getResult());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -15,6 +15,7 @@ public:
|
||||||
~CommonPluginEditor() override;
|
~CommonPluginEditor() override;
|
||||||
|
|
||||||
void initialiseMenuBar(juce::MenuBarModel& menuBarModel);
|
void initialiseMenuBar(juce::MenuBarModel& menuBarModel);
|
||||||
|
void openProject(const juce::File& file);
|
||||||
void openProject();
|
void openProject();
|
||||||
void saveProject();
|
void saveProject();
|
||||||
void saveProjectAs();
|
void saveProjectAs();
|
||||||
|
|
|
@ -17,9 +17,8 @@ MainComponent::MainComponent(OscirenderAudioProcessor& p, OscirenderAudioProcess
|
||||||
chooser->launchAsync(flags, [this](const juce::FileChooser& chooser) {
|
chooser->launchAsync(flags, [this](const juce::FileChooser& chooser) {
|
||||||
juce::SpinLock::ScopedLockType lock(audioProcessor.parsersLock);
|
juce::SpinLock::ScopedLockType lock(audioProcessor.parsersLock);
|
||||||
bool fileAdded = false;
|
bool fileAdded = false;
|
||||||
for (auto& url : chooser.getURLResults()) {
|
for (auto& file : chooser.getResults()) {
|
||||||
if (url.isLocalFile()) {
|
if (file != juce::File()) {
|
||||||
juce::File file = url.getLocalFile();
|
|
||||||
audioProcessor.lastOpenedDirectory = file.getParentDirectory();
|
audioProcessor.lastOpenedDirectory = file.getParentDirectory();
|
||||||
audioProcessor.addFile(file);
|
audioProcessor.addFile(file);
|
||||||
pluginEditor.addCodeEditor(audioProcessor.getCurrentFileIndex());
|
pluginEditor.addCodeEditor(audioProcessor.getCurrentFileIndex());
|
||||||
|
|
|
@ -79,7 +79,6 @@ OscirenderAudioProcessorEditor::OscirenderAudioProcessorEditor(OscirenderAudioPr
|
||||||
visualiserSettingsWindow.setVisible(false);
|
visualiserSettingsWindow.setVisible(false);
|
||||||
};
|
};
|
||||||
|
|
||||||
visualiserSettingsWindow.centreWithSize(550, 400);
|
|
||||||
#if JUCE_WINDOWS
|
#if JUCE_WINDOWS
|
||||||
// if not standalone, use native title bar for compatibility with DAWs
|
// if not standalone, use native title bar for compatibility with DAWs
|
||||||
visualiserSettingsWindow.setUsingNativeTitleBar(processor.wrapperType == juce::AudioProcessor::WrapperType::wrapperType_Standalone);
|
visualiserSettingsWindow.setUsingNativeTitleBar(processor.wrapperType == juce::AudioProcessor::WrapperType::wrapperType_Standalone);
|
||||||
|
@ -97,6 +96,43 @@ OscirenderAudioProcessorEditor::~OscirenderAudioProcessorEditor() {
|
||||||
audioProcessor.fileChangeBroadcaster.removeChangeListener(this);
|
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) {
|
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");
|
return name.endsWith(".gpla") || name.endsWith(".gif") || name.endsWith(".png") || name.endsWith(".jpg") || name.endsWith(".jpeg") || name.endsWith(".wav") || name.endsWith(".aiff");
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
#include "visualiser/VisualiserSettings.h"
|
#include "visualiser/VisualiserSettings.h"
|
||||||
#include "CommonPluginEditor.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:
|
public:
|
||||||
OscirenderAudioProcessorEditor(OscirenderAudioProcessor&);
|
OscirenderAudioProcessorEditor(OscirenderAudioProcessor&);
|
||||||
~OscirenderAudioProcessorEditor() override;
|
~OscirenderAudioProcessorEditor() override;
|
||||||
|
@ -28,6 +28,8 @@ public:
|
||||||
void changeListenerCallback(juce::ChangeBroadcaster* source) override;
|
void changeListenerCallback(juce::ChangeBroadcaster* source) override;
|
||||||
void toggleLayout(juce::StretchableLayoutManager& layout, double prefSize);
|
void toggleLayout(juce::StretchableLayoutManager& layout, double prefSize);
|
||||||
void openVisualiserSettings();
|
void openVisualiserSettings();
|
||||||
|
bool isInterestedInFileDrag(const juce::StringArray& files) override;
|
||||||
|
void filesDropped(const juce::StringArray& files, int x, int y) override;
|
||||||
|
|
||||||
void editCustomFunction(bool enabled);
|
void editCustomFunction(bool enabled);
|
||||||
|
|
||||||
|
|
|
@ -102,6 +102,9 @@ void ImageParser::resetPosition() {
|
||||||
|
|
||||||
float ImageParser::getPixelValue(int x, int y, bool invert) {
|
float ImageParser::getPixelValue(int x, int y, bool invert) {
|
||||||
int index = (height - y - 1) * width + x;
|
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();
|
float pixel = frames[frameIndex][index] / (float) std::numeric_limits<uint8_t>::max();
|
||||||
// never traverse transparent pixels
|
// never traverse transparent pixels
|
||||||
if (invert && pixel > 0) {
|
if (invert && pixel > 0) {
|
||||||
|
|
|
@ -417,7 +417,9 @@ class SettingsWindow : public juce::DialogWindow {
|
||||||
public:
|
public:
|
||||||
SettingsWindow(juce::String name, juce::Component& component) : juce::DialogWindow(name, Colours::darker, true, true), component(component) {
|
SettingsWindow(juce::String name, juce::Component& component) : juce::DialogWindow(name, Colours::darker, true, true), component(component) {
|
||||||
setContentComponent(&viewport);
|
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.setColour(juce::ScrollBar::trackColourId, juce::Colours::white);
|
||||||
viewport.setViewedComponent(&component, false);
|
viewport.setViewedComponent(&component, false);
|
||||||
viewport.setScrollBarsShown(true, false, true, false);
|
viewport.setScrollBarsShown(true, false, true, false);
|
||||||
|
|
Ładowanie…
Reference in New Issue