19 class Handle :
public juce::Component
22 static constexpr int handleSize = 20;
23 Handle(Filter::Type type, juce::RangedAudioParameter *bypassParam, juce::RangedAudioParameter *freqParam,
24 juce::RangedAudioParameter *filterOrder, juce::RangedAudioParameter *gainParam =
nullptr,
25 juce::RangedAudioParameter *qParam =
nullptr);
27 void paint(juce::Graphics &g)
override;
28 void mouseDown(
const juce::MouseEvent &event)
override;
29 void mouseDrag(
const juce::MouseEvent &event)
override;
30 void mouseWheelMove(
const juce::MouseEvent &event,
const juce::MouseWheelDetails &wheel)
override;
31 void updateFrequencyPositionFromParameter(
float newValue);
32 void updateGainPositionFromParameter(
float newValue);
33 void updateFilerOrderFromParameter(
float newValue);
35 juce::RangedAudioParameter *mBypassParameter;
36 juce::RangedAudioParameter *mFreqParameter;
37 juce::RangedAudioParameter *mGainParameter;
38 juce::RangedAudioParameter *mQParameter;
39 juce::RangedAudioParameter *mFilterOrder;
41 std::unique_ptr<Filter> mFilter;
44 juce::ComponentDragger dragger;
45 juce::ComponentBoundsConstrainer constrainer;
47 std::unique_ptr<juce::ParameterAttachment> mBypassAttachment{
nullptr};
48 std::unique_ptr<juce::ParameterAttachment> mFilterOrderAttachment{
nullptr};
49 std::unique_ptr<juce::ParameterAttachment> mFreqAttachment{
nullptr};
50 std::unique_ptr<juce::ParameterAttachment> mGainAttachment{
nullptr};
51 std::unique_ptr<juce::ParameterAttachment> mQAttachment{
nullptr};
53 JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(Handle)
59 void resized()
override;
60 void paint(juce::Graphics &g)
override;
62 void drawGrid(juce::Graphics &g);
63 void drawTextLabels(juce::Graphics &g);
64 void drawVerticalLines(juce::Graphics &g);
65 void drawHorizontalLines(juce::Graphics &g);
66 void drawPlotCurve(juce::Graphics &g);
67 void updateFrequencyResponse();
68 std::vector<std::unique_ptr<Handle>> &getHandles()
73 std::vector<float> getFrequencies();
74 std::vector<float> getXs(
const std::vector<float> &freqs,
float left,
float width);
75 std::vector<int> getGains();
77 juce::Rectangle<int> getRenderArea();
81 juce::AudioProcessorValueTreeState &mParameters;
83 juce::Path frequencyResponse;
85 juce::Component handleContainer;
86 juce::Font deathMetalFont;
87 static constexpr int reducedSize = 30;
89 std::atomic<bool> parameterChanged{
false};
91 std::vector<std::unique_ptr<Handle>> mHandles;
93 JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(
EQView)