Files
InstaShadow/Source/PluginEditor.h
hariel1985 a587a43ff9 Initial release — InstaShadow mastering compressor v1.0
Dual-stage compressor (optical + VCA) with output transformer saturation.
- Port-Hamiltonian T4B opto-cell model with implicit trapezoidal integration
- Feed-forward VCA with 7 ratios, 6 attack/release presets, Dual release mode
- 3 transformer types (Nickel/Iron/Steel) with 4x oversampled waveshaping
- Analog-style needle VU meters, horizontal GR meters
- Sidechain HPF, stereo link, independent section bypass
- Full state save/restore, CI/CD for Windows/macOS/Linux
2026-03-27 16:03:24 +01:00

56 sor
1.3 KiB
C++

#pragma once
#include <JuceHeader.h>
#include "PluginProcessor.h"
#include "LookAndFeel.h"
#include "OpticalPanel.h"
#include "DiscretePanel.h"
#include "TransformerPanel.h"
#include "OutputPanel.h"
#include "GRMeter.h"
#include "NeedleVuMeter.h"
static constexpr const char* kInstaShadowVersion = "v1.0";
class InstaShadowEditor : public juce::AudioProcessorEditor,
public juce::Timer
{
public:
explicit InstaShadowEditor (InstaShadowProcessor&);
~InstaShadowEditor() override;
void paint (juce::Graphics&) override;
void resized() override;
void timerCallback() override;
private:
InstaShadowProcessor& processor;
InstaShadowLookAndFeel lookAndFeel;
// Top bar
juce::Label titleLabel;
juce::Label versionLabel;
juce::ToggleButton linkToggle;
juce::Label linkLabel;
juce::ToggleButton bypassToggle;
juce::Label bypassLabel;
// Side panels
OpticalPanel opticalPanel;
DiscretePanel discretePanel;
// Center: needle VU meters + GR bars
NeedleVuMeter vuMeterL;
NeedleVuMeter vuMeterR;
GRMeter optoGrMeter;
GRMeter vcaGrMeter;
// Bottom panels
TransformerPanel transformerPanel;
OutputPanel outputPanel;
void syncKnobsToEngine();
void syncEngineFromKnobs();
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (InstaShadowEditor)
};