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 "JuceLibraryCode/BinaryData.h"
#include "PluginEditor.h"
namespace AXIOM {
class DesignSystem : public juce::LookAndFeel_V4 {
@ -655,6 +655,7 @@ class PresetMenuButtonLookAndFeel : public juce::LookAndFeel_V4 {
const bool isToggled = button.getToggleState();
auto bounds = button.getLocalBounds().toFloat();
auto iconSize = juce::jmin(bounds.getWidth(), bounds.getHeight()) * 0.5f;
auto hoverFactor = isHovered ? 1.05f : 1.0f;
auto iconBounds = juce::Rectangle<float>(iconSize * hoverFactor, iconSize * hoverFactor)
@ -671,8 +672,6 @@ class PresetMenuButtonLookAndFeel : public juce::LookAndFeel_V4 {
juce::RectanglePlacement::centred, passiveIconOpacity);
}
}
private:
@ -872,11 +871,10 @@ class PresetMenuButtonLookAndFeel : public juce::LookAndFeel_V4 {
label->setColour(juce::Label::backgroundColourId, 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->setInterceptsMouseClicks (false, false);
Typography::applyToLabel(*label, Typography::Style::Mono, 1.f);
return label;
}
juce::Slider::SliderLayout getSliderLayout (juce::Slider& slider) override
@ -921,8 +919,6 @@ class PresetMenuButtonLookAndFeel : public juce::LookAndFeel_V4 {
g.setColour(Colours::ACCENTCOLOUR);
g.fillPath(p);
//TODO: ON BYPASS SET TO RING TO SURFACEHOVER, ACCENT TO WEAKACCENTHOVER
}
};
class GainSliderLookAndFeel : public BaseSliderLookAndFeel
@ -1025,6 +1021,103 @@ class PresetMenuButtonLookAndFeel : public juce::LookAndFeel_V4 {
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
{
public:

View File

@ -11471,43 +11471,80 @@ const char* preset_menu_icon_svg = (const char*) temp_binary_data_12;
//================== crystalize_button_active_icon.svg ==================
static const unsigned char temp_binary_data_13[] =
"<?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"
" <defs>\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"
" <stop offset=\"0\" stop-color=\"#fff\" stop-opacity=\".1\"/>\n"
" <stop offset=\".48\" stop-color=\"#fff\" stop-opacity=\".3\"/>\n"
" <stop offset=\"1\" stop-color=\"#fff\" stop-opacity=\".5\"/>\n"
" </linearGradient>\n"
" </defs>\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=\"8\" y=\".22\" width=\"64\" height=\"32\" rx=\"5.96\" ry=\"5.96\" fill=\"#56feff\"/>\n"
"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 64 32\">\n"
" <g id=\"Ebene_6\" data-name=\"Ebene 6\">\n"
" <rect x=\"0\" y=\"0\" width=\"64\" height=\"32\" fill=\"#171a1a\"/>\n"
" <polygon points=\"0 32 2 30 32 16 62 2 64 0 64 32 0 32\" fill=\"#262b2b\"/>\n"
" </g>\n"
" <g id=\"Ebene_1\" data-name=\"Ebene 1\">\n"
" <g id=\"Ebene_2\" data-name=\"Ebene 2\">\n"
" <rect x=\"2\" y=\"2\" width=\"60\" height=\"28\" fill=\"#3db7b7\"/>\n"
" <rect x=\"2\" y=\"2\" width=\"60\" height=\"28\" fill=\"#56feff\"/>\n"
" </g>\n"
" <g id=\"Ebene_7\" data-name=\"Ebene 7\">\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"
"9.22.09h4.78v.65h-4.78Z\" 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"
"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"
" <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=\"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"
"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"
",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"
" <path d=\"M38.96,19.11v-5.11h-2.56v-.65h5.76v.65h-2.55v5.11h-.65Z\" 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"
"-.08,0-.16.03-.22.09-.06.06-.09.13-.09.22v2.05h4.46Z\" fill=\"#fff\"/>\n"
" <path d=\"M49.46,19.11v-5.77h.65v5.12h5.11v.65h-5.76Z\" fill=\"#fff\"/>\n"
" <path d=\"M55.76,19.11v-5.76h.66v5.76h-.66Z\" 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=\"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=\"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."
"06h3.32v.45h-3.32Z\" fill=\"#fff\"/>\n"
" <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-.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=\"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=\"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-"
".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"
"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=\"M31.28,18v-3.54h-1.77v-.45h3.99v.45h-1.77v3.54h-.45Z\" fill=\"#fff\"/>\n"
" <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"
"6c-.06,0-.11.02-.15.06-.04.04-.06.09-.06.15v1.42h3.1Z\" fill=\"#fff\"/>\n"
" <path d=\"M38.56,18v-4h.45v3.55h3.55v.45h-3.99Z\" fill=\"#fff\"/>\n"
" <path d=\"M42.93,18v-3.99h.45v3.99h-.45Z\" 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=\"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 id=\"Ebene_3_Kopie_Kopie_Kopie\" data-name=\"Ebene 3 Kopie Kopie 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"
"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"
"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."
"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\" "
"fill=\"url(#Unbenannter_Verlauf_16)\"/>\n"
" <g id=\"Ebene_3_Kopie\" data-name=\"Ebene 3 Kopie\">\n"
" <rect x=\"8\" y=\"8\" width=\"48\" height=\"16\" fill=\"#fffcfc\" opacity=\".21\"/>\n"
" <polygon points=\"2 30 8 24 56 24 62 30 2 30\" fill=\"#fffcfc\" opacity=\".21\"/>\n"
" <polygon points=\"62 2 56 8 8 8 2 2 62 2\" fill=\"#fffcfc\" opacity=\".21\"/>\n"
" <polygon points=\"56 24 56 8 62 2 62 30 56 24\" fill=\"#fffcfc\" opacity=\".21\"/>\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"
"</svg>";
@ -11516,42 +11553,79 @@ const char* crystalize_button_active_icon_svg = (const char*) temp_binary_data_1
//================== crystalize_button_passive_icon.svg ==================
static const unsigned char temp_binary_data_14[] =
"<?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"
" <defs>\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"
" <stop offset=\"0\" stop-color=\"#fff\" stop-opacity=\".1\"/>\n"
" <stop offset=\".48\" stop-color=\"#fff\" stop-opacity=\".3\"/>\n"
" <stop offset=\"1\" stop-color=\"#fff\" stop-opacity=\".5\"/>\n"
" </linearGradient>\n"
" </defs>\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"
"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 64 32\">\n"
" <g id=\"Ebene_6\" data-name=\"Ebene 6\">\n"
" <rect x=\"0\" y=\"0\" width=\"64\" height=\"32\" fill=\"#171a1a\"/>\n"
" <polygon points=\"64 0 62 2 32 16 2 30 0 32 0 0 64 0\" fill=\"#262b2b\"/>\n"
" </g>\n"
" <g id=\"Ebene_1\" data-name=\"Ebene 1\">\n"
" <g id=\"Ebene_2\" data-name=\"Ebene 2\">\n"
" <rect x=\"2\" y=\"2\" width=\"60\" height=\"28\" fill=\"#3db7b7\"/>\n"
" </g>\n"
" <g id=\"Ebene_7\" data-name=\"Ebene 7\">\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"
"9.22.09h4.78v.65h-4.78Z\" 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"
"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"
" <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=\"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"
"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"
",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"
" <path d=\"M38.96,19.11v-5.11h-2.56v-.65h5.76v.65h-2.55v5.11h-.65Z\" 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"
"-.08,0-.16.03-.22.09-.06.06-.09.13-.09.22v2.05h4.46Z\" fill=\"#fff\"/>\n"
" <path d=\"M49.46,19.11v-5.77h.65v5.12h5.11v.65h-5.76Z\" fill=\"#fff\"/>\n"
" <path d=\"M55.76,19.11v-5.76h.66v5.76h-.66Z\" 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=\"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=\"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."
"06h3.32v.45h-3.32Z\" fill=\"#fff\"/>\n"
" <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-.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=\"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=\"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-"
".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"
"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=\"M31.28,18v-3.54h-1.77v-.45h3.99v.45h-1.77v3.54h-.45Z\" fill=\"#fff\"/>\n"
" <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"
"6c-.06,0-.11.02-.15.06-.04.04-.06.09-.06.15v1.42h3.1Z\" fill=\"#fff\"/>\n"
" <path d=\"M38.56,18v-4h.45v3.55h3.55v.45h-3.99Z\" fill=\"#fff\"/>\n"
" <path d=\"M42.93,18v-3.99h.45v3.99h-.45Z\" 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=\"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 id=\"Ebene_3_Kopie_Kopie_Kopie\" data-name=\"Ebene 3 Kopie Kopie 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"
"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"
"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."
"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\" "
"fill=\"url(#Unbenannter_Verlauf_16)\" opacity=\".5\"/>\n"
" <g id=\"Ebene_3_Kopie\" data-name=\"Ebene 3 Kopie\">\n"
" <rect x=\"8\" y=\"8\" width=\"48\" height=\"16\" fill=\"#fffcfc\" opacity=\".17\"/>\n"
" <polygon points=\"2 30 8 24 56 24 62 30 2 30\" fill=\"#fffcfc\" opacity=\".17\"/>\n"
" <polygon points=\"62 2 56 8 8 8 2 2 62 2\" fill=\"#fffcfc\" opacity=\".17\"/>\n"
" <polygon points=\"56 24 56 8 62 2 62 30 56 24\" fill=\"#fffcfc\" opacity=\".17\"/>\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"
"</svg>";
@ -11592,8 +11666,8 @@ const char* getNamedResource (const char* resourceNameUTF8, int& numBytes)
case 0x31532e06: numBytes = 317; return low_cut_icon_svg;
case 0x7e8ca05e: numBytes = 410; return low_shelf_icon_svg;
case 0x4df4bf1e: numBytes = 350; return preset_menu_icon_svg;
case 0xd842aaab: numBytes = 4212; return crystalize_button_active_icon_svg;
case 0x885a7642: numBytes = 4141; return crystalize_button_passive_icon_svg;
case 0xd842aaab: numBytes = 6343; return crystalize_button_active_icon_svg;
case 0x885a7642: numBytes = 6279; return crystalize_button_passive_icon_svg;
case 0xe49e0f15: numBytes = 406; return bypass_icon_svg;
default: break;
}

View File

@ -48,10 +48,10 @@ namespace BinaryData
const int preset_menu_icon_svgSize = 350;
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;
const int crystalize_button_passive_icon_svgSize = 4141;
const int crystalize_button_passive_icon_svgSize = 6279;
extern const char* bypass_icon_svg;
const int bypass_icon_svgSize = 406;

View File

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

View File

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

View File

@ -64,7 +64,7 @@ CrystalizerEQAudioProcessor::createParameterLayout() {
params.push_back (std::make_unique<juce::AudioParameterFloat>(
"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>(
"Peak2Q", "Peak2 Q",