#pragma once #include #include "PluginProcessor.h" #include "VectorScope.h" #include "ArcKnob.h" #include "Version.h" class TerionProcessorEditor : public juce::AudioProcessorEditor { public: explicit TerionProcessorEditor(TerionProcessor&); ~TerionProcessorEditor() override; void paint(juce::Graphics&) override; void resized() override; private: void scaleChanged(); TerionProcessor& processorRef; VectorScope scope; ArcKnob fadeKnob; ArcKnob sensitivityKnob; ArcKnob dotSizeKnob; ArcKnob smoothingKnob; ArcKnob afterglowKnob; juce::ToggleButton freezeButton; juce::ToggleButton monoButton; juce::ComboBox scaleBox; juce::Label fadeLabel, sensitivityLabel, dotSizeLabel, smoothingLabel, afterglowLabel; std::unique_ptr fadeAttachment; std::unique_ptr sensitivityAttachment; std::unique_ptr dotSizeAttachment; std::unique_ptr smoothingAttachment; std::unique_ptr afterglowAttachment; std::unique_ptr freezeAttachment; std::unique_ptr monoAttachment; float currentScale = 1.0f; static constexpr int kBaseWidth = 630; static constexpr int kBaseHeight = 420; static constexpr int kFooterHeight = 28; static constexpr int kKnobSize = 54; static constexpr int kKnobMargin = 6; static constexpr float kMaxScale = 3.0f; JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(TerionProcessorEditor) };