From da00962842c020011083244d75986a187a3670f6 Mon Sep 17 00:00:00 2001 From: Legaeli Date: Thu, 13 Nov 2025 16:51:12 +0100 Subject: [PATCH] Finished all sliders. Added logo. --- CrystalizerEQ/AXIOMDesignSystem.h | 16 +++- .../CrystalizerEQ_SharedCode.vcxproj | 1 + .../CrystalizerEQ_SharedCode.vcxproj.filters | 3 + CrystalizerEQ/CrystalizerEQ.jucer | 1 + CrystalizerEQ/JuceLibraryCode/BinaryData.cpp | 64 +++++++++---- CrystalizerEQ/JuceLibraryCode/BinaryData.h | 5 +- CrystalizerEQ/PluginEditor.cpp | 96 +++++++++++++++---- CrystalizerEQ/PluginEditor.h | 10 +- 8 files changed, 152 insertions(+), 44 deletions(-) diff --git a/CrystalizerEQ/AXIOMDesignSystem.h b/CrystalizerEQ/AXIOMDesignSystem.h index 23b67bb..e6823e8 100644 --- a/CrystalizerEQ/AXIOMDesignSystem.h +++ b/CrystalizerEQ/AXIOMDesignSystem.h @@ -880,6 +880,10 @@ class PresetMenuButtonLookAndFeel : public juce::LookAndFeel_V4 { juce::Slider::SliderLayout getSliderLayout (juce::Slider& slider) override { juce::Slider::SliderLayout layout; + if (slider.getName() == "LowBand Slope" || slider.getName() == "HighBand Slope") { + layout.textBoxBounds = {}; + return layout; + } auto r = slider.getLocalBounds(); @@ -1025,6 +1029,7 @@ class PresetMenuButtonLookAndFeel : public juce::LookAndFeel_V4 { class SlopeSliderLookAndFeel : public BaseSliderLookAndFeel { public: static constexpr float labelPadding = 20.0f; + juce::Slider::SliderLayout getSliderLayout(juce::Slider& slider) override { juce::Slider::SliderLayout layout; @@ -1136,20 +1141,25 @@ class PresetMenuButtonLookAndFeel : public juce::LookAndFeel_V4 { float hoverFactor = 1.0f; auto surfaceCol = Colours::SURFACECOLOUR; auto accentCol = Colours::ACCENTCOLOUR; + auto ringCol = Colours::SURFACEHOVER; if (isEnabled) { - surfaceCol = isHovered ? Colours::SURFACEBYPASS : Colours::SURFACECOLOUR; + surfaceCol = isHovered ? Colours::SURFACEHOVER : Colours::SURFACECOLOUR; accentCol = isHovered ? Colours::ACCENTHOVER : Colours::ACCENTCOLOUR; + ringCol = isHovered ? Colours::SURFACECOLOUR : Colours::SURFACEHOVER; hoverFactor = isHovered ? 1.05f : 1.0f; } else { surfaceCol = Colours::SURFACEBYPASS; accentCol = Colours::ACCENTWEAKCOLOUR; + ringCol = Colours::SURFACEHOVER; } // Einfacher Ring g.setColour(surfaceCol); g.fillEllipse(centreX - radius, centreY - radius, radius * 2.0f , radius * 2.0f); - //g.drawEllipse(centreX - radius, centreY - radius, radius * 2.0f, radius * 2.0f, 2.0f); + + g.setColour(ringCol); + g.drawEllipse(centreX - radius, centreY - radius, radius * 2.0f, radius * 2.0f, arcPathWidth); juce::Path valueArc; valueArc.addCentredArc(centreX, centreY, radius, radius, @@ -1183,7 +1193,7 @@ class PresetMenuButtonLookAndFeel : public juce::LookAndFeel_V4 { case SizeMode::Freq: return 0.8f; case SizeMode::Q: return 0.8f; case SizeMode::Slope: return 0.7f; - case SizeMode::Global: return 1.0f; + case SizeMode::Global: return 0.8f; case SizeMode::Mix: return 0.8f; default: return 1.0f; } diff --git a/CrystalizerEQ/Builds/VisualStudio2022/CrystalizerEQ_SharedCode.vcxproj b/CrystalizerEQ/Builds/VisualStudio2022/CrystalizerEQ_SharedCode.vcxproj index eac76fd..ff2b3ba 100644 --- a/CrystalizerEQ/Builds/VisualStudio2022/CrystalizerEQ_SharedCode.vcxproj +++ b/CrystalizerEQ/Builds/VisualStudio2022/CrystalizerEQ_SharedCode.vcxproj @@ -164,6 +164,7 @@ + diff --git a/CrystalizerEQ/Builds/VisualStudio2022/CrystalizerEQ_SharedCode.vcxproj.filters b/CrystalizerEQ/Builds/VisualStudio2022/CrystalizerEQ_SharedCode.vcxproj.filters index 6b9dbc6..6b75e19 100644 --- a/CrystalizerEQ/Builds/VisualStudio2022/CrystalizerEQ_SharedCode.vcxproj.filters +++ b/CrystalizerEQ/Builds/VisualStudio2022/CrystalizerEQ_SharedCode.vcxproj.filters @@ -74,6 +74,9 @@ CrystalizerEQ\Resources\Fonts + + CrystalizerEQ\Resources\Icons + CrystalizerEQ\Resources\Icons diff --git a/CrystalizerEQ/CrystalizerEQ.jucer b/CrystalizerEQ/CrystalizerEQ.jucer index 901c814..6fabbab 100644 --- a/CrystalizerEQ/CrystalizerEQ.jucer +++ b/CrystalizerEQ/CrystalizerEQ.jucer @@ -21,6 +21,7 @@ file="Resources/Fonts/Roboto-Regular.ttf"/> + diff --git a/CrystalizerEQ/JuceLibraryCode/BinaryData.cpp b/CrystalizerEQ/JuceLibraryCode/BinaryData.cpp index 08c327f..ae2aa71 100644 --- a/CrystalizerEQ/JuceLibraryCode/BinaryData.cpp +++ b/CrystalizerEQ/JuceLibraryCode/BinaryData.cpp @@ -11413,63 +11413,88 @@ static const unsigned char temp_binary_data_6[] = const char* RobotoRegular_ttf = (const char*) temp_binary_data_6; -//================== bell_icon.svg ================== +//================== logo_icon.svg ================== static const unsigned char temp_binary_data_7[] = "\n" +"\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +""; + +const char* logo_icon_svg = (const char*) temp_binary_data_7; + +//================== bell_icon.svg ================== +static const unsigned char temp_binary_data_8[] = +"\n" "\n" " \n" ""; -const char* bell_icon_svg = (const char*) temp_binary_data_7; +const char* bell_icon_svg = (const char*) temp_binary_data_8; //================== high_cut_icon.svg ================== -static const unsigned char temp_binary_data_8[] = +static const unsigned char temp_binary_data_9[] = "\n" "\n" " \n" ""; -const char* high_cut_icon_svg = (const char*) temp_binary_data_8; +const char* high_cut_icon_svg = (const char*) temp_binary_data_9; //================== high_shelf_icon.svg ================== -static const unsigned char temp_binary_data_9[] = +static const unsigned char temp_binary_data_10[] = "\n" "\n" " \n" ""; -const char* high_shelf_icon_svg = (const char*) temp_binary_data_9; +const char* high_shelf_icon_svg = (const char*) temp_binary_data_10; //================== low_cut_icon.svg ================== -static const unsigned char temp_binary_data_10[] = +static const unsigned char temp_binary_data_11[] = "\n" "\n" " \n" ""; -const char* low_cut_icon_svg = (const char*) temp_binary_data_10; +const char* low_cut_icon_svg = (const char*) temp_binary_data_11; //================== low_shelf_icon.svg ================== -static const unsigned char temp_binary_data_11[] = +static const unsigned char temp_binary_data_12[] = "\n" "\n" " \n" ""; -const char* low_shelf_icon_svg = (const char*) temp_binary_data_11; +const char* low_shelf_icon_svg = (const char*) temp_binary_data_12; //================== preset_menu_icon.svg ================== -static const unsigned char temp_binary_data_12[] = +static const unsigned char temp_binary_data_13[] = ""; -const char* preset_menu_icon_svg = (const char*) temp_binary_data_12; +const char* preset_menu_icon_svg = (const char*) temp_binary_data_13; //================== crystalize_button_active_icon.svg ================== -static const unsigned char temp_binary_data_13[] = +static const unsigned char temp_binary_data_14[] = "\n" "\n" " \n" @@ -11548,10 +11573,10 @@ static const unsigned char temp_binary_data_13[] = " \n" ""; -const char* crystalize_button_active_icon_svg = (const char*) temp_binary_data_13; +const char* crystalize_button_active_icon_svg = (const char*) temp_binary_data_14; //================== crystalize_button_passive_icon.svg ================== -static const unsigned char temp_binary_data_14[] = +static const unsigned char temp_binary_data_15[] = "\n" "\n" " \n" @@ -11629,17 +11654,17 @@ static const unsigned char temp_binary_data_14[] = " \n" ""; -const char* crystalize_button_passive_icon_svg = (const char*) temp_binary_data_14; +const char* crystalize_button_passive_icon_svg = (const char*) temp_binary_data_15; //================== bypass_icon.svg ================== -static const unsigned char temp_binary_data_15[] = +static const unsigned char temp_binary_data_16[] = "\n" "\n" " \n" " \n" ""; -const char* bypass_icon_svg = (const char*) temp_binary_data_15; +const char* bypass_icon_svg = (const char*) temp_binary_data_16; const char* getNamedResource (const char* resourceNameUTF8, int& numBytes); @@ -11660,6 +11685,7 @@ const char* getNamedResource (const char* resourceNameUTF8, int& numBytes) case 0xcbceafb3: numBytes = 24668; return OrbitronBold_ttf; case 0x9c8232dc: numBytes = 24716; return OrbitronRegular_ttf; case 0x93fe9a1e: numBytes = 146004; return RobotoRegular_ttf; + case 0xa297e1b2: numBytes = 1793; return logo_icon_svg; case 0x1024555a: numBytes = 397; return bell_icon_svg; case 0x46c5a278: numBytes = 316; return high_cut_icon_svg; case 0x0133c050: numBytes = 420; return high_shelf_icon_svg; @@ -11685,6 +11711,7 @@ const char* namedResourceList[] = "OrbitronBold_ttf", "OrbitronRegular_ttf", "RobotoRegular_ttf", + "logo_icon_svg", "bell_icon_svg", "high_cut_icon_svg", "high_shelf_icon_svg", @@ -11705,6 +11732,7 @@ const char* originalFilenames[] = "Orbitron-Bold.ttf", "Orbitron-Regular.ttf", "Roboto-Regular.ttf", + "logo_icon.svg", "bell_icon.svg", "high_cut_icon.svg", "high_shelf_icon.svg", diff --git a/CrystalizerEQ/JuceLibraryCode/BinaryData.h b/CrystalizerEQ/JuceLibraryCode/BinaryData.h index 8f36356..1470c75 100644 --- a/CrystalizerEQ/JuceLibraryCode/BinaryData.h +++ b/CrystalizerEQ/JuceLibraryCode/BinaryData.h @@ -29,6 +29,9 @@ namespace BinaryData extern const char* RobotoRegular_ttf; const int RobotoRegular_ttfSize = 146004; + extern const char* logo_icon_svg; + const int logo_icon_svgSize = 1793; + extern const char* bell_icon_svg; const int bell_icon_svgSize = 397; @@ -57,7 +60,7 @@ namespace BinaryData const int bypass_icon_svgSize = 406; // Number of elements in the namedResourceList and originalFileNames arrays. - const int namedResourceListSize = 16; + const int namedResourceListSize = 17; // Points to the start of a list of resource names. extern const char* namedResourceList[]; diff --git a/CrystalizerEQ/PluginEditor.cpp b/CrystalizerEQ/PluginEditor.cpp index f2ad98e..31fa6ee 100644 --- a/CrystalizerEQ/PluginEditor.cpp +++ b/CrystalizerEQ/PluginEditor.cpp @@ -52,6 +52,9 @@ void CrystalizerEQAudioProcessorEditor::setupSliders() { &peak3FreqSlider, &peak3QSlider, &highBandFreqSlider, &highBandQSlider}) { s->setLookAndFeel(freqQLookAndFeel.get()); } + + lowBandSlopeSlider.setTextBoxStyle(juce::Slider::NoTextBox, true, 0, 0); + highBandSlopeSlider.setTextBoxStyle(juce::Slider::NoTextBox, true, 0, 0); } //endregion setupSliders @@ -130,7 +133,7 @@ void CrystalizerEQAudioProcessorEditor::setupDisplayNames() { testNoiseSlider.setTextValueSuffix(" Gain"); //lowBandFreqSlider.setTextValueSuffix ("\nHz"); - lowBandSlopeSlider.setTextValueSuffix ("\ndB/Oct"); + //lowBandSlopeSlider.setTextValueSuffix ("\ndB/Oct"); lowBandGainSlider.setTextValueSuffix("\ndB"); //lowBandQSlider.setTextValueSuffix ("\nQ"); @@ -151,7 +154,7 @@ void CrystalizerEQAudioProcessorEditor::setupDisplayNames() { //highBandFreqSlider.setTextValueSuffix ("\nHz"); - highBandSlopeSlider.setTextValueSuffix ("\ndB/Oct"); + //highBandSlopeSlider.setTextValueSuffix ("\ndB/Oct"); highBandGainSlider.setTextValueSuffix("\ndB"); // highBandQSlider.setTextValueSuffix ("\nQ"); @@ -416,7 +419,9 @@ void CrystalizerEQAudioProcessorEditor::addComponentsToLayout() { lowBandSlopeSlider.addAndMakeVisible(low24); lowBandSlopeSlider.addAndMakeVisible(low36); lowBandSlopeSlider.addAndMakeVisible(low48); + lowFilterArea.addAndMakeVisible(lowBandSlopeSlider); + lowFilterArea.addAndMakeVisible(lowdBOctLabel); lowFilterArea.addAndMakeVisible(lowBandGainSlider); lowFilterArea.addAndMakeVisible(lowBandQSlider); @@ -478,6 +483,8 @@ void CrystalizerEQAudioProcessorEditor::addComponentsToLayout() { highBandSlopeSlider.addAndMakeVisible(high36); highBandSlopeSlider.addAndMakeVisible(high48); highFilterArea.addAndMakeVisible(highBandSlopeSlider); + highFilterArea.addAndMakeVisible(highdBOctLabel); + highFilterArea.addAndMakeVisible(highBandGainSlider); highFilterArea.addAndMakeVisible(highBandQSlider); @@ -486,13 +493,14 @@ void CrystalizerEQAudioProcessorEditor::addComponentsToLayout() { } - addAndMakeVisible(footerBar); - footerBar.addAndMakeVisible(globalControlArea); - globalControlArea.addAndMakeVisible(inputLabel); - globalControlArea.addAndMakeVisible(outputLabel); + + + globalControlArea.addAndMakeVisible(inputSlider); globalControlArea.addAndMakeVisible(outputSlider); globalControlArea.addAndMakeVisible(masterBypassButton); + footerBar.addAndMakeVisible(globalControlArea); + addAndMakeVisible(footerBar); } //endregion addComponentsToLayout @@ -518,6 +526,7 @@ void CrystalizerEQAudioProcessorEditor::setupLabels() { setupLabel(low24, "24"); setupLabel(low36, "36"); setupLabel(low48, "48"); + setupLabel(lowdBOctLabel, "db/Oct"); //PEAK 1 setupLabel (peak1FreqLabel,"Low-Mid\nHz"); @@ -544,6 +553,8 @@ void CrystalizerEQAudioProcessorEditor::setupLabels() { setupLabel(high24, "24"); setupLabel(high36, "36"); setupLabel(high48, "48"); + setupLabel(highdBOctLabel, "db/Oct"); + setupLabel(presetBoxLabel, "Presets"); @@ -754,6 +765,11 @@ CrystalizerEQAudioProcessorEditor::CrystalizerEQAudioProcessorEditor (Crystalize setupSliders(); initPresetSystem(); + + auto logoIcon = juce::XmlDocument::parse (BinaryData::logo_icon_svg); + if (logoIcon != nullptr) + logoDrawable = juce::Drawable::createFromSVG (*logoIcon); + addAndMakeVisible (testNoiseButton); testNoiseButton.onClick = [this]() { @@ -861,8 +877,11 @@ void CrystalizerEQAudioProcessorEditor::paint (juce::Graphics& g) auto hBH = hB.getHeight(); auto hBPad = ((hBY + mPY) - hBH) / 2; g.fillRect(hBX, hBY, hBW, mPY - hBPad); - //paintBorderLines(g); + const auto logoArea = hB.toFloat().reduced(hBPad); + logoDrawable->drawWithin(g, logoArea, + juce::RectanglePlacement::xRight, // oder xLeft, yTop etc. + 1.0f); g.setColour(Colours::SURFACECOLOUR); const auto pA = getLocalArea(&presetArea, presetArea.getLocalBounds()); @@ -871,7 +890,10 @@ void CrystalizerEQAudioProcessorEditor::paint (juce::Graphics& g) auto pAWidth = pA.getWidth(); auto pAHeight = pA.getHeight(); g.fillRoundedRectangle(pAX, pAY - 10.f, pAWidth, pAHeight + 10.f, 10.0f); - //paintBorderLines(g); + + + + const auto fA = getLocalArea(&filterArea, filterArea.getLocalBounds()); const int fABorderWidth = 3; @@ -888,13 +910,13 @@ void CrystalizerEQAudioProcessorEditor::paint (juce::Graphics& g) g.setColour(Colours::BACKGROUNDBYPASS); g.fillRect(fA); - paintBorderLines(g); //paintModeBoxBorders(g); g.setColour(Colours::SURFACEBYPASS); const auto fB = getLocalArea(&footerBar, footerBar.getLocalBounds()); g.fillRect(fB); + paintBorderLines(g); if constexpr (false) // -> auf false setzen, wenn nicht gebraucht @@ -1054,6 +1076,25 @@ void CrystalizerEQAudioProcessorEditor::paintBorderLines(juce::Graphics &g) { g.drawVerticalLine(x,center - halfLen, center + halfLen); } + g.setColour(DesignSystem::Colours::SURFACECOLOUR); + auto prevRightGlobal = (float) globalControlArea.getRight(); + for (auto* c : globalControlArea.getChildren()) { + if (c == &inputSlider) continue; + if (c == &masterBypassButton) continue; + + const auto area = getLocalArea(c, c->getLocalBounds()); + const float xAvg = ((float) area.getX() - prevRightGlobal) / 2; + const int x = area.getX() - xAvg; + prevRightGlobal = (float) c->getRight(); + + const auto top = (float) area.getY(); + const auto bot = (float) area.getBottom(); + + + const float center = (top + bot) * 0.5f; + const float halfLen = (bot - top) * 0.375f; + g.drawVerticalLine(x,center - halfLen, center + halfLen); + } } //endregion paintBorderLines @@ -1073,6 +1114,7 @@ void CrystalizerEQAudioProcessorEditor::setKnobVisibility() { lowBandFreqLabel.setEnabled (lowMode >= 1); lowBandSlopeSlider.setEnabled (lowMode == 1); lowBandSlopeLabel.setEnabled (lowMode == 1); + lowdBOctLabel.setEnabled (lowMode == 1); lowBandGainSlider.setEnabled(lowMode >= 2); lowBandGainLabel .setEnabled(lowMode >= 2); lowBandQSlider .setEnabled(lowMode >= 1); @@ -1090,6 +1132,7 @@ void CrystalizerEQAudioProcessorEditor::setKnobVisibility() { highBandFreqLabel.setEnabled (highMode >= 1); highBandSlopeSlider.setEnabled (highMode == 1); highBandSlopeLabel.setEnabled (highMode == 1); + highdBOctLabel.setEnabled (highMode == 1); highBandGainSlider.setEnabled(highMode >= 2); highBandGainLabel .setEnabled(highMode >= 2); highBandQSlider .setEnabled(highMode >= 1); @@ -1394,6 +1437,10 @@ void CrystalizerEQAudioProcessorEditor::setupLowBandLayout() { Layout::area(lowBandSlopeLabel, 3, 1, 4, 2) .withMargin(juce::GridItem::Margin(-offSetToGainTop / 1.5f, 0, 0, 0)), + Layout::area(lowdBOctLabel, 3, 1, 4, 2) + .withAlignSelf(juce::GridItem::AlignSelf::center) + .withJustifySelf(juce::GridItem::JustifySelf::center), + }); @@ -1630,6 +1677,10 @@ void CrystalizerEQAudioProcessorEditor::setupHighBandLayout() { Layout::area(highBandSlopeLabel, 3, 3, 4, 4) .withMargin(juce::GridItem::Margin(-offSetToGainTop / 1.5f, 0, 0, 0)), + Layout::area(highdBOctLabel, 3, 3, 4, 4) + .withAlignSelf(juce::GridItem::AlignSelf::center) + .withJustifySelf(juce::GridItem::JustifySelf::center), + }); const auto modeBoxBounds = lowBandModeBox.getLocalBounds(); @@ -1668,7 +1719,7 @@ void CrystalizerEQAudioProcessorEditor::setupFooter() { const auto refH = getReferenceCell()[1]; Layout::GridSpec footerSpec{ - /* cols */ { Layout::fr(1), Layout::fr(1), Layout::pxTrack(footerWidth / 3.0f) }, + /* cols */ { Layout::fr(1), Layout::fr(1), Layout::fr(1) }, /* rows */ { Layout::fr(1) }, /* colGap */ Spacing::SizeMode::XS, /* rowGap */ Spacing::SizeMode::XS, @@ -1682,10 +1733,12 @@ void CrystalizerEQAudioProcessorEditor::setupFooter() { const auto globalControlAreaWidth = static_cast(globalControlArea.getWidth()); const auto globalControlAreaHeight = static_cast(globalControlArea.getHeight()); const auto globalControlColWidth = globalControlAreaWidth / 3.0f; + const auto sliderRadius = outputSlider.getWidth() / 2.0f; + const auto sliderWidth = outputSlider.getWidth(); Layout::GridSpec globalControlAreaSpec{ - /* cols */ { Layout::fr(1), Layout::pxTrack(globalControlColWidth), Layout::fr(1) }, + /* cols */ { Layout::fr(1), Layout::fr(1), Layout::fr(1) }, /* rows */ { Layout::fr(1)}, /* colGap */ Spacing::SizeMode::XS, /* rowGap */ Spacing::SizeMode::XS, @@ -1694,19 +1747,26 @@ void CrystalizerEQAudioProcessorEditor::setupFooter() { Layout::grid(globalControlAreaBounds, globalControlAreaSpec, { //TODO: Bring components closer together - Layout::area(inputSlider, 1, 2, 3, 3) - .withWidth(refW * globalMod * 0.8f) - .withHeight(refH * globalMod * 0.8f) + + Layout::area(outputSlider, 1, 2, 3, 3) + .withWidth(refW * globalMod ) + .withHeight(refH * globalMod ) + .withMargin(juce::GridItem::Margin(0, 0, 0, sliderRadius * 6)) .withAlignSelf(juce::GridItem::AlignSelf::center) .withJustifySelf(juce::GridItem::JustifySelf::center), - Layout::area(outputSlider, 1, 3, 3, 4) - .withWidth(refW * globalMod * 0.8f) - .withHeight(refH * globalMod * 0.8f) + + Layout::area(inputSlider, 1, 1, 3, 2) + .withWidth(refW * globalMod ) + .withHeight(refH * globalMod ) + .withMargin(juce::GridItem::Margin(0, 0, 0, sliderRadius * 10)) .withAlignSelf(juce::GridItem::AlignSelf::center) .withJustifySelf(juce::GridItem::JustifySelf::center), - Layout::area(masterBypassButton, 1, 1, 3, 2), + Layout::area(masterBypassButton, 1, 3, 3, 4) + .withWidth(sliderWidth) + + .withMargin(juce::GridItem::Margin(0, 0, 0, sliderRadius * 2)), }); } diff --git a/CrystalizerEQ/PluginEditor.h b/CrystalizerEQ/PluginEditor.h index 8b648fe..f5f8654 100644 --- a/CrystalizerEQ/PluginEditor.h +++ b/CrystalizerEQ/PluginEditor.h @@ -180,21 +180,21 @@ public: juce::Label titleLabel, testNoiseLabel, lowBandFreqLabel, lowBandSlopeLabel, lowBandGainLabel, lowBandQLabel, lowBandModeLabel, - low12, low24, low36, low48, + low12, low24, low36, low48, lowdBOctLabel, peak1FreqLabel, peak1GainLabel, peak1QLabel, peak2FreqLabel, peak2GainLabel, peak2QLabel, peak3FreqLabel, peak3GainLabel, peak3QLabel, highBandFreqLabel, highBandSlopeLabel, highBandGainLabel, highBandQLabel, highBandModeLabel, - high12, high24, high36, high48, + high12, high24, high36, high48, highdBOctLabel, inputLabel, outputLabel, presetBoxLabel; const juce::Array sliderLabels = { - &lowBandFreqLabel, &lowBandSlopeLabel, &lowBandGainLabel, &lowBandQLabel, &lowBandModeLabel, + &lowBandFreqLabel, &lowBandSlopeLabel, &lowBandGainLabel, &lowBandQLabel, &lowBandModeLabel, &lowdBOctLabel, &peak1FreqLabel, &peak1GainLabel, &peak1QLabel, &peak2FreqLabel, &peak2GainLabel, &peak2QLabel, &peak3FreqLabel, &peak3GainLabel, &peak3QLabel, - &highBandFreqLabel, &highBandSlopeLabel, &highBandGainLabel, &highBandQLabel, &highBandModeLabel, + &highBandFreqLabel, &highBandSlopeLabel, &highBandGainLabel, &highBandQLabel, &highBandModeLabel, &highdBOctLabel, &inputLabel, &outputLabel }; const juce::Array slopeLabels = { @@ -338,5 +338,7 @@ private: bool isAnimatingCrystalize = false; bool isFadingToActive = false; + std::unique_ptr logoDrawable; + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (CrystalizerEQAudioProcessorEditor) };