Almost finished Slope Slider, still need to remove Value from slider textbox.

This commit is contained in:
Legaeli 2025-11-12 19:33:05 +01:00
parent e18377af9f
commit 6f2fd49107
6 changed files with 328 additions and 113 deletions

View File

@ -5,7 +5,7 @@
#include <corecrt_math_defines.h> #include <corecrt_math_defines.h>
#include "JuceLibraryCode/BinaryData.h" #include "JuceLibraryCode/BinaryData.h"
#include "PluginEditor.h"
namespace AXIOM { namespace AXIOM {
class DesignSystem : public juce::LookAndFeel_V4 { class DesignSystem : public juce::LookAndFeel_V4 {
@ -655,6 +655,7 @@ class PresetMenuButtonLookAndFeel : public juce::LookAndFeel_V4 {
const bool isToggled = button.getToggleState(); const bool isToggled = button.getToggleState();
auto bounds = button.getLocalBounds().toFloat(); auto bounds = button.getLocalBounds().toFloat();
auto iconSize = juce::jmin(bounds.getWidth(), bounds.getHeight()) * 0.5f; auto iconSize = juce::jmin(bounds.getWidth(), bounds.getHeight()) * 0.5f;
auto hoverFactor = isHovered ? 1.05f : 1.0f; auto hoverFactor = isHovered ? 1.05f : 1.0f;
auto iconBounds = juce::Rectangle<float>(iconSize * hoverFactor, iconSize * hoverFactor) auto iconBounds = juce::Rectangle<float>(iconSize * hoverFactor, iconSize * hoverFactor)
@ -671,8 +672,6 @@ class PresetMenuButtonLookAndFeel : public juce::LookAndFeel_V4 {
juce::RectanglePlacement::centred, passiveIconOpacity); juce::RectanglePlacement::centred, passiveIconOpacity);
} }
} }
private: private:
@ -872,11 +871,10 @@ class PresetMenuButtonLookAndFeel : public juce::LookAndFeel_V4 {
label->setColour(juce::Label::backgroundColourId, juce::Colours::transparentBlack); label->setColour(juce::Label::backgroundColourId, juce::Colours::transparentBlack);
label->setColour(juce::Label::outlineColourId, juce::Colours::transparentBlack); label->setColour(juce::Label::outlineColourId, juce::Colours::transparentBlack);
label->setColour(juce::Label::textColourId, juce::Colours::white); label->setColour(juce::Label::textColourId, Colours::FOREGROUNDCOLOUR);
label->setJustificationType(juce::Justification::centred); label->setJustificationType(juce::Justification::centred);
label->setInterceptsMouseClicks (false, false); label->setInterceptsMouseClicks (false, false);
Typography::applyToLabel(*label, Typography::Style::Mono, 1.f); Typography::applyToLabel(*label, Typography::Style::Mono, 1.f);
return label; return label;
} }
juce::Slider::SliderLayout getSliderLayout (juce::Slider& slider) override juce::Slider::SliderLayout getSliderLayout (juce::Slider& slider) override
@ -921,8 +919,6 @@ class PresetMenuButtonLookAndFeel : public juce::LookAndFeel_V4 {
g.setColour(Colours::ACCENTCOLOUR); g.setColour(Colours::ACCENTCOLOUR);
g.fillPath(p); g.fillPath(p);
//TODO: ON BYPASS SET TO RING TO SURFACEHOVER, ACCENT TO WEAKACCENTHOVER
} }
}; };
class GainSliderLookAndFeel : public BaseSliderLookAndFeel class GainSliderLookAndFeel : public BaseSliderLookAndFeel
@ -1025,6 +1021,103 @@ class PresetMenuButtonLookAndFeel : public juce::LookAndFeel_V4 {
g.fillPath(p); g.fillPath(p);
} }
}; };
class SlopeSliderLookAndFeel : public BaseSliderLookAndFeel {
public:
static constexpr float labelPadding = 20.0f;
juce::Slider::SliderLayout getSliderLayout(juce::Slider& slider) override
{
juce::Slider::SliderLayout layout;
auto bounds = slider.getLocalBounds();
// TextBox in der Mitte (wie bei BaseSliderLookAndFeel)
layout.textBoxBounds = juce::Rectangle<int>(
bounds.getCentreX() - bounds.getWidth() / 2,
bounds.getCentreY() - bounds.getHeight() / 2,
bounds.getWidth(),
bounds.getHeight()
);
// HIER IST DER TRICK: Knob-Bereich kleiner als Slider-Bounds!
// So bleibt Platz für die Labels außerhalb
layout.sliderBounds = bounds.reduced(labelPadding);
return layout;
}
void drawRotarySlider(juce::Graphics& g, int x, int y, int width, int height,
float sliderPos, float rotaryStartAngle, float rotaryEndAngle,
juce::Slider& slider) override
{
// Basis-Implementation - wird in Subklassen überschrieben
auto radius = juce::jmin(width / 2, height / 2) - 4.0f;
auto centreX = x + width * 0.5f;
auto centreY = y + height * 0.5f;
auto angle = rotaryStartAngle + sliderPos * (rotaryEndAngle - rotaryStartAngle);
bool isEnabled = slider.isEnabled();
bool isHovered = slider.isMouseOverOrDragging();
// Outer ring
g.setColour(Colours::BACKGROUNDCOLOUR);
g.fillEllipse(centreX - radius, centreY - radius, radius * 2.0f, radius * 2.0f);
juce::Colour accentCol = isEnabled ? Colours::ACCENTCOLOUR : Colours::ACCENTWEAKCOLOUR;
// Indicator
juce::Path p;
auto pointerLength = radius * 0.6f;
auto pointerThickness = 2.0f;
p.addRectangle(-pointerThickness * 0.5f, -radius, pointerThickness, pointerLength);
p.applyTransform(juce::AffineTransform::rotation(angle).translated(centreX, centreY));
g.setColour(accentCol);
g.fillPath(p);
// Dann zeichne die Labels
const auto bounds = juce::Rectangle<int>(x, y, width, height);
const auto centre = bounds.getCentre().toFloat();
const float textRadius = std::min(width, height) * 0.5f + 5.0f;
const juce::StringArray labels = {"12", "24", "36", "48"};
g.setFont(12.0f);
auto value = slider.getValue();
for (int i = 0; i < labels.size(); ++i)
{
const double labelVal = labels[i].getDoubleValue(); // "12" -> 12.0 usw.
const bool isMatch = value == i; // Toleranz: 0.5
juce::Colour colour;
if (!isEnabled) {
colour = isMatch ? Colours::ACCENTWEAKCOLOUR : Colours::FOREGROUNDCOLOUR.withMultipliedAlpha (0.4f);
}
else {
colour = isMatch
? Colours::ACCENTCOLOUR
: Colours::FOREGROUNDCOLOUR;
}
g.setColour(colour);
const double position = (double)i / 3.0;
const float ang = rotaryStartAngle + position * (rotaryEndAngle - rotaryStartAngle);
juce::Point<float> pos(
centre.x + textRadius * std::cos(ang - juce::MathConstants<float>::halfPi),
centre.y + textRadius * std::sin(ang - juce::MathConstants<float>::halfPi)
);
juce::Rectangle<float> textRect(30.0f, 16.0f);
textRect.setCentre(pos);
g.drawText(labels[i], textRect, juce::Justification::centred);
}
}
};
class GlobalSliderLookAndFeel : public BaseSliderLookAndFeel class GlobalSliderLookAndFeel : public BaseSliderLookAndFeel
{ {
public: public:

View File

@ -11471,43 +11471,80 @@ const char* preset_menu_icon_svg = (const char*) temp_binary_data_12;
//================== crystalize_button_active_icon.svg ================== //================== crystalize_button_active_icon.svg ==================
static const unsigned char temp_binary_data_13[] = static const unsigned char temp_binary_data_13[] =
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
"<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 80 32.45\">\n" "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 64 32\">\n"
" <defs>\n" " <g id=\"Ebene_6\" data-name=\"Ebene 6\">\n"
" <linearGradient id=\"Unbenannter_Verlauf_16\" data-name=\"Unbenannter Verlauf 16\" x1=\"8.69\" y1=\"31.46\" x2=\"70.94\" y2=\"1.29\" gradientUnits=\"userSpaceOnUse\">\n" " <rect x=\"0\" y=\"0\" width=\"64\" height=\"32\" fill=\"#171a1a\"/>\n"
" <stop offset=\"0\" stop-color=\"#fff\" stop-opacity=\".1\"/>\n" " <polygon points=\"0 32 2 30 32 16 62 2 64 0 64 32 0 32\" fill=\"#262b2b\"/>\n"
" <stop offset=\".48\" stop-color=\"#fff\" stop-opacity=\".3\"/>\n" " </g>\n"
" <stop offset=\"1\" stop-color=\"#fff\" stop-opacity=\".5\"/>\n"
" </linearGradient>\n"
" </defs>\n"
" <g id=\"Ebene_2\" data-name=\"Ebene 2\">\n" " <g id=\"Ebene_2\" data-name=\"Ebene 2\">\n"
" <rect x=\"8\" y=\".22\" width=\"64\" height=\"32\" rx=\"5.96\" ry=\"5.96\" fill=\"#3db7b7\"/>\n" " <rect x=\"2\" y=\"2\" width=\"60\" height=\"28\" fill=\"#3db7b7\"/>\n"
" <rect x=\"8\" y=\".22\" width=\"64\" height=\"32\" rx=\"5.96\" ry=\"5.96\" fill=\"#56feff\"/>\n" " <rect x=\"2\" y=\"2\" width=\"60\" height=\"28\" fill=\"#56feff\"/>\n"
" </g>\n" " </g>\n"
" <g id=\"Ebene_1\" data-name=\"Ebene 1\">\n" " <g id=\"Ebene_7\" data-name=\"Ebene 7\">\n"
" <g>\n" " <g>\n"
" <path d=\"M11.73,19.11c-.18,0-.34-.04-.48-.13-.15-.09-.26-.2-.35-.35-.09-.15-.13-.31-.13-.48v-3.84c0-.18.04-.34.13-.48.08-.15.2-.26.35-.35.15-.09.31-.13.48-.13h4.78v.65h-4.78c-.09,0-.16.03-.22.09s-.09.13-.09.22v3.84c0,.09.03.16.09.22.06.06.13.0" " <path d=\"M12.39,18c-.12,0-.23-.03-.34-.09-.1-.06-.18-.14-.24-.24-.06-.1-.09-.21-.09-.34v-2.66c0-.12.03-.23.09-.34.06-.1.14-.18.24-.24.1-.06.21-.09.34-.09h3.32v.45h-3.32c-.06,0-.11.02-.15.06s-.06.09-.06.15v2.66c0,.06.02.11.06.15.04.04.09.06.15."
"9.22.09h4.78v.65h-4.78Z\" fill=\"#fff\"/>\n" "06h3.32v.45h-3.32Z\" fill=\"#fff\"/>\n"
" <path d=\"M17.34,19.11v-5.75h4.8c.18,0,.34.04.48.13s.26.2.35.35c.08.14.13.3.13.48v1.69c0,.18-.04.34-.13.48-.09.14-.2.26-.35.35s-.31.13-.48.13h-4.15v2.14h-.65ZM18.3,16.31h3.84c.08,0,.16-.03.22-.09.06-.06.09-.13.09-.22v-1.69c0-.09-.03-.16-.09-.22" " <path d=\"M16.29,18v-3.99h3.33c.12,0,.23.03.34.09s.18.14.24.24c.06.1.09.21.09.33v1.17c0,.12-.03.23-.09.33-.06.1-.14.18-.24.24s-.21.09-.34.09h-2.88v1.49h-.45ZM16.95,16.06h2.66c.06,0,.11-.02.15-.06.04-.04.06-.09.06-.15v-1.17c0-.06-.02-.11-.06-.15"
"s-.13-.09-.22-.09h-3.84c-.09,0-.16.03-.22.09s-.09.13-.09.22v1.69c0,.09.03.16.09.22.06.06.13.09.22.09ZM22.21,19.11l-1.88-2.24h.85l1.89,2.23h0s-.86,0-.86,0Z\" fill=\"#fff\"/>\n" "s-.09-.06-.15-.06h-2.66c-.06,0-.11.02-.15.06s-.06.09-.06.15v1.17c0,.06.02.11.06.15.04.04.09.06.15.06ZM19.66,18l-1.3-1.55h.59l1.31,1.55h0s-.59,0-.59,0Z\" fill=\"#fff\"/>\n"
" <path d=\"M26.4,19.11v-2.17l-2.65-3.59h.74l2.23,2.82,2.21-2.82h.76l-2.65,3.59v2.17h-.65Z\" fill=\"#fff\"/>\n" " <path d=\"M22.57,18v-1.5l-1.84-2.49h.52l1.55,1.95,1.53-1.95h.53l-1.84,2.49v1.5h-.45Z\" fill=\"#fff\"/>\n"
" <path d=\"M31.03,19.11c-.18,0-.34-.04-.48-.13s-.26-.2-.35-.35c-.09-.15-.13-.31-.13-.48v-.22h.65v.22c0,.09.03.16.09.22.06.06.13.09.22.09h3.84c.08,0,.16-.03.22-.09.06-.06.09-.13.09-.22v-1.29c0-.08-.03-.16-.09-.22-.06-.06-.13-.09-.22-.09h-3.84c-.1" " <path d=\"M25.78,18c-.12,0-.23-.03-.34-.09s-.18-.14-.24-.24c-.06-.1-.09-.21-.09-.34v-.16h.45v.16c0,.06.02.11.06.15.04.04.09.06.15.06h2.66c.06,0,.11-.02.15-.06.04-.04.06-.09.06-.15v-.89c0-.06-.02-.11-.06-.15-.04-.04-.09-.06-.15-.06h-2.66c-.12,0-"
"8,0-.34-.04-.48-.13s-.26-.2-.35-.35c-.09-.14-.13-.3-.13-.48v-1.29c0-.18.04-.34.13-.48.08-.15.2-.26.35-.35s.31-.13.48-.13h3.84c.18,0,.34.04.48.13.15.09.26.2.35.35.08.15.13.31.13.48v.22h-.65v-.22c0-.09-.03-.16-.09-.22-.06-.06-.13-.09-.22-.09h-3.84c-.09" ".23-.03-.34-.09s-.18-.14-.24-.24c-.06-.1-.09-.21-.09-.33v-.89c0-.12.03-.23.09-.34.06-.1.14-.18.24-.24s.21-.09.34-.09h2.66c.12,0,.23.03.34.09.1.06.18.14.24.24.06.1.09.21.09.34v.16h-.45v-.16c0-.06-.02-.11-.06-.15-.04-.04-.09-.06-.15-.06h-2.66c-.06,0-.1"
",0-.16.03-.22.09-.06.06-.09.13-.09.22v1.29c0,.09.03.16.09.22s.13.09.22.09h3.84c.18,0,.34.04.48.13.15.09.26.2.35.35.08.14.13.3.13.48v1.29c0,.18-.04.34-.13.48-.09.15-.2.26-.35.35-.15.09-.31.13-.48.13h-3.84Z\" fill=\"#fff\"/>\n" "1.02-.15.06-.04.04-.06.09-.06.15v.89c0,.06.02.11.06.15s.09.06.15.06h2.66c.12,0,.23.03.34.09.1.06.18.14.24.24.06.1.09.21.09.33v.89c0,.12-.03.23-.09.34-.06.1-.14.18-.24.24-.1.06-.21.09-.34.09h-2.66Z\" fill=\"#fff\"/>\n"
" <path d=\"M38.96,19.11v-5.11h-2.56v-.65h5.76v.65h-2.55v5.11h-.65Z\" fill=\"#fff\"/>\n" " <path d=\"M31.28,18v-3.54h-1.77v-.45h3.99v.45h-1.77v3.54h-.45Z\" fill=\"#fff\"/>\n"
" <path d=\"M42.78,14.31c0-.18.04-.34.13-.48.09-.15.2-.26.35-.35.15-.09.31-.13.48-.13h3.84c.18,0,.34.04.48.13s.26.2.35.35c.09.15.13.31.13.48v4.8h-.65v-2.1h-4.46v2.1h-.65v-4.8ZM47.89,16.36v-2.05c0-.09-.03-.16-.09-.22-.06-.06-.13-.09-.22-.09h-3.84c" " <path d=\"M33.92,14.67c0-.12.03-.23.09-.34.06-.1.14-.18.24-.24.1-.06.21-.09.34-.09h2.66c.12,0,.23.03.34.09s.18.14.24.24c.06.1.09.21.09.34v3.33h-.45v-1.46h-3.1v1.46h-.45v-3.33ZM37.47,16.09v-1.42c0-.06-.02-.11-.06-.15-.04-.04-.09-.06-.15-.06h-2.6"
"-.08,0-.16.03-.22.09-.06.06-.09.13-.09.22v2.05h4.46Z\" fill=\"#fff\"/>\n" "6c-.06,0-.11.02-.15.06-.04.04-.06.09-.06.15v1.42h3.1Z\" fill=\"#fff\"/>\n"
" <path d=\"M49.46,19.11v-5.77h.65v5.12h5.11v.65h-5.76Z\" fill=\"#fff\"/>\n" " <path d=\"M38.56,18v-4h.45v3.55h3.55v.45h-3.99Z\" fill=\"#fff\"/>\n"
" <path d=\"M55.76,19.11v-5.76h.66v5.76h-.66Z\" fill=\"#fff\"/>\n" " <path d=\"M42.93,18v-3.99h.45v3.99h-.45Z\" fill=\"#fff\"/>\n"
" <path d=\"M57.35,19.11v-.89l5.02-4.22h-5.02v-.65h5.76v.89l-5.02,4.22h5.02v.65h-5.76Z\" fill=\"#fff\"/>\n" " <path d=\"M44.03,18v-.62l3.48-2.93h-3.48v-.45h3.99v.62l-3.48,2.93h3.48v.45h-3.99Z\" fill=\"#fff\"/>\n"
" <path d=\"M63.98,19.11v-5.76h5.26v.65h-4.61v1.9h3.7v.66h-3.7v1.9h4.61v.65h-5.26Z\" fill=\"#fff\"/>\n" " <path d=\"M48.63,18v-3.99h3.64v.45h-3.2v1.32h2.57v.46h-2.57v1.32h3.2v.45h-3.64Z\" fill=\"#fff\"/>\n"
" </g>\n" " </g>\n"
" </g>\n" " </g>\n"
" <g id=\"Ebene_3_Kopie_Kopie_Kopie\" data-name=\"Ebene 3 Kopie Kopie Kopie\">\n" " <g id=\"Ebene_3_Kopie\" data-name=\"Ebene 3 Kopie\">\n"
" <path d=\"M56,24.22l8-4,8,4h-16ZM48,20.22h16l-8-4-8,4ZM72,12.22v-4l-8,4h8ZM72,16.22l-8-4-8,4h16ZM69.61,1.42l-5.61,2.81h7.66c-.39-1.13-1.12-2.1-2.05-2.81ZM72,8.22l-8-4-8,4h16ZM48,12.22h16l-8-4-8,4ZM56,.22l-8,4h16L56,.22ZM48,28.22h16l-8-4-8,4ZM72,2" " <rect x=\"8\" y=\"8\" width=\"48\" height=\"16\" fill=\"#fffcfc\" opacity=\".21\"/>\n"
"0.22v-4l-8,4h8ZM56,24.22l-8-4-8,4h16ZM40,8.22l-8,4h16l-8-4ZM32,12.22l-8,4h16l-8-4ZM40,16.22l-8,4h16l-8-4ZM32,20.22l-8,4h16l-8-4ZM71.66,28.22c.21-.61.34-1.27.34-1.96v-2.04l-8,4h7.66ZM56,16.22l-8-4-8,4h16ZM32,28.22h16l-8-4-8,4ZM56,8.22l-8-4-8,4h16ZM8,2" " <polygon points=\"2 30 8 24 56 24 62 30 2 30\" fill=\"#fffcfc\" opacity=\".21\"/>\n"
"0.22h8l-8-4v4ZM24,32.22h16l-8-4-8,4ZM24,24.22l-8,4h16l-8-4ZM8,12.22h8l-8-4v4ZM16,20.22l-8,4h16l-8-4ZM10.39,31.03c1,.75,2.23,1.19,3.57,1.19h10.04l-8-4-5.61,2.81ZM64,28.22l-8,4h10.04c1.34,0,2.57-.45,3.57-1.19l-5.61-2.81ZM8.34,4.22h7.66l-5.61-2.81c-.94." " <polygon points=\"62 2 56 8 8 8 2 2 62 2\" fill=\"#fffcfc\" opacity=\".21\"/>\n"
"7-1.66,1.68-2.05,2.81ZM40,32.22h16l-8-4-8,4ZM8,26.27c0,.69.12,1.34.34,1.96h7.66l-8-4v2.04ZM40,.22l-8,4h16L40,.22ZM16,4.22l-8,4h16l-8-4ZM24,8.22l-8,4h16l-8-4ZM40,8.22l-8-4-8,4h16ZM16,12.22l-8,4h16l-8-4ZM24,.22l-8,4h16L24,.22ZM24,16.22l-8,4h16l-8-4Z\" " " <polygon points=\"56 24 56 8 62 2 62 30 56 24\" fill=\"#fffcfc\" opacity=\".21\"/>\n"
"fill=\"url(#Unbenannter_Verlauf_16)\"/>\n" " <polygon points=\"8 8 8 24 2 30 2 2 8 8\" fill=\"#fffcfc\" opacity=\".21\"/>\n"
" <polygon points=\"8 24 5 27 2 30 2 24 8 24\" fill=\"#d1d1d1\" opacity=\".21\"/>\n"
" <polygon points=\"2 30 5 27 8 24 8 30 2 30\" fill=\"#fff\" opacity=\".21\"/>\n"
" <polygon points=\"8 30 8 24 14 27 20 30 8 30\" fill=\"#d1d1d1\" opacity=\".21\"/>\n"
" <polygon points=\"2 8 5 12 8 16 2 16 2 8\" fill=\"#d1d1d1\" opacity=\".21\"/>\n"
" <polygon points=\"20 30 26 27 32 24 32 30 20 30\" fill=\"#fff\" opacity=\".21\"/>\n"
" <polygon points=\"32 24 26 27 20 30 20 24 32 24\" fill=\"#d1d1d1\" opacity=\".21\"/>\n"
" <polygon points=\"8 16 5 12 2 8 8 8 8 16\" fill=\"#fff\" opacity=\".21\"/>\n"
" <polygon points=\"8 16 5 20 2 24 2 16 8 16\" fill=\"#d1d1d1\" opacity=\".21\"/>\n"
" <polygon points=\"20 24 20 30 14 27 8 24 20 24\" fill=\"#fff\" opacity=\".21\"/>\n"
" <polygon points=\"56 30 56 24 50 27 44 30 56 30\" fill=\"#d1d1d1\" opacity=\".21\"/>\n"
" <polygon points=\"44 30 38 27 32 24 32 30 44 30\" fill=\"#fff\" opacity=\".21\"/>\n"
" <polygon points=\"32 24 38 27 44 30 44 24 32 24\" fill=\"#d1d1d1\" opacity=\".21\"/>\n"
" <polygon points=\"44 24 44 30 50 27 56 24 44 24\" fill=\"#fff\" opacity=\".21\"/>\n"
" <polygon points=\"32 2 32 8 26 5 20 2 32 2\" fill=\"#fff\" opacity=\".21\"/>\n"
" <polygon points=\"20 2 14 5 8 8 8 2 20 2\" fill=\"#d1d1d1\" opacity=\".21\"/>\n"
" <polygon points=\"2 24 5 20 8 16 8 24 2 24\" fill=\"#fff\" opacity=\".21\"/>\n"
" <polygon points=\"8 8 14 5 20 2 20 8 8 8\" fill=\"#fff\" opacity=\".21\"/>\n"
" <polygon points=\"8 24 20 20 32 16 32 24 8 24\" fill=\"#fff\" opacity=\".21\"/>\n"
" <polygon points=\"56 24 44 20 32 16 32 24 56 24\" fill=\"#fff\" opacity=\".21\"/>\n"
" <polygon points=\"56 8 44 12 32 16 32 8 56 8\" fill=\"#fff\" opacity=\".21\"/>\n"
" <polygon points=\"8 8 20 12 32 16 32 8 8 8\" fill=\"#fff\" opacity=\".21\"/>\n"
" <polygon points=\"32 16 20 12 8 8 8 16 32 16\" fill=\"#d1d1d1\" opacity=\".21\"/>\n"
" <polygon points=\"32 16 44 12 56 8 56 16 32 16\" fill=\"#d1d1d1\" opacity=\".21\"/>\n"
" <polygon points=\"32 16 20 20 8 24 8 16 32 16\" fill=\"#d1d1d1\" opacity=\".21\"/>\n"
" <polygon points=\"32 16 44 20 56 24 56 16 32 16\" fill=\"#d1d1d1\" opacity=\".21\"/>\n"
" <polygon points=\"20 8 20 2 26 5 32 8 20 8\" fill=\"#d1d1d1\" opacity=\".21\"/>\n"
" <polygon points=\"32 2 32 8 38 5 44 2 32 2\" fill=\"#fff\" opacity=\".21\"/>\n"
" <polygon points=\"44 2 50 5 56 8 56 2 44 2\" fill=\"#d1d1d1\" opacity=\".21\"/>\n"
" <polygon points=\"56 8 50 5 44 2 44 8 56 8\" fill=\"#fff\" opacity=\".21\"/>\n"
" <polygon points=\"44 8 44 2 38 5 32 8 44 8\" fill=\"#d1d1d1\" opacity=\".21\"/>\n"
" <polygon points=\"8 2 8 8 5 5 2 2 8 2\" fill=\"#fff\" opacity=\".21\"/>\n"
" <polygon points=\"2 8 2 2 5 5 8 8 2 8\" fill=\"#d1d1d1\" opacity=\".21\"/>\n"
" <polygon points=\"56 24 59 27 62 30 62 24 56 24\" fill=\"#d1d1d1\" opacity=\".21\"/>\n"
" <polygon points=\"62 8 59 12 56 16 62 16 62 8\" fill=\"#d1d1d1\" opacity=\".21\"/>\n"
" <polygon points=\"56 16 59 12 62 8 56 8 56 16\" fill=\"#fff\" opacity=\".21\"/>\n"
" <polygon points=\"56 16 59 20 62 24 56 24 56 16\" fill=\"#fff\" opacity=\".21\"/>\n"
" <polygon points=\"62 30 59 27 56 24 56 30 62 30\" fill=\"#fff\" opacity=\".21\"/>\n"
" <polygon points=\"56 16 59 20 62 24 62 16 56 16\" fill=\"#d1d1d1\" opacity=\".21\"/>\n"
" <polygon points=\"56 2 56 8 59 5 62 2 56 2\" fill=\"#fff\" opacity=\".21\"/>\n"
" <polygon points=\"62 8 62 2 59 5 56 8 62 8\" fill=\"#d1d1d1\" opacity=\".21\"/>\n"
" </g>\n" " </g>\n"
"</svg>"; "</svg>";
@ -11516,42 +11553,79 @@ const char* crystalize_button_active_icon_svg = (const char*) temp_binary_data_1
//================== crystalize_button_passive_icon.svg ================== //================== crystalize_button_passive_icon.svg ==================
static const unsigned char temp_binary_data_14[] = static const unsigned char temp_binary_data_14[] =
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
"<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 80 32.45\">\n" "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 64 32\">\n"
" <defs>\n" " <g id=\"Ebene_6\" data-name=\"Ebene 6\">\n"
" <linearGradient id=\"Unbenannter_Verlauf_16\" data-name=\"Unbenannter Verlauf 16\" x1=\"8.69\" y1=\"31.46\" x2=\"70.94\" y2=\"1.29\" gradientUnits=\"userSpaceOnUse\">\n" " <rect x=\"0\" y=\"0\" width=\"64\" height=\"32\" fill=\"#171a1a\"/>\n"
" <stop offset=\"0\" stop-color=\"#fff\" stop-opacity=\".1\"/>\n" " <polygon points=\"64 0 62 2 32 16 2 30 0 32 0 0 64 0\" fill=\"#262b2b\"/>\n"
" <stop offset=\".48\" stop-color=\"#fff\" stop-opacity=\".3\"/>\n" " </g>\n"
" <stop offset=\"1\" stop-color=\"#fff\" stop-opacity=\".5\"/>\n"
" </linearGradient>\n"
" </defs>\n"
" <g id=\"Ebene_2\" data-name=\"Ebene 2\">\n" " <g id=\"Ebene_2\" data-name=\"Ebene 2\">\n"
" <rect x=\"8\" y=\".22\" width=\"64\" height=\"32\" rx=\"5.96\" ry=\"5.96\" fill=\"#3db7b7\"/>\n" " <rect x=\"2\" y=\"2\" width=\"60\" height=\"28\" fill=\"#3db7b7\"/>\n"
" </g>\n" " </g>\n"
" <g id=\"Ebene_1\" data-name=\"Ebene 1\">\n" " <g id=\"Ebene_7\" data-name=\"Ebene 7\">\n"
" <g>\n" " <g>\n"
" <path d=\"M11.73,19.11c-.18,0-.34-.04-.48-.13-.15-.09-.26-.2-.35-.35-.09-.15-.13-.31-.13-.48v-3.84c0-.18.04-.34.13-.48.08-.15.2-.26.35-.35.15-.09.31-.13.48-.13h4.78v.65h-4.78c-.09,0-.16.03-.22.09s-.09.13-.09.22v3.84c0,.09.03.16.09.22.06.06.13.0" " <path d=\"M12.39,18c-.12,0-.23-.03-.34-.09-.1-.06-.18-.14-.24-.24-.06-.1-.09-.21-.09-.34v-2.66c0-.12.03-.23.09-.34.06-.1.14-.18.24-.24.1-.06.21-.09.34-.09h3.32v.45h-3.32c-.06,0-.11.02-.15.06s-.06.09-.06.15v2.66c0,.06.02.11.06.15.04.04.09.06.15."
"9.22.09h4.78v.65h-4.78Z\" fill=\"#fff\"/>\n" "06h3.32v.45h-3.32Z\" fill=\"#fff\"/>\n"
" <path d=\"M17.34,19.11v-5.75h4.8c.18,0,.34.04.48.13s.26.2.35.35c.08.14.13.3.13.48v1.69c0,.18-.04.34-.13.48-.09.14-.2.26-.35.35s-.31.13-.48.13h-4.15v2.14h-.65ZM18.3,16.31h3.84c.08,0,.16-.03.22-.09.06-.06.09-.13.09-.22v-1.69c0-.09-.03-.16-.09-.22" " <path d=\"M16.29,18v-3.99h3.33c.12,0,.23.03.34.09s.18.14.24.24c.06.1.09.21.09.33v1.17c0,.12-.03.23-.09.33-.06.1-.14.18-.24.24s-.21.09-.34.09h-2.88v1.49h-.45ZM16.95,16.06h2.66c.06,0,.11-.02.15-.06.04-.04.06-.09.06-.15v-1.17c0-.06-.02-.11-.06-.15"
"s-.13-.09-.22-.09h-3.84c-.09,0-.16.03-.22.09s-.09.13-.09.22v1.69c0,.09.03.16.09.22.06.06.13.09.22.09ZM22.21,19.11l-1.88-2.24h.85l1.89,2.23h0s-.86,0-.86,0Z\" fill=\"#fff\"/>\n" "s-.09-.06-.15-.06h-2.66c-.06,0-.11.02-.15.06s-.06.09-.06.15v1.17c0,.06.02.11.06.15.04.04.09.06.15.06ZM19.66,18l-1.3-1.55h.59l1.31,1.55h0s-.59,0-.59,0Z\" fill=\"#fff\"/>\n"
" <path d=\"M26.4,19.11v-2.17l-2.65-3.59h.74l2.23,2.82,2.21-2.82h.76l-2.65,3.59v2.17h-.65Z\" fill=\"#fff\"/>\n" " <path d=\"M22.57,18v-1.5l-1.84-2.49h.52l1.55,1.95,1.53-1.95h.53l-1.84,2.49v1.5h-.45Z\" fill=\"#fff\"/>\n"
" <path d=\"M31.03,19.11c-.18,0-.34-.04-.48-.13s-.26-.2-.35-.35c-.09-.15-.13-.31-.13-.48v-.22h.65v.22c0,.09.03.16.09.22.06.06.13.09.22.09h3.84c.08,0,.16-.03.22-.09.06-.06.09-.13.09-.22v-1.29c0-.08-.03-.16-.09-.22-.06-.06-.13-.09-.22-.09h-3.84c-.1" " <path d=\"M25.78,18c-.12,0-.23-.03-.34-.09s-.18-.14-.24-.24c-.06-.1-.09-.21-.09-.34v-.16h.45v.16c0,.06.02.11.06.15.04.04.09.06.15.06h2.66c.06,0,.11-.02.15-.06.04-.04.06-.09.06-.15v-.89c0-.06-.02-.11-.06-.15-.04-.04-.09-.06-.15-.06h-2.66c-.12,0-"
"8,0-.34-.04-.48-.13s-.26-.2-.35-.35c-.09-.14-.13-.3-.13-.48v-1.29c0-.18.04-.34.13-.48.08-.15.2-.26.35-.35s.31-.13.48-.13h3.84c.18,0,.34.04.48.13.15.09.26.2.35.35.08.15.13.31.13.48v.22h-.65v-.22c0-.09-.03-.16-.09-.22-.06-.06-.13-.09-.22-.09h-3.84c-.09" ".23-.03-.34-.09s-.18-.14-.24-.24c-.06-.1-.09-.21-.09-.33v-.89c0-.12.03-.23.09-.34.06-.1.14-.18.24-.24s.21-.09.34-.09h2.66c.12,0,.23.03.34.09.1.06.18.14.24.24.06.1.09.21.09.34v.16h-.45v-.16c0-.06-.02-.11-.06-.15-.04-.04-.09-.06-.15-.06h-2.66c-.06,0-.1"
",0-.16.03-.22.09-.06.06-.09.13-.09.22v1.29c0,.09.03.16.09.22s.13.09.22.09h3.84c.18,0,.34.04.48.13.15.09.26.2.35.35.08.14.13.3.13.48v1.29c0,.18-.04.34-.13.48-.09.15-.2.26-.35.35-.15.09-.31.13-.48.13h-3.84Z\" fill=\"#fff\"/>\n" "1.02-.15.06-.04.04-.06.09-.06.15v.89c0,.06.02.11.06.15s.09.06.15.06h2.66c.12,0,.23.03.34.09.1.06.18.14.24.24.06.1.09.21.09.33v.89c0,.12-.03.23-.09.34-.06.1-.14.18-.24.24-.1.06-.21.09-.34.09h-2.66Z\" fill=\"#fff\"/>\n"
" <path d=\"M38.96,19.11v-5.11h-2.56v-.65h5.76v.65h-2.55v5.11h-.65Z\" fill=\"#fff\"/>\n" " <path d=\"M31.28,18v-3.54h-1.77v-.45h3.99v.45h-1.77v3.54h-.45Z\" fill=\"#fff\"/>\n"
" <path d=\"M42.78,14.31c0-.18.04-.34.13-.48.09-.15.2-.26.35-.35.15-.09.31-.13.48-.13h3.84c.18,0,.34.04.48.13s.26.2.35.35c.09.15.13.31.13.48v4.8h-.65v-2.1h-4.46v2.1h-.65v-4.8ZM47.89,16.36v-2.05c0-.09-.03-.16-.09-.22-.06-.06-.13-.09-.22-.09h-3.84c" " <path d=\"M33.92,14.67c0-.12.03-.23.09-.34.06-.1.14-.18.24-.24.1-.06.21-.09.34-.09h2.66c.12,0,.23.03.34.09s.18.14.24.24c.06.1.09.21.09.34v3.33h-.45v-1.46h-3.1v1.46h-.45v-3.33ZM37.47,16.09v-1.42c0-.06-.02-.11-.06-.15-.04-.04-.09-.06-.15-.06h-2.6"
"-.08,0-.16.03-.22.09-.06.06-.09.13-.09.22v2.05h4.46Z\" fill=\"#fff\"/>\n" "6c-.06,0-.11.02-.15.06-.04.04-.06.09-.06.15v1.42h3.1Z\" fill=\"#fff\"/>\n"
" <path d=\"M49.46,19.11v-5.77h.65v5.12h5.11v.65h-5.76Z\" fill=\"#fff\"/>\n" " <path d=\"M38.56,18v-4h.45v3.55h3.55v.45h-3.99Z\" fill=\"#fff\"/>\n"
" <path d=\"M55.76,19.11v-5.76h.66v5.76h-.66Z\" fill=\"#fff\"/>\n" " <path d=\"M42.93,18v-3.99h.45v3.99h-.45Z\" fill=\"#fff\"/>\n"
" <path d=\"M57.35,19.11v-.89l5.02-4.22h-5.02v-.65h5.76v.89l-5.02,4.22h5.02v.65h-5.76Z\" fill=\"#fff\"/>\n" " <path d=\"M44.03,18v-.62l3.48-2.93h-3.48v-.45h3.99v.62l-3.48,2.93h3.48v.45h-3.99Z\" fill=\"#fff\"/>\n"
" <path d=\"M63.98,19.11v-5.76h5.26v.65h-4.61v1.9h3.7v.66h-3.7v1.9h4.61v.65h-5.26Z\" fill=\"#fff\"/>\n" " <path d=\"M48.63,18v-3.99h3.64v.45h-3.2v1.32h2.57v.46h-2.57v1.32h3.2v.45h-3.64Z\" fill=\"#fff\"/>\n"
" </g>\n" " </g>\n"
" </g>\n" " </g>\n"
" <g id=\"Ebene_3_Kopie_Kopie_Kopie\" data-name=\"Ebene 3 Kopie Kopie Kopie\">\n" " <g id=\"Ebene_3_Kopie\" data-name=\"Ebene 3 Kopie\">\n"
" <path d=\"M56,24.22l8-4,8,4h-16ZM48,20.22h16l-8-4-8,4ZM72,12.22v-4l-8,4h8ZM72,16.22l-8-4-8,4h16ZM69.61,1.42l-5.61,2.81h7.66c-.39-1.13-1.12-2.1-2.05-2.81ZM72,8.22l-8-4-8,4h16ZM48,12.22h16l-8-4-8,4ZM56,.22l-8,4h16L56,.22ZM48,28.22h16l-8-4-8,4ZM72,2" " <rect x=\"8\" y=\"8\" width=\"48\" height=\"16\" fill=\"#fffcfc\" opacity=\".17\"/>\n"
"0.22v-4l-8,4h8ZM56,24.22l-8-4-8,4h16ZM40,8.22l-8,4h16l-8-4ZM32,12.22l-8,4h16l-8-4ZM40,16.22l-8,4h16l-8-4ZM32,20.22l-8,4h16l-8-4ZM71.66,28.22c.21-.61.34-1.27.34-1.96v-2.04l-8,4h7.66ZM56,16.22l-8-4-8,4h16ZM32,28.22h16l-8-4-8,4ZM56,8.22l-8-4-8,4h16ZM8,2" " <polygon points=\"2 30 8 24 56 24 62 30 2 30\" fill=\"#fffcfc\" opacity=\".17\"/>\n"
"0.22h8l-8-4v4ZM24,32.22h16l-8-4-8,4ZM24,24.22l-8,4h16l-8-4ZM8,12.22h8l-8-4v4ZM16,20.22l-8,4h16l-8-4ZM10.39,31.03c1,.75,2.23,1.19,3.57,1.19h10.04l-8-4-5.61,2.81ZM64,28.22l-8,4h10.04c1.34,0,2.57-.45,3.57-1.19l-5.61-2.81ZM8.34,4.22h7.66l-5.61-2.81c-.94." " <polygon points=\"62 2 56 8 8 8 2 2 62 2\" fill=\"#fffcfc\" opacity=\".17\"/>\n"
"7-1.66,1.68-2.05,2.81ZM40,32.22h16l-8-4-8,4ZM8,26.27c0,.69.12,1.34.34,1.96h7.66l-8-4v2.04ZM40,.22l-8,4h16L40,.22ZM16,4.22l-8,4h16l-8-4ZM24,8.22l-8,4h16l-8-4ZM40,8.22l-8-4-8,4h16ZM16,12.22l-8,4h16l-8-4ZM24,.22l-8,4h16L24,.22ZM24,16.22l-8,4h16l-8-4Z\" " " <polygon points=\"56 24 56 8 62 2 62 30 56 24\" fill=\"#fffcfc\" opacity=\".17\"/>\n"
"fill=\"url(#Unbenannter_Verlauf_16)\" opacity=\".5\"/>\n" " <polygon points=\"8 8 8 24 2 30 2 2 8 8\" fill=\"#fffcfc\" opacity=\".17\"/>\n"
" <polygon points=\"8 24 5 27 2 30 2 24 8 24\" fill=\"#d1d1d1\" opacity=\".17\"/>\n"
" <polygon points=\"2 30 5 27 8 24 8 30 2 30\" fill=\"#fff\" opacity=\".17\"/>\n"
" <polygon points=\"8 30 8 24 14 27 20 30 8 30\" fill=\"#d1d1d1\" opacity=\".17\"/>\n"
" <polygon points=\"2 8 5 12 8 16 2 16 2 8\" fill=\"#d1d1d1\" opacity=\".17\"/>\n"
" <polygon points=\"20 30 26 27 32 24 32 30 20 30\" fill=\"#fff\" opacity=\".17\"/>\n"
" <polygon points=\"32 24 26 27 20 30 20 24 32 24\" fill=\"#d1d1d1\" opacity=\".17\"/>\n"
" <polygon points=\"8 16 5 12 2 8 8 8 8 16\" fill=\"#fff\" opacity=\".17\"/>\n"
" <polygon points=\"8 16 5 20 2 24 2 16 8 16\" fill=\"#d1d1d1\" opacity=\".17\"/>\n"
" <polygon points=\"20 24 20 30 14 27 8 24 20 24\" fill=\"#fff\" opacity=\".17\"/>\n"
" <polygon points=\"56 30 56 24 50 27 44 30 56 30\" fill=\"#d1d1d1\" opacity=\".17\"/>\n"
" <polygon points=\"44 30 38 27 32 24 32 30 44 30\" fill=\"#fff\" opacity=\".17\"/>\n"
" <polygon points=\"32 24 38 27 44 30 44 24 32 24\" fill=\"#d1d1d1\" opacity=\".17\"/>\n"
" <polygon points=\"44 24 44 30 50 27 56 24 44 24\" fill=\"#fff\" opacity=\".17\"/>\n"
" <polygon points=\"32 2 32 8 26 5 20 2 32 2\" fill=\"#fff\" opacity=\".17\"/>\n"
" <polygon points=\"20 2 14 5 8 8 8 2 20 2\" fill=\"#d1d1d1\" opacity=\".17\"/>\n"
" <polygon points=\"2 24 5 20 8 16 8 24 2 24\" fill=\"#fff\" opacity=\".17\"/>\n"
" <polygon points=\"8 8 14 5 20 2 20 8 8 8\" fill=\"#fff\" opacity=\".17\"/>\n"
" <polygon points=\"8 24 20 20 32 16 32 24 8 24\" fill=\"#fff\" opacity=\".17\"/>\n"
" <polygon points=\"56 24 44 20 32 16 32 24 56 24\" fill=\"#fff\" opacity=\".17\"/>\n"
" <polygon points=\"56 8 44 12 32 16 32 8 56 8\" fill=\"#fff\" opacity=\".17\"/>\n"
" <polygon points=\"8 8 20 12 32 16 32 8 8 8\" fill=\"#fff\" opacity=\".17\"/>\n"
" <polygon points=\"32 16 20 12 8 8 8 16 32 16\" fill=\"#d1d1d1\" opacity=\".17\"/>\n"
" <polygon points=\"32 16 44 12 56 8 56 16 32 16\" fill=\"#d1d1d1\" opacity=\".17\"/>\n"
" <polygon points=\"32 16 20 20 8 24 8 16 32 16\" fill=\"#d1d1d1\" opacity=\".17\"/>\n"
" <polygon points=\"32 16 44 20 56 24 56 16 32 16\" fill=\"#d1d1d1\" opacity=\".17\"/>\n"
" <polygon points=\"20 8 20 2 26 5 32 8 20 8\" fill=\"#d1d1d1\" opacity=\".17\"/>\n"
" <polygon points=\"32 2 32 8 38 5 44 2 32 2\" fill=\"#fff\" opacity=\".17\"/>\n"
" <polygon points=\"44 2 50 5 56 8 56 2 44 2\" fill=\"#d1d1d1\" opacity=\".17\"/>\n"
" <polygon points=\"56 8 50 5 44 2 44 8 56 8\" fill=\"#fff\" opacity=\".17\"/>\n"
" <polygon points=\"44 8 44 2 38 5 32 8 44 8\" fill=\"#d1d1d1\" opacity=\".17\"/>\n"
" <polygon points=\"8 2 8 8 5 5 2 2 8 2\" fill=\"#fff\" opacity=\".17\"/>\n"
" <polygon points=\"2 8 2 2 5 5 8 8 2 8\" fill=\"#d1d1d1\" opacity=\".17\"/>\n"
" <polygon points=\"56 24 59 27 62 30 62 24 56 24\" fill=\"#d1d1d1\" opacity=\".17\"/>\n"
" <polygon points=\"62 8 59 12 56 16 62 16 62 8\" fill=\"#d1d1d1\" opacity=\".17\"/>\n"
" <polygon points=\"56 16 59 12 62 8 56 8 56 16\" fill=\"#fff\" opacity=\".17\"/>\n"
" <polygon points=\"56 16 59 20 62 24 56 24 56 16\" fill=\"#fff\" opacity=\".17\"/>\n"
" <polygon points=\"62 30 59 27 56 24 56 30 62 30\" fill=\"#fff\" opacity=\".17\"/>\n"
" <polygon points=\"56 16 59 20 62 24 62 16 56 16\" fill=\"#d1d1d1\" opacity=\".17\"/>\n"
" <polygon points=\"56 2 56 8 59 5 62 2 56 2\" fill=\"#fff\" opacity=\".17\"/>\n"
" <polygon points=\"62 8 62 2 59 5 56 8 62 8\" fill=\"#d1d1d1\" opacity=\".17\"/>\n"
" </g>\n" " </g>\n"
"</svg>"; "</svg>";
@ -11592,8 +11666,8 @@ const char* getNamedResource (const char* resourceNameUTF8, int& numBytes)
case 0x31532e06: numBytes = 317; return low_cut_icon_svg; case 0x31532e06: numBytes = 317; return low_cut_icon_svg;
case 0x7e8ca05e: numBytes = 410; return low_shelf_icon_svg; case 0x7e8ca05e: numBytes = 410; return low_shelf_icon_svg;
case 0x4df4bf1e: numBytes = 350; return preset_menu_icon_svg; case 0x4df4bf1e: numBytes = 350; return preset_menu_icon_svg;
case 0xd842aaab: numBytes = 4212; return crystalize_button_active_icon_svg; case 0xd842aaab: numBytes = 6343; return crystalize_button_active_icon_svg;
case 0x885a7642: numBytes = 4141; return crystalize_button_passive_icon_svg; case 0x885a7642: numBytes = 6279; return crystalize_button_passive_icon_svg;
case 0xe49e0f15: numBytes = 406; return bypass_icon_svg; case 0xe49e0f15: numBytes = 406; return bypass_icon_svg;
default: break; default: break;
} }

View File

@ -48,10 +48,10 @@ namespace BinaryData
const int preset_menu_icon_svgSize = 350; const int preset_menu_icon_svgSize = 350;
extern const char* crystalize_button_active_icon_svg; extern const char* crystalize_button_active_icon_svg;
const int crystalize_button_active_icon_svgSize = 4212; const int crystalize_button_active_icon_svgSize = 6343;
extern const char* crystalize_button_passive_icon_svg; extern const char* crystalize_button_passive_icon_svg;
const int crystalize_button_passive_icon_svgSize = 4141; const int crystalize_button_passive_icon_svgSize = 6279;
extern const char* bypass_icon_svg; extern const char* bypass_icon_svg;
const int bypass_icon_svgSize = 406; const int bypass_icon_svgSize = 406;

View File

@ -32,6 +32,7 @@ void CrystalizerEQAudioProcessorEditor::setupSliders() {
} }
gainLookAndFeel = std::make_unique<DesignSystem::Components::GainSliderLookAndFeel>(); gainLookAndFeel = std::make_unique<DesignSystem::Components::GainSliderLookAndFeel>();
freqQLookAndFeel = std::make_unique<DesignSystem::Components::FreqQSliderLookAndFeel>(); freqQLookAndFeel = std::make_unique<DesignSystem::Components::FreqQSliderLookAndFeel>();
slopeLookAndFeel = std::make_unique<DesignSystem::Components::SlopeSliderLookAndFeel>();
globalLookAndFeel = std::make_unique<DesignSystem::Components::GlobalSliderLookAndFeel>(); globalLookAndFeel = std::make_unique<DesignSystem::Components::GlobalSliderLookAndFeel>();
lowBandGainSlider.setLookAndFeel(gainLookAndFeel.get()); lowBandGainSlider.setLookAndFeel(gainLookAndFeel.get());
@ -40,6 +41,9 @@ void CrystalizerEQAudioProcessorEditor::setupSliders() {
peak3GainSlider.setLookAndFeel(gainLookAndFeel.get()); peak3GainSlider.setLookAndFeel(gainLookAndFeel.get());
highBandGainSlider.setLookAndFeel(gainLookAndFeel.get()); highBandGainSlider.setLookAndFeel(gainLookAndFeel.get());
lowBandSlopeSlider.setLookAndFeel(slopeLookAndFeel.get());
highBandSlopeSlider.setLookAndFeel(slopeLookAndFeel.get());
inputSlider.setLookAndFeel(globalLookAndFeel.get()); inputSlider.setLookAndFeel(globalLookAndFeel.get());
outputSlider.setLookAndFeel(globalLookAndFeel.get()); outputSlider.setLookAndFeel(globalLookAndFeel.get());
@ -268,6 +272,7 @@ void CrystalizerEQAudioProcessorEditor::disableLowBand(const float target) {
lowBandGainLabel .setEnabled(isToggled); lowBandGainLabel .setEnabled(isToggled);
lowBandQSlider .setEnabled(isToggled); lowBandQSlider .setEnabled(isToggled);
lowBandQLabel .setEnabled(isToggled); lowBandQLabel .setEnabled(isToggled);
}; };
//endregion disableLowBand //endregion disableLowBand
@ -392,6 +397,7 @@ void CrystalizerEQAudioProcessorEditor::addComponentsToLayout() {
{ {
filterArea.addAndMakeVisible(lowFilterArea); filterArea.addAndMakeVisible(lowFilterArea);
lowBandModeBox.addAndMakeVisible(lowBandModeLabel);
lowBandModeBox.addAndMakeVisible(lowBypass); lowBandModeBox.addAndMakeVisible(lowBypass);
lowBandModeBox.addAndMakeVisible(lowCut); lowBandModeBox.addAndMakeVisible(lowCut);
lowBandModeBox.addAndMakeVisible(lowBell); lowBandModeBox.addAndMakeVisible(lowBell);
@ -405,7 +411,13 @@ void CrystalizerEQAudioProcessorEditor::addComponentsToLayout() {
lowFilterArea.addAndMakeVisible(lowBandGainLabel); lowFilterArea.addAndMakeVisible(lowBandGainLabel);
lowFilterArea.addAndMakeVisible(lowBandQLabel); lowFilterArea.addAndMakeVisible(lowBandQLabel);
lowFilterArea.addAndMakeVisible(lowBandFreqLabel); lowFilterArea.addAndMakeVisible(lowBandFreqLabel);
lowBandSlopeSlider.addAndMakeVisible(low12);
lowBandSlopeSlider.addAndMakeVisible(low24);
lowBandSlopeSlider.addAndMakeVisible(low36);
lowBandSlopeSlider.addAndMakeVisible(low48);
lowFilterArea.addAndMakeVisible(lowBandSlopeSlider); lowFilterArea.addAndMakeVisible(lowBandSlopeSlider);
lowFilterArea.addAndMakeVisible(lowBandGainSlider); lowFilterArea.addAndMakeVisible(lowBandGainSlider);
lowFilterArea.addAndMakeVisible(lowBandQSlider); lowFilterArea.addAndMakeVisible(lowBandQSlider);
lowFilterArea.addAndMakeVisible(lowBandFreqSlider); lowFilterArea.addAndMakeVisible(lowBandFreqSlider);
@ -447,6 +459,7 @@ void CrystalizerEQAudioProcessorEditor::addComponentsToLayout() {
{ {
filterArea.addAndMakeVisible(highFilterArea); filterArea.addAndMakeVisible(highFilterArea);
highBandModeBox.addAndMakeVisible(highBandModeLabel);
highBandModeBox.addAndMakeVisible(highBypass); highBandModeBox.addAndMakeVisible(highBypass);
highBandModeBox.addAndMakeVisible(highCut); highBandModeBox.addAndMakeVisible(highCut);
highBandModeBox.addAndMakeVisible(highBell); highBandModeBox.addAndMakeVisible(highBell);
@ -459,7 +472,13 @@ void CrystalizerEQAudioProcessorEditor::addComponentsToLayout() {
highFilterArea.addAndMakeVisible(highBandGainLabel); highFilterArea.addAndMakeVisible(highBandGainLabel);
highFilterArea.addAndMakeVisible(highBandQLabel); highFilterArea.addAndMakeVisible(highBandQLabel);
highFilterArea.addAndMakeVisible(highBandFreqLabel); highFilterArea.addAndMakeVisible(highBandFreqLabel);
highBandSlopeSlider.addAndMakeVisible(high12);
highBandSlopeSlider.addAndMakeVisible(high24);
highBandSlopeSlider.addAndMakeVisible(high36);
highBandSlopeSlider.addAndMakeVisible(high48);
highFilterArea.addAndMakeVisible(highBandSlopeSlider); highFilterArea.addAndMakeVisible(highBandSlopeSlider);
highFilterArea.addAndMakeVisible(highBandGainSlider); highFilterArea.addAndMakeVisible(highBandGainSlider);
highFilterArea.addAndMakeVisible(highBandQSlider); highFilterArea.addAndMakeVisible(highBandQSlider);
highFilterArea.addAndMakeVisible(highBandFreqSlider); highFilterArea.addAndMakeVisible(highBandFreqSlider);
@ -494,6 +513,11 @@ void CrystalizerEQAudioProcessorEditor::setupLabels() {
setupLabel (lowBandSlopeLabel, "Slope"); setupLabel (lowBandSlopeLabel, "Slope");
setupLabel (lowBandGainLabel, "Low\nGain"); setupLabel (lowBandGainLabel, "Low\nGain");
setupLabel(lowBandQLabel, "Low\nQ"); setupLabel(lowBandQLabel, "Low\nQ");
setupLabel(lowBandModeLabel, "Band Mode");
setupLabel(low12, "12");
setupLabel(low24, "24");
setupLabel(low36, "36");
setupLabel(low48, "48");
//PEAK 1 //PEAK 1
setupLabel (peak1FreqLabel,"Low-Mid\nHz"); setupLabel (peak1FreqLabel,"Low-Mid\nHz");
@ -515,6 +539,11 @@ void CrystalizerEQAudioProcessorEditor::setupLabels() {
setupLabel (highBandSlopeLabel, "Slope"); setupLabel (highBandSlopeLabel, "Slope");
setupLabel (highBandGainLabel, "High\nGain"); setupLabel (highBandGainLabel, "High\nGain");
setupLabel(highBandQLabel, "High\nQ"); setupLabel(highBandQLabel, "High\nQ");
setupLabel(highBandModeLabel, "Band Mode");
setupLabel(high12, "12");
setupLabel(high24, "24");
setupLabel(high36, "36");
setupLabel(high48, "48");
setupLabel(presetBoxLabel, "Presets"); setupLabel(presetBoxLabel, "Presets");
@ -725,7 +754,6 @@ CrystalizerEQAudioProcessorEditor::CrystalizerEQAudioProcessorEditor (Crystalize
setupSliders(); setupSliders();
initPresetSystem(); initPresetSystem();
addAndMakeVisible (testNoiseButton); addAndMakeVisible (testNoiseButton);
testNoiseButton.onClick = [this]() { testNoiseButton.onClick = [this]() {
@ -748,7 +776,6 @@ CrystalizerEQAudioProcessorEditor::CrystalizerEQAudioProcessorEditor (Crystalize
}; };
} }
CrystalizerEQAudioProcessorEditor::~CrystalizerEQAudioProcessorEditor() { CrystalizerEQAudioProcessorEditor::~CrystalizerEQAudioProcessorEditor() {
@ -834,7 +861,7 @@ void CrystalizerEQAudioProcessorEditor::paint (juce::Graphics& g)
auto hBH = hB.getHeight(); auto hBH = hB.getHeight();
auto hBPad = ((hBY + mPY) - hBH) / 2; auto hBPad = ((hBY + mPY) - hBH) / 2;
g.fillRect(hBX, hBY, hBW, mPY - hBPad); g.fillRect(hBX, hBY, hBW, mPY - hBPad);
paintBorderLines(g); //paintBorderLines(g);
g.setColour(Colours::SURFACECOLOUR); g.setColour(Colours::SURFACECOLOUR);
@ -844,7 +871,7 @@ void CrystalizerEQAudioProcessorEditor::paint (juce::Graphics& g)
auto pAWidth = pA.getWidth(); auto pAWidth = pA.getWidth();
auto pAHeight = pA.getHeight(); auto pAHeight = pA.getHeight();
g.fillRoundedRectangle(pAX, pAY - 10.f, pAWidth, pAHeight + 10.f, 10.0f); g.fillRoundedRectangle(pAX, pAY - 10.f, pAWidth, pAHeight + 10.f, 10.0f);
paintBorderLines(g); //paintBorderLines(g);
const auto fA = getLocalArea(&filterArea, filterArea.getLocalBounds()); const auto fA = getLocalArea(&filterArea, filterArea.getLocalBounds());
const int fABorderWidth = 3; const int fABorderWidth = 3;
@ -863,12 +890,13 @@ void CrystalizerEQAudioProcessorEditor::paint (juce::Graphics& g)
g.fillRect(fA); g.fillRect(fA);
paintBorderLines(g); paintBorderLines(g);
paintModeBoxBorders(g); //paintModeBoxBorders(g);
g.setColour(Colours::SURFACEBYPASS); g.setColour(Colours::SURFACEBYPASS);
const auto fB = getLocalArea(&footerBar, footerBar.getLocalBounds()); const auto fB = getLocalArea(&footerBar, footerBar.getLocalBounds());
g.fillRect(fB); g.fillRect(fB);
if constexpr (false) // -> auf false setzen, wenn nicht gebraucht if constexpr (false) // -> auf false setzen, wenn nicht gebraucht
{ {
for (auto* c : getChildren()) // headerBar, mainPanel, footerBar for (auto* c : getChildren()) // headerBar, mainPanel, footerBar
@ -1006,7 +1034,6 @@ void CrystalizerEQAudioProcessorEditor::paint (juce::Graphics& g)
//region paintBorderLines //region paintBorderLines
void CrystalizerEQAudioProcessorEditor::paintBorderLines(juce::Graphics &g) { void CrystalizerEQAudioProcessorEditor::paintBorderLines(juce::Graphics &g) {
//TODO: BRODER LINES DONT ALIGN WITH MARGIN FROM ANALYZERAREA AND FILTERAREA
g.setColour(DesignSystem::Colours::BACKGROUNDCOLOUR); g.setColour(DesignSystem::Colours::BACKGROUNDCOLOUR);
auto prevRight = (float) lowFilterArea.getRight(); auto prevRight = (float) lowFilterArea.getRight();
@ -1015,7 +1042,7 @@ void CrystalizerEQAudioProcessorEditor::paintBorderLines(juce::Graphics &g) {
const auto area = getLocalArea(c, c->getLocalBounds()); const auto area = getLocalArea(c, c->getLocalBounds());
const float xAvg = ((float) area.getX() - prevRight) / 2; const float xAvg = ((float) area.getX() - prevRight) / 2;
const int x = area.getX() - xAvg; const int x = area.getX() - xAvg + (filterAreaMargin / 2);
prevRight = (float) c->getRight(); prevRight = (float) c->getRight();
const auto top = (float) area.getY(); const auto top = (float) area.getY();
@ -1050,6 +1077,7 @@ void CrystalizerEQAudioProcessorEditor::setKnobVisibility() {
lowBandGainLabel .setEnabled(lowMode >= 2); lowBandGainLabel .setEnabled(lowMode >= 2);
lowBandQSlider .setEnabled(lowMode >= 1); lowBandQSlider .setEnabled(lowMode >= 1);
lowBandQLabel .setEnabled(lowMode >= 1); lowBandQLabel .setEnabled(lowMode >= 1);
lowBandModeLabel.setEnabled (lowMode >= 1);
int highMode = (int) audioProcessor.apvts int highMode = (int) audioProcessor.apvts
.getRawParameterValue("HighBandModes")->load(); // 0..3 .getRawParameterValue("HighBandModes")->load(); // 0..3
@ -1066,6 +1094,7 @@ void CrystalizerEQAudioProcessorEditor::setKnobVisibility() {
highBandGainLabel .setEnabled(highMode >= 2); highBandGainLabel .setEnabled(highMode >= 2);
highBandQSlider .setEnabled(highMode >= 1); highBandQSlider .setEnabled(highMode >= 1);
highBandQLabel .setEnabled(highMode >= 1); highBandQLabel .setEnabled(highMode >= 1);
highBandModeLabel.setEnabled (highMode >= 1);
} }
//endregion setKnobVisibility //endregion setKnobVisibility
@ -1126,6 +1155,8 @@ void CrystalizerEQAudioProcessorEditor::resized()
setupFooter(); setupFooter();
//setSliderSizes(); //setSliderSizes();
const auto testBounds = mainPanel.getLocalBounds(); const auto testBounds = mainPanel.getLocalBounds();
const auto testWidth = testBounds.getWidth(); const auto testWidth = testBounds.getWidth();
const auto testHeight = testBounds.getHeight(); const auto testHeight = testBounds.getHeight();
@ -1252,7 +1283,6 @@ void CrystalizerEQAudioProcessorEditor::setupBody() {
const auto bodyHeight = static_cast<float>(bounds.getHeight()); const auto bodyHeight = static_cast<float>(bounds.getHeight());
const auto bodyWidth = static_cast<float>(bounds.getWidth()); const auto bodyWidth = static_cast<float>(bounds.getWidth());
const auto bodyColWidth = bodyWidth / 5.0f; const auto bodyColWidth = bodyWidth / 5.0f;
const int margin = 15;
Layout::GridSpec bodySpec{ Layout::GridSpec bodySpec{
/* cols */ { Layout::fr(1), Layout::pxTrack(bodyColWidth), Layout::pxTrack(bodyColWidth), Layout::pxTrack(bodyColWidth), Layout::fr(1) }, /* cols */ { Layout::fr(1), Layout::pxTrack(bodyColWidth), Layout::pxTrack(bodyColWidth), Layout::pxTrack(bodyColWidth), Layout::fr(1) },
@ -1263,10 +1293,10 @@ void CrystalizerEQAudioProcessorEditor::setupBody() {
}; };
Layout::grid(bounds, bodySpec, { Layout::grid(bounds, bodySpec, {
Layout::area(analyzerArea, 1, 2, 2, 5) Layout::area(analyzerArea, 1, 2, 2, 5)
.withMargin(juce::GridItem::Margin(margin, 0, margin, 0)), .withMargin(juce::GridItem::Margin(filterAreaMargin, 0, filterAreaMargin, 0)),
Layout::area(crystalizeButton, 1, 5, 2, 6), Layout::area(crystalizeButton, 1, 5, 2, 6),
Layout::area(filterArea, 2, 1, 3, 6) Layout::area(filterArea, 2, 1, 3, 6)
.withMargin(juce::GridItem::Margin(0, margin, 0, margin)) .withMargin(juce::GridItem::Margin(0, filterAreaMargin, 0, filterAreaMargin))
}); });
@ -1318,6 +1348,7 @@ void CrystalizerEQAudioProcessorEditor::setupLowBandLayout() {
const auto refH = getReferenceCell()[1]; const auto refH = getReferenceCell()[1];
const auto gainSize = refH * gainMod; const auto gainSize = refH * gainMod;
const auto offSetToGainTop = gainSize; const auto offSetToGainTop = gainSize;
const float labelPadding = Components::SlopeSliderLookAndFeel::labelPadding * 2;
Layout::GridSpec lowBandSpec{ Layout::GridSpec lowBandSpec{
/* cols */ { Layout::fr(1), Layout::pxTrack(knobColWidth), Layout::fr(1) }, /* cols */ { Layout::fr(1), Layout::pxTrack(knobColWidth), Layout::fr(1) },
@ -1346,13 +1377,13 @@ void CrystalizerEQAudioProcessorEditor::setupLowBandLayout() {
.withAlignSelf(juce::GridItem::AlignSelf::center) .withAlignSelf(juce::GridItem::AlignSelf::center)
.withJustifySelf(juce::GridItem::JustifySelf::center), .withJustifySelf(juce::GridItem::JustifySelf::center),
Layout::area(lowBandSlopeSlider, 3, 3, 4, 4) Layout::area(lowBandSlopeSlider, 3, 1, 4, 2)
.withWidth(refW * slopeMod) .withWidth(refW * slopeMod + labelPadding)
.withHeight(refH * slopeMod) .withHeight(refH * slopeMod + labelPadding)
.withAlignSelf(juce::GridItem::AlignSelf::center) .withAlignSelf(juce::GridItem::AlignSelf::center)
.withJustifySelf(juce::GridItem::JustifySelf::center), .withJustifySelf(juce::GridItem::JustifySelf::center),
Layout::area(lowBandModeBox, 3, 1, 4, 3), Layout::area(lowBandModeBox, 3, 2, 4, 4),
Layout::area(lowBandFreqLabel, 2, 1, 3, 2) Layout::area(lowBandFreqLabel, 2, 1, 3, 2)
@ -1360,8 +1391,8 @@ void CrystalizerEQAudioProcessorEditor::setupLowBandLayout() {
Layout::area(lowBandGainLabel, 1, 2, 2, 3), Layout::area(lowBandGainLabel, 1, 2, 2, 3),
Layout::area(lowBandQLabel, 2, 3, 3, 4) Layout::area(lowBandQLabel, 2, 3, 3, 4)
.withMargin(juce::GridItem::Margin(-offSetToGainTop, 0, 0, 0)), .withMargin(juce::GridItem::Margin(-offSetToGainTop, 0, 0, 0)),
Layout::area(lowBandSlopeLabel, 3, 3, 4, 4) Layout::area(lowBandSlopeLabel, 3, 1, 4, 2)
.withMargin(juce::GridItem::Margin(-offSetToGainTop / 2, 0, 0, 0)), .withMargin(juce::GridItem::Margin(-offSetToGainTop / 1.5f, 0, 0, 0)),
}); });
@ -1370,20 +1401,23 @@ void CrystalizerEQAudioProcessorEditor::setupLowBandLayout() {
const auto modeBoxAreaWidth = static_cast<float>(modeBoxBounds.getWidth()); const auto modeBoxAreaWidth = static_cast<float>(modeBoxBounds.getWidth());
const auto modeBoxAreaHeight = static_cast<float>(modeBoxBounds.getHeight()); const auto modeBoxAreaHeight = static_cast<float>(modeBoxBounds.getHeight());
const auto modeBoxButtonColWidth = modeBoxAreaWidth / 4.0f; const auto modeBoxButtonColWidth = modeBoxAreaWidth / 4.0f;
const auto slopeH = lowBandSlopeSlider.getY() - lowBandModeBox.getY() + lowBandModeLabel.getFont().getHeight() / 2;
Layout::GridSpec lowBandModeBoxSpec{ Layout::GridSpec lowBandModeBoxSpec{
/* cols */ { Layout::fr(1), Layout::fr(1), Layout::fr(1), Layout::fr(1) }, /* cols */ { Layout::fr(1), Layout::fr(1), Layout::fr(1), Layout::fr(1) },
/* rows */ { Layout::fr(1)}, /* rows */ { Layout::fr(1), Layout::fr(1)},
/* colGap */ Spacing::SizeMode::XS, /* colGap */ Spacing::SizeMode::XS,
/* rowGap */ Spacing::SizeMode::XS, /* rowGap */ Spacing::SizeMode::XS,
/* pad */ Layout::padding(Spacing::SizeMode::XS) /* pad */ Layout::padding(Spacing::SizeMode::XS)
}; };
Layout::grid(modeBoxBounds, lowBandModeBoxSpec, { Layout::grid(modeBoxBounds, lowBandModeBoxSpec, {
Layout::area(lowBypass, 1, 1, 2, 2), Layout::area(lowBandModeLabel, 1, 2, 2, 4)
Layout::area(lowCut, 1, 2, 2, 3), .withMargin(juce::GridItem::Margin(slopeH , 0, 0, 0)),
Layout::area(lowBell, 1, 3, 2, 4), Layout::area(lowBypass, 1, 1, 3, 2),
Layout::area(lowShelf, 1, 4, 2, 5) Layout::area(lowCut, 1, 2, 3, 3),
Layout::area(lowBell, 1, 3, 3, 4),
Layout::area(lowShelf, 1, 4, 3, 5)
}); });
} }
//endregion setupLowBandLayout //endregion setupLowBandLayout
@ -1549,6 +1583,8 @@ void CrystalizerEQAudioProcessorEditor::setupHighBandLayout() {
const auto refH = getReferenceCell()[1]; const auto refH = getReferenceCell()[1];
const auto gainSize = refH * gainMod; const auto gainSize = refH * gainMod;
const auto offSetToGainTop = gainSize; const auto offSetToGainTop = gainSize;
const float labelPadding = Components::SlopeSliderLookAndFeel::labelPadding * 2;
Layout::GridSpec highBandSpec{ Layout::GridSpec highBandSpec{
/* cols */ { Layout::fr(1), Layout::pxTrack(knobColWidth), Layout::fr(1) }, /* cols */ { Layout::fr(1), Layout::pxTrack(knobColWidth), Layout::fr(1) },
@ -1577,12 +1613,12 @@ void CrystalizerEQAudioProcessorEditor::setupHighBandLayout() {
.withAlignSelf(juce::GridItem::AlignSelf::center) .withAlignSelf(juce::GridItem::AlignSelf::center)
.withJustifySelf(juce::GridItem::JustifySelf::center), .withJustifySelf(juce::GridItem::JustifySelf::center),
Layout::area(highBandModeBox, 3, 2, 4, 4), Layout::area(highBandModeBox, 3, 1, 4, 3),
Layout::area(highBandSlopeSlider, 3, 1, 4, 2) Layout::area(highBandSlopeSlider, 3, 3, 4, 4)
.withWidth(refW * slopeMod) .withWidth(refW * slopeMod + labelPadding)
.withHeight(refH * slopeMod) .withHeight(refH * slopeMod + labelPadding)
.withAlignSelf(juce::GridItem::AlignSelf::center) .withAlignSelf(juce::GridItem::AlignSelf::center)
.withJustifySelf(juce::GridItem::JustifySelf::center), .withJustifySelf(juce::GridItem::JustifySelf::center),
@ -1591,8 +1627,8 @@ void CrystalizerEQAudioProcessorEditor::setupHighBandLayout() {
Layout::area(highBandGainLabel, 1, 2, 2, 3), Layout::area(highBandGainLabel, 1, 2, 2, 3),
Layout::area(highBandQLabel, 2, 3, 3, 4) Layout::area(highBandQLabel, 2, 3, 3, 4)
.withMargin(juce::GridItem::Margin(-offSetToGainTop, 0, 0, 0)), .withMargin(juce::GridItem::Margin(-offSetToGainTop, 0, 0, 0)),
Layout::area(highBandSlopeLabel, 3, 1, 4, 2) Layout::area(highBandSlopeLabel, 3, 3, 4, 4)
.withMargin(juce::GridItem::Margin(-offSetToGainTop / 2, 0, 0, 0)), .withMargin(juce::GridItem::Margin(-offSetToGainTop / 1.5f, 0, 0, 0)),
}); });
@ -1600,20 +1636,23 @@ void CrystalizerEQAudioProcessorEditor::setupHighBandLayout() {
const auto modeBoxAreaWidth = static_cast<float>(modeBoxBounds.getWidth()); const auto modeBoxAreaWidth = static_cast<float>(modeBoxBounds.getWidth());
const auto modeBoxAreaHeight = static_cast<float>(modeBoxBounds.getHeight()); const auto modeBoxAreaHeight = static_cast<float>(modeBoxBounds.getHeight());
const auto modeBoxButtonColWidth = modeBoxAreaWidth / 4.0f; const auto modeBoxButtonColWidth = modeBoxAreaWidth / 4.0f;
const auto slopeH = highBandSlopeSlider.getY() - highBandModeBox.getY() + highBandModeLabel.getFont().getHeight() / 2;
Layout::GridSpec highBandModeBoxSpec{ Layout::GridSpec highBandModeBoxSpec{
/* cols */ { Layout::fr(1), Layout::fr(1), Layout::fr(1), Layout::fr(1) }, /* cols */ { Layout::fr(1), Layout::fr(1), Layout::fr(1), Layout::fr(1) },
/* rows */ { Layout::fr(1)}, /* rows */ { Layout::fr(1), Layout::fr(1)},
/* colGap */ Spacing::SizeMode::XS, /* colGap */ Spacing::SizeMode::XS,
/* rowGap */ Spacing::SizeMode::XS, /* rowGap */ Spacing::SizeMode::XS,
/* pad */ Layout::padding(Spacing::SizeMode::XS) /* pad */ Layout::padding(Spacing::SizeMode::XS)
}; };
Layout::grid(modeBoxBounds, highBandModeBoxSpec, { Layout::grid(modeBoxBounds, highBandModeBoxSpec, {
Layout::area(highBypass, 1, 4, 2, 5), Layout::area(highBandModeLabel, 1, 2, 2, 4)
Layout::area(highCut, 1, 3, 2, 4), .withMargin(juce::GridItem::Margin(slopeH , 0, 0, 0)),
Layout::area(highBell, 1, 2, 2, 3), Layout::area(highBypass, 1, 4, 3, 5),
Layout::area(highShelf, 1, 1, 2, 2) Layout::area(highCut, 1, 3, 3, 4),
Layout::area(highBell, 1, 2, 3, 3),
Layout::area(highShelf, 1, 1, 3, 2)
}); });
} }
//endregion setupHighBandLayout //endregion setupHighBandLayout

View File

@ -179,22 +179,28 @@ public:
inputAttach, outputAttach; inputAttach, outputAttach;
juce::Label titleLabel, testNoiseLabel, juce::Label titleLabel, testNoiseLabel,
lowBandFreqLabel, lowBandSlopeLabel, lowBandGainLabel, lowBandQLabel, lowBandFreqLabel, lowBandSlopeLabel, lowBandGainLabel, lowBandQLabel, lowBandModeLabel,
low12, low24, low36, low48,
peak1FreqLabel, peak1GainLabel, peak1QLabel, peak1FreqLabel, peak1GainLabel, peak1QLabel,
peak2FreqLabel, peak2GainLabel, peak2QLabel, peak2FreqLabel, peak2GainLabel, peak2QLabel,
peak3FreqLabel, peak3GainLabel, peak3QLabel, peak3FreqLabel, peak3GainLabel, peak3QLabel,
highBandFreqLabel, highBandSlopeLabel, highBandGainLabel, highBandQLabel, highBandFreqLabel, highBandSlopeLabel, highBandGainLabel, highBandQLabel, highBandModeLabel,
high12, high24, high36, high48,
inputLabel, outputLabel, inputLabel, outputLabel,
presetBoxLabel; presetBoxLabel;
const juce::Array<juce::Label*> sliderLabels = { const juce::Array<juce::Label*> sliderLabels = {
&lowBandFreqLabel, &lowBandSlopeLabel, &lowBandGainLabel, &lowBandQLabel, &lowBandFreqLabel, &lowBandSlopeLabel, &lowBandGainLabel, &lowBandQLabel, &lowBandModeLabel,
&peak1FreqLabel, &peak1GainLabel, &peak1QLabel, &peak1FreqLabel, &peak1GainLabel, &peak1QLabel,
&peak2FreqLabel, &peak2GainLabel, &peak2QLabel, &peak2FreqLabel, &peak2GainLabel, &peak2QLabel,
&peak3FreqLabel, &peak3GainLabel, &peak3QLabel, &peak3FreqLabel, &peak3GainLabel, &peak3QLabel,
&highBandFreqLabel, &highBandSlopeLabel, &highBandGainLabel, &highBandQLabel, &highBandFreqLabel, &highBandSlopeLabel, &highBandGainLabel, &highBandQLabel, &highBandModeLabel,
&inputLabel, &outputLabel &inputLabel, &outputLabel
}; };
const juce::Array<juce::Label*> slopeLabels = {
&low12, &low24, &low36, &low48,
&high12, &high24, &high36, &high48
};
juce::TextButton testNoiseButton, resetButton, savePresetButton, deletePresetButton; juce::TextButton testNoiseButton, resetButton, savePresetButton, deletePresetButton;
@ -264,6 +270,7 @@ private:
std::unique_ptr<AXIOM::DesignSystem::Components::BaseSliderLookAndFeel> baseLookAndFeel; std::unique_ptr<AXIOM::DesignSystem::Components::BaseSliderLookAndFeel> baseLookAndFeel;
std::unique_ptr<DesignSystem::Components::GainSliderLookAndFeel> gainLookAndFeel; std::unique_ptr<DesignSystem::Components::GainSliderLookAndFeel> gainLookAndFeel;
std::unique_ptr<DesignSystem::Components::FreqQSliderLookAndFeel> freqQLookAndFeel; std::unique_ptr<DesignSystem::Components::FreqQSliderLookAndFeel> freqQLookAndFeel;
std::unique_ptr<DesignSystem::Components::SlopeSliderLookAndFeel> slopeLookAndFeel;
std::unique_ptr<DesignSystem::Components::GlobalSliderLookAndFeel> globalLookAndFeel; std::unique_ptr<DesignSystem::Components::GlobalSliderLookAndFeel> globalLookAndFeel;
std::unique_ptr<Components::BypassButtonLookAndFeel> bypassButtonLookAndFeel; std::unique_ptr<Components::BypassButtonLookAndFeel> bypassButtonLookAndFeel;
std::unique_ptr<Components::PresetMenuButtonLookAndFeel> presetMenuButtonLookAndFeel; std::unique_ptr<Components::PresetMenuButtonLookAndFeel> presetMenuButtonLookAndFeel;
@ -326,6 +333,8 @@ private:
const float slopeMod = SliderStyles::Size::getSliderSizeMod(SliderStyles::Size::SizeMode::Slope); const float slopeMod = SliderStyles::Size::getSliderSizeMod(SliderStyles::Size::SizeMode::Slope);
const float globalMod = SliderStyles::Size::getSliderSizeMod(SliderStyles::Size::SizeMode::Global); const float globalMod = SliderStyles::Size::getSliderSizeMod(SliderStyles::Size::SizeMode::Global);
const float filterAreaMargin = 15.0f;
bool isAnimatingCrystalize = false; bool isAnimatingCrystalize = false;
bool isFadingToActive = false; bool isFadingToActive = false;

View File

@ -64,7 +64,7 @@ CrystalizerEQAudioProcessor::createParameterLayout() {
params.push_back (std::make_unique<juce::AudioParameterFloat>( params.push_back (std::make_unique<juce::AudioParameterFloat>(
"Peak2Gain", "Peak2 Gain (dB)", "Peak2Gain", "Peak2 Gain (dB)",
juce::NormalisableRange<float>(-48.f, 48.f, 0.1f), 0.f)); juce::NormalisableRange<float>(-24.f, 24.f, 0.1f), 0.f));
params.push_back (std::make_unique<juce::AudioParameterFloat>( params.push_back (std::make_unique<juce::AudioParameterFloat>(
"Peak2Q", "Peak2 Q", "Peak2Q", "Peak2 Q",