Compare commits
2 Commits
9f1999d7b2
...
6f2fd49107
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6f2fd49107 | ||
|
|
e18377af9f |
@ -6,6 +6,7 @@
|
||||
|
||||
#include "JuceLibraryCode/BinaryData.h"
|
||||
|
||||
|
||||
namespace AXIOM {
|
||||
class DesignSystem : public juce::LookAndFeel_V4 {
|
||||
public:
|
||||
@ -654,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)
|
||||
@ -670,8 +672,6 @@ class PresetMenuButtonLookAndFeel : public juce::LookAndFeel_V4 {
|
||||
juce::RectanglePlacement::centred, passiveIconOpacity);
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
private:
|
||||
@ -679,6 +679,185 @@ class PresetMenuButtonLookAndFeel : public juce::LookAndFeel_V4 {
|
||||
std::unique_ptr<juce::XmlElement> activeSvg;
|
||||
|
||||
};
|
||||
|
||||
class lowBandButtonLookAndFeel : public juce::LookAndFeel_V4 {
|
||||
public:
|
||||
lowBandButtonLookAndFeel()
|
||||
{
|
||||
lowBypassIcon = juce::XmlDocument::parse(BinaryData::bypass_icon_svg);
|
||||
lowCutIcon = juce::XmlDocument::parse(BinaryData::low_cut_icon_svg);
|
||||
lowBellIcon = juce::XmlDocument::parse(BinaryData::bell_icon_svg);
|
||||
lowShelfIcon = juce::XmlDocument::parse(BinaryData::low_shelf_icon_svg);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
void drawToggleButton(juce::Graphics& g, juce::ToggleButton& button,
|
||||
bool shouldDrawButtonAsHighlighted,
|
||||
bool shouldDrawButtonAsDown) override
|
||||
{
|
||||
|
||||
bool isHovered = button.isMouseOverOrDragging();
|
||||
bool isToggled = button.getToggleState();
|
||||
bool isEnabled = button.isEnabled();
|
||||
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)
|
||||
.withCentre(bounds.getCentre());
|
||||
|
||||
float bypassOpacity = 1.0f;
|
||||
|
||||
if (lowBypassIcon != nullptr && lowCutIcon != nullptr && lowBellIcon != nullptr && lowShelfIcon != nullptr) {
|
||||
// WICHTIG: Erstelle für jeden Frame ein NEUES Drawable!
|
||||
auto bypassIcon = juce::Drawable::createFromSVG(*lowBypassIcon);
|
||||
auto cutIcon = juce::Drawable::createFromSVG(*lowCutIcon);
|
||||
auto bellIcon = juce::Drawable::createFromSVG(*lowBellIcon);
|
||||
auto shelfIcon = juce::Drawable::createFromSVG(*lowShelfIcon);
|
||||
|
||||
if (bypassIcon != nullptr && cutIcon != nullptr && bellIcon != nullptr && shelfIcon != nullptr)
|
||||
{
|
||||
|
||||
juce::Colour colour;
|
||||
if (!isEnabled) {
|
||||
colour = isToggled ? Colours::ACCENTWEAKCOLOUR : Colours::SURFACEBYPASS;
|
||||
}
|
||||
else if (isHovered) {
|
||||
colour = isToggled ? Colours::ACCENTHOVER : Colours::SURFACEHOVER;
|
||||
} else {
|
||||
colour = isToggled
|
||||
? Colours::ACCENTCOLOUR
|
||||
: Colours::SURFACECOLOUR;
|
||||
}
|
||||
|
||||
|
||||
// Icon zeichnen
|
||||
if (button.getName() == "LowBypass") {
|
||||
bypassIcon->replaceColour(juce::Colours::black, colour);
|
||||
bypassIcon->drawWithin(g, iconBounds,
|
||||
juce::RectanglePlacement::centred, bypassOpacity);
|
||||
}
|
||||
else if (button.getName() == "LowCut") {
|
||||
cutIcon->replaceColour(juce::Colours::black, colour);
|
||||
cutIcon->drawWithin(g, iconBounds,
|
||||
juce::RectanglePlacement::centred, bypassOpacity);
|
||||
}
|
||||
else if (button.getName() == "LowBell") {
|
||||
bellIcon->replaceColour(juce::Colours::black, colour);
|
||||
bellIcon->drawWithin(g, iconBounds,
|
||||
juce::RectanglePlacement::centred, bypassOpacity);
|
||||
}
|
||||
else if (button.getName() == "LowShelf") {
|
||||
shelfIcon->replaceColour(juce::Colours::black, colour);
|
||||
shelfIcon->drawWithin(g, iconBounds,
|
||||
juce::RectanglePlacement::centred, bypassOpacity);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private:
|
||||
std::unique_ptr<juce::XmlElement> lowBypassIcon;
|
||||
std::unique_ptr<juce::XmlElement> lowCutIcon;
|
||||
std::unique_ptr<juce::XmlElement> lowBellIcon;
|
||||
std::unique_ptr<juce::XmlElement> lowShelfIcon;
|
||||
};
|
||||
|
||||
class highBandButtonLookAndFeel : public juce::LookAndFeel_V4 {
|
||||
public:
|
||||
highBandButtonLookAndFeel()
|
||||
{
|
||||
highBypassIcon = juce::XmlDocument::parse(BinaryData::bypass_icon_svg);
|
||||
highCutIcon = juce::XmlDocument::parse(BinaryData::high_cut_icon_svg);
|
||||
highBellIcon = juce::XmlDocument::parse(BinaryData::bell_icon_svg);
|
||||
highShelfIcon = juce::XmlDocument::parse(BinaryData::high_shelf_icon_svg);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
void drawToggleButton(juce::Graphics& g, juce::ToggleButton& button,
|
||||
bool shouldDrawButtonAsHighlighted,
|
||||
bool shouldDrawButtonAsDown) override
|
||||
{
|
||||
|
||||
bool isHovered = button.isMouseOverOrDragging();
|
||||
bool isToggled = button.getToggleState();
|
||||
bool isEnabled = button.isEnabled();
|
||||
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)
|
||||
.withCentre(bounds.getCentre());
|
||||
|
||||
float bypassOpacity = 1.0f;
|
||||
|
||||
if (highBypassIcon != nullptr && highCutIcon != nullptr && highBellIcon != nullptr && highShelfIcon != nullptr) {
|
||||
// WICHTIG: Erstelle für jeden Frame ein NEUES Drawable!
|
||||
auto bypassIcon = juce::Drawable::createFromSVG(*highBypassIcon);
|
||||
auto cutIcon = juce::Drawable::createFromSVG(*highCutIcon);
|
||||
auto bellIcon = juce::Drawable::createFromSVG(*highBellIcon);
|
||||
auto shelfIcon = juce::Drawable::createFromSVG(*highShelfIcon);
|
||||
|
||||
if (bypassIcon != nullptr && cutIcon != nullptr && bellIcon != nullptr && shelfIcon != nullptr)
|
||||
{
|
||||
|
||||
juce::Colour colour;
|
||||
if (!isEnabled) {
|
||||
colour = isToggled ? Colours::ACCENTWEAKCOLOUR : Colours::SURFACEBYPASS;
|
||||
}
|
||||
else if (isHovered) {
|
||||
colour = isToggled ? Colours::ACCENTHOVER : Colours::SURFACEHOVER;
|
||||
} else {
|
||||
colour = isToggled
|
||||
? Colours::ACCENTCOLOUR
|
||||
: Colours::SURFACECOLOUR;
|
||||
}
|
||||
|
||||
|
||||
// Icon zeichnen
|
||||
if (button.getName() == "HighBypass") {
|
||||
bypassIcon->replaceColour(juce::Colours::black, colour);
|
||||
bypassIcon->drawWithin(g, iconBounds,
|
||||
juce::RectanglePlacement::centred, bypassOpacity);
|
||||
}
|
||||
else if (button.getName() == "HighCut") {
|
||||
cutIcon->replaceColour(juce::Colours::black, colour);
|
||||
cutIcon->drawWithin(g, iconBounds,
|
||||
juce::RectanglePlacement::centred, bypassOpacity);
|
||||
}
|
||||
else if (button.getName() == "HighBell") {
|
||||
bellIcon->replaceColour(juce::Colours::black, colour);
|
||||
bellIcon->drawWithin(g, iconBounds,
|
||||
juce::RectanglePlacement::centred, bypassOpacity);
|
||||
}
|
||||
else if (button.getName() == "HighShelf") {
|
||||
shelfIcon->replaceColour(juce::Colours::black, colour);
|
||||
shelfIcon->drawWithin(g, iconBounds,
|
||||
juce::RectanglePlacement::centred, bypassOpacity);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private:
|
||||
std::unique_ptr<juce::XmlElement> highBypassIcon;
|
||||
std::unique_ptr<juce::XmlElement> highCutIcon;
|
||||
std::unique_ptr<juce::XmlElement> highBellIcon;
|
||||
std::unique_ptr<juce::XmlElement> highShelfIcon;
|
||||
};
|
||||
|
||||
|
||||
struct ButtonStyles {
|
||||
};
|
||||
|
||||
@ -692,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
|
||||
@ -741,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
|
||||
@ -845,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:
|
||||
|
||||
@ -164,6 +164,11 @@
|
||||
<None Include="..\..\Resources\Fonts\Orbitron-Bold.ttf"/>
|
||||
<None Include="..\..\Resources\Fonts\Orbitron-Regular.ttf"/>
|
||||
<None Include="..\..\Resources\Fonts\Roboto-Regular.ttf"/>
|
||||
<None Include="..\..\Resources\Icons\bell_icon.svg"/>
|
||||
<None Include="..\..\Resources\Icons\high_cut_icon.svg"/>
|
||||
<None Include="..\..\Resources\Icons\high_shelf_icon.svg"/>
|
||||
<None Include="..\..\Resources\Icons\low_cut_icon.svg"/>
|
||||
<None Include="..\..\Resources\Icons\low_shelf_icon.svg"/>
|
||||
<None Include="..\..\Resources\Icons\preset_menu_icon.svg"/>
|
||||
<None Include="..\..\Resources\Icons\crystalize_button_active_icon.svg"/>
|
||||
<None Include="..\..\Resources\Icons\crystalize_button_passive_icon.svg"/>
|
||||
|
||||
@ -74,6 +74,21 @@
|
||||
<None Include="..\..\Resources\Fonts\Roboto-Regular.ttf">
|
||||
<Filter>CrystalizerEQ\Resources\Fonts</Filter>
|
||||
</None>
|
||||
<None Include="..\..\Resources\Icons\bell_icon.svg">
|
||||
<Filter>CrystalizerEQ\Resources\Icons</Filter>
|
||||
</None>
|
||||
<None Include="..\..\Resources\Icons\high_cut_icon.svg">
|
||||
<Filter>CrystalizerEQ\Resources\Icons</Filter>
|
||||
</None>
|
||||
<None Include="..\..\Resources\Icons\high_shelf_icon.svg">
|
||||
<Filter>CrystalizerEQ\Resources\Icons</Filter>
|
||||
</None>
|
||||
<None Include="..\..\Resources\Icons\low_cut_icon.svg">
|
||||
<Filter>CrystalizerEQ\Resources\Icons</Filter>
|
||||
</None>
|
||||
<None Include="..\..\Resources\Icons\low_shelf_icon.svg">
|
||||
<Filter>CrystalizerEQ\Resources\Icons</Filter>
|
||||
</None>
|
||||
<None Include="..\..\Resources\Icons\preset_menu_icon.svg">
|
||||
<Filter>CrystalizerEQ\Resources\Icons</Filter>
|
||||
</None>
|
||||
|
||||
@ -21,6 +21,15 @@
|
||||
file="Resources/Fonts/Roboto-Regular.ttf"/>
|
||||
</GROUP>
|
||||
<GROUP id="{3DCFA257-AECE-2625-016F-D02D71FFA24B}" name="Icons">
|
||||
<FILE id="waE621" name="bell_icon.svg" compile="0" resource="1" file="Resources/Icons/bell_icon.svg"/>
|
||||
<FILE id="KOfMYl" name="high_cut_icon.svg" compile="0" resource="1"
|
||||
file="Resources/Icons/high_cut_icon.svg"/>
|
||||
<FILE id="zBKRpK" name="high_shelf_icon.svg" compile="0" resource="1"
|
||||
file="Resources/Icons/high_shelf_icon.svg"/>
|
||||
<FILE id="RZcm3s" name="low_cut_icon.svg" compile="0" resource="1"
|
||||
file="Resources/Icons/low_cut_icon.svg"/>
|
||||
<FILE id="SE1ZID" name="low_shelf_icon.svg" compile="0" resource="1"
|
||||
file="Resources/Icons/low_shelf_icon.svg"/>
|
||||
<FILE id="MWCD1t" name="preset_menu_icon.svg" compile="0" resource="1"
|
||||
file="Resources/Icons/preset_menu_icon.svg"/>
|
||||
<FILE id="cp2JDP" name="crystalize_button_active_icon.svg" compile="0"
|
||||
|
||||
@ -11413,111 +11413,233 @@ static const unsigned char temp_binary_data_6[] =
|
||||
|
||||
const char* RobotoRegular_ttf = (const char*) temp_binary_data_6;
|
||||
|
||||
//================== preset_menu_icon.svg ==================
|
||||
//================== bell_icon.svg ==================
|
||||
static const unsigned char temp_binary_data_7[] =
|
||||
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
|
||||
"<svg id=\"Ebene_1\" data-name=\"Ebene 1\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 28 12.02\">\n"
|
||||
" <path fill=\"black\" d=\"M0,8.02h4.82c.75,0,1.45-.34,1.92-.92L11.42,1.24c1.32-1.65,3.84-1.65,5.16,0l4.68,5.86c.47.58,1.17.92,1.92.92h4.82v4h-4.82c-.75,0-1.45-.34-1.92-.92l-5.73-7.16c-.79-.98-2.28-.98-3.07,0l-5.73,7.16c-.47.58-1.17.92-1.92.92H0s0-4,"
|
||||
"0-4Z\"/>\n"
|
||||
"</svg>";
|
||||
|
||||
const char* bell_icon_svg = (const char*) temp_binary_data_7;
|
||||
|
||||
//================== high_cut_icon.svg ==================
|
||||
static const unsigned char temp_binary_data_8[] =
|
||||
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
|
||||
"<svg id=\"Ebene_1\" data-name=\"Ebene 1\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n"
|
||||
" <path fill=\"black\" d=\"M24,23.02V4C24,1.79,22.21,0,20,0H.98C.44,0,0,.44,0,.98v2.03c0,.54.44.98.98.98h17.02c1.2,0,2,.8,2,2v17.02c0,.54.44.98.98.98h2.05c.54,0,.98-.44.98-.98Z\"/>\n"
|
||||
"</svg>";
|
||||
|
||||
const char* high_cut_icon_svg = (const char*) temp_binary_data_8;
|
||||
|
||||
//================== high_shelf_icon.svg ==================
|
||||
static const unsigned char temp_binary_data_9[] =
|
||||
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
|
||||
"<svg id=\"Ebene_1\" data-name=\"Ebene 1\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 28 12\">\n"
|
||||
" <path fill=\"black\" d=\"M11.23,6.39l5.62-4.77c1.23-1.04,2.79-1.61,4.4-1.61h6.04c.4,0,.72.32.72.72v2.56c0,.4-.32.72-.72.72h-6.08c-1.62,0-3.18.58-4.41,1.63l-5.56,4.75c-1.23,1.05-2.79,1.63-4.41,1.63H.72c-.4,0-.72-.32-.72-.72v-2.56c0-.4.32-.72.72-.72h"
|
||||
"6.12c1.61,0,3.17-.57,4.4-1.61Z\"/>\n"
|
||||
"</svg>";
|
||||
|
||||
const char* high_shelf_icon_svg = (const char*) temp_binary_data_9;
|
||||
|
||||
//================== low_cut_icon.svg ==================
|
||||
static const unsigned char temp_binary_data_10[] =
|
||||
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
|
||||
"<svg id=\"Ebene_1\" data-name=\"Ebene 1\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n"
|
||||
" <path fill=\"black\" d=\"M0,23.02V4C0,1.79,1.79,0,4,0h19.02c.54,0,.98.44.98.98v2.03c0,.54-.44.98-.98.98H6c-1.2,0-2,.8-2,2v17.02c0,.54-.44.98-.98.98H.98c-.54,0-.98-.44-.98-.98Z\"/>\n"
|
||||
"</svg>";
|
||||
|
||||
const char* low_cut_icon_svg = (const char*) temp_binary_data_10;
|
||||
|
||||
//================== low_shelf_icon.svg ==================
|
||||
static const unsigned char temp_binary_data_11[] =
|
||||
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
|
||||
"<svg id=\"Ebene_1\" data-name=\"Ebene 1\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 28 12\">\n"
|
||||
" <path fill=\"black\" d=\"M16.77,6.39L11.15,1.61C9.92.57,8.36,0,6.75,0H.72C.32,0,0,.32,0,.72v2.56c0,.4.32.72.72.72h6.08c1.62,0,3.18.58,4.41,1.63l5.56,4.75c1.23,1.05,2.79,1.63,4.41,1.63h6.11c.4,0,.72-.32.72-.72v-2.56c0-.4-.32-.72-.72-.72h-6.12c-1.61,"
|
||||
"0-3.17-.57-4.4-1.61Z\"/>\n"
|
||||
"</svg>";
|
||||
|
||||
const char* low_shelf_icon_svg = (const char*) temp_binary_data_11;
|
||||
|
||||
//================== preset_menu_icon.svg ==================
|
||||
static const unsigned char temp_binary_data_12[] =
|
||||
"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 30 30\" width=\"60px\" height=\"60px\"><path d=\"M 3 7 A 1.0001 1.0001 0 1 0 3 9 L 27 9 A 1.0001 1.0001 0 1 0 27 7 L 3 7 z M 3 14 A 1.0001 1.0001 0 1 0 3 16 L 27 16 A 1.0001 1.0001 0 1 0 27 14 "
|
||||
"L 3 14 z M 3 21 A 1.0001 1.0001 0 1 0 3 23 L 27 23 A 1.0001 1.0001 0 1 0 27 21 L 3 21 z\" fill=\"black\"/></svg>";
|
||||
|
||||
const char* preset_menu_icon_svg = (const char*) temp_binary_data_7;
|
||||
const char* preset_menu_icon_svg = (const char*) temp_binary_data_12;
|
||||
|
||||
//================== crystalize_button_active_icon.svg ==================
|
||||
static const unsigned char temp_binary_data_8[] =
|
||||
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>";
|
||||
|
||||
const char* crystalize_button_active_icon_svg = (const char*) temp_binary_data_8;
|
||||
const char* crystalize_button_active_icon_svg = (const char*) temp_binary_data_13;
|
||||
|
||||
//================== crystalize_button_passive_icon.svg ==================
|
||||
static const unsigned char temp_binary_data_9[] =
|
||||
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>";
|
||||
|
||||
const char* crystalize_button_passive_icon_svg = (const char*) temp_binary_data_9;
|
||||
const char* crystalize_button_passive_icon_svg = (const char*) temp_binary_data_14;
|
||||
|
||||
//================== bypass_icon.svg ==================
|
||||
static const unsigned char temp_binary_data_10[] =
|
||||
static const unsigned char temp_binary_data_15[] =
|
||||
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
|
||||
"<svg id=\"Ebene_1\" data-name=\"Ebene 1\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 22 23\">\n"
|
||||
" <rect x=\"10\" width=\"2\" height=\"12\"/>\n"
|
||||
" <path d=\"M13,1.19v1.87c4.1.91,7.17,4.57,7.17,8.94,0,5.06-4.1,9.17-9.17,9.17S1.83,17.06,1.83,12C1.83,7.63,4.9,3.97,9,3.06v-1.87C3.88,2.13,0,6.61,0,12c0,6.08,4.92,11,11,11s11-4.92,11-11c0-5.39-3.88-9.87-9-10.81Z\" fill=\"black\"/>\n"
|
||||
"</svg>";
|
||||
|
||||
const char* bypass_icon_svg = (const char*) temp_binary_data_10;
|
||||
const char* bypass_icon_svg = (const char*) temp_binary_data_15;
|
||||
|
||||
|
||||
const char* getNamedResource (const char* resourceNameUTF8, int& numBytes);
|
||||
@ -11538,9 +11660,14 @@ const char* getNamedResource (const char* resourceNameUTF8, int& numBytes)
|
||||
case 0xcbceafb3: numBytes = 24668; return OrbitronBold_ttf;
|
||||
case 0x9c8232dc: numBytes = 24716; return OrbitronRegular_ttf;
|
||||
case 0x93fe9a1e: numBytes = 146004; return RobotoRegular_ttf;
|
||||
case 0x1024555a: numBytes = 397; return bell_icon_svg;
|
||||
case 0x46c5a278: numBytes = 316; return high_cut_icon_svg;
|
||||
case 0x0133c050: numBytes = 420; return high_shelf_icon_svg;
|
||||
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;
|
||||
}
|
||||
@ -11558,6 +11685,11 @@ const char* namedResourceList[] =
|
||||
"OrbitronBold_ttf",
|
||||
"OrbitronRegular_ttf",
|
||||
"RobotoRegular_ttf",
|
||||
"bell_icon_svg",
|
||||
"high_cut_icon_svg",
|
||||
"high_shelf_icon_svg",
|
||||
"low_cut_icon_svg",
|
||||
"low_shelf_icon_svg",
|
||||
"preset_menu_icon_svg",
|
||||
"crystalize_button_active_icon_svg",
|
||||
"crystalize_button_passive_icon_svg",
|
||||
@ -11573,6 +11705,11 @@ const char* originalFilenames[] =
|
||||
"Orbitron-Bold.ttf",
|
||||
"Orbitron-Regular.ttf",
|
||||
"Roboto-Regular.ttf",
|
||||
"bell_icon.svg",
|
||||
"high_cut_icon.svg",
|
||||
"high_shelf_icon.svg",
|
||||
"low_cut_icon.svg",
|
||||
"low_shelf_icon.svg",
|
||||
"preset_menu_icon.svg",
|
||||
"crystalize_button_active_icon.svg",
|
||||
"crystalize_button_passive_icon.svg",
|
||||
|
||||
@ -29,20 +29,35 @@ namespace BinaryData
|
||||
extern const char* RobotoRegular_ttf;
|
||||
const int RobotoRegular_ttfSize = 146004;
|
||||
|
||||
extern const char* bell_icon_svg;
|
||||
const int bell_icon_svgSize = 397;
|
||||
|
||||
extern const char* high_cut_icon_svg;
|
||||
const int high_cut_icon_svgSize = 316;
|
||||
|
||||
extern const char* high_shelf_icon_svg;
|
||||
const int high_shelf_icon_svgSize = 420;
|
||||
|
||||
extern const char* low_cut_icon_svg;
|
||||
const int low_cut_icon_svgSize = 317;
|
||||
|
||||
extern const char* low_shelf_icon_svg;
|
||||
const int low_shelf_icon_svgSize = 410;
|
||||
|
||||
extern const char* preset_menu_icon_svg;
|
||||
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;
|
||||
|
||||
// Number of elements in the namedResourceList and originalFileNames arrays.
|
||||
const int namedResourceListSize = 11;
|
||||
const int namedResourceListSize = 16;
|
||||
|
||||
// Points to the start of a list of resource names.
|
||||
extern const char* namedResourceList[];
|
||||
|
||||
@ -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());
|
||||
|
||||
@ -178,6 +182,8 @@ void CrystalizerEQAudioProcessorEditor::setupToggleButtons() {
|
||||
bypassButtonLookAndFeel = std::make_unique<Components::BypassButtonLookAndFeel>();
|
||||
svgToggleButtonLookAndFeel = std::make_unique<Components::SvgToggleButtonLookAndFeel>();
|
||||
presetMenuButtonLookAndFeel = std::make_unique<Components::PresetMenuButtonLookAndFeel>();
|
||||
lowBandButtonLookAndFeel = std::make_unique<Components::lowBandButtonLookAndFeel>();
|
||||
highBandButtonLookAndFeel = std::make_unique<Components::highBandButtonLookAndFeel>();
|
||||
|
||||
peak1BypassButton.setLookAndFeel(bypassButtonLookAndFeel.get());
|
||||
peak2BypassButton.setLookAndFeel(bypassButtonLookAndFeel.get());
|
||||
@ -190,6 +196,17 @@ void CrystalizerEQAudioProcessorEditor::setupToggleButtons() {
|
||||
|
||||
lowShelf.setToggleState(true, juce::dontSendNotification);
|
||||
highShelf.setToggleState(true, juce::dontSendNotification);
|
||||
|
||||
lowBypass.setLookAndFeel(lowBandButtonLookAndFeel.get());
|
||||
lowCut.setLookAndFeel(lowBandButtonLookAndFeel.get());
|
||||
lowBell.setLookAndFeel(lowBandButtonLookAndFeel.get());
|
||||
lowShelf.setLookAndFeel(lowBandButtonLookAndFeel.get());
|
||||
|
||||
highBypass.setLookAndFeel(highBandButtonLookAndFeel.get());
|
||||
highCut.setLookAndFeel(highBandButtonLookAndFeel.get());
|
||||
highBell.setLookAndFeel(highBandButtonLookAndFeel.get());
|
||||
highShelf.setLookAndFeel(highBandButtonLookAndFeel.get());
|
||||
|
||||
for (auto* b : {&peak1BypassButton, &peak2BypassButton, &peak3BypassButton, &crystalizeButton, &masterBypassButton}) {
|
||||
b->onClick = [this, b]() {
|
||||
juce::String paramID; // nimm juce::String statt std::string
|
||||
@ -255,6 +272,7 @@ void CrystalizerEQAudioProcessorEditor::disableLowBand(const float target) {
|
||||
lowBandGainLabel .setEnabled(isToggled);
|
||||
lowBandQSlider .setEnabled(isToggled);
|
||||
lowBandQLabel .setEnabled(isToggled);
|
||||
|
||||
};
|
||||
//endregion disableLowBand
|
||||
|
||||
@ -379,6 +397,7 @@ void CrystalizerEQAudioProcessorEditor::addComponentsToLayout() {
|
||||
{
|
||||
filterArea.addAndMakeVisible(lowFilterArea);
|
||||
|
||||
lowBandModeBox.addAndMakeVisible(lowBandModeLabel);
|
||||
lowBandModeBox.addAndMakeVisible(lowBypass);
|
||||
lowBandModeBox.addAndMakeVisible(lowCut);
|
||||
lowBandModeBox.addAndMakeVisible(lowBell);
|
||||
@ -392,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);
|
||||
@ -434,6 +459,7 @@ void CrystalizerEQAudioProcessorEditor::addComponentsToLayout() {
|
||||
{
|
||||
filterArea.addAndMakeVisible(highFilterArea);
|
||||
|
||||
highBandModeBox.addAndMakeVisible(highBandModeLabel);
|
||||
highBandModeBox.addAndMakeVisible(highBypass);
|
||||
highBandModeBox.addAndMakeVisible(highCut);
|
||||
highBandModeBox.addAndMakeVisible(highBell);
|
||||
@ -446,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);
|
||||
@ -481,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");
|
||||
@ -502,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");
|
||||
|
||||
@ -561,6 +603,9 @@ void CrystalizerEQAudioProcessorEditor::handleLowBandModes() {
|
||||
param->endChangeGesture();
|
||||
}
|
||||
}
|
||||
else if (lowBandBools[i]) {
|
||||
lowBandModeButtons[i]->setToggleState(true, juce::dontSendNotification);
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
@ -593,11 +638,14 @@ void CrystalizerEQAudioProcessorEditor::handleHighBandModes() {
|
||||
param->endChangeGesture();
|
||||
}
|
||||
}
|
||||
else if (highBandBools[i]) {
|
||||
highBandModeButtons[i]->setToggleState(true, juce::dontSendNotification);
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
//endregion handleHighBandModes
|
||||
|
||||
|
||||
//region setupEventListeners
|
||||
void CrystalizerEQAudioProcessorEditor::setupEventListeners() {
|
||||
presetMenuButton.onClick = [this]() {
|
||||
@ -706,7 +754,6 @@ CrystalizerEQAudioProcessorEditor::CrystalizerEQAudioProcessorEditor (Crystalize
|
||||
setupSliders();
|
||||
initPresetSystem();
|
||||
|
||||
|
||||
addAndMakeVisible (testNoiseButton);
|
||||
|
||||
testNoiseButton.onClick = [this]() {
|
||||
@ -729,7 +776,6 @@ CrystalizerEQAudioProcessorEditor::CrystalizerEQAudioProcessorEditor (Crystalize
|
||||
};
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
CrystalizerEQAudioProcessorEditor::~CrystalizerEQAudioProcessorEditor() {
|
||||
@ -743,6 +789,13 @@ CrystalizerEQAudioProcessorEditor::~CrystalizerEQAudioProcessorEditor() {
|
||||
masterBypassButton.setLookAndFeel(nullptr);
|
||||
crystalizeButton.setLookAndFeel(nullptr);
|
||||
presetMenuButton.setLookAndFeel(nullptr);
|
||||
|
||||
for (auto* b : lowBandModeButtons) {
|
||||
b->setLookAndFeel(nullptr);
|
||||
}
|
||||
for (auto* b : highBandModeButtons) {
|
||||
b->setLookAndFeel(nullptr);
|
||||
}
|
||||
};
|
||||
|
||||
//region paintAnalyzer
|
||||
@ -763,6 +816,28 @@ void CrystalizerEQAudioProcessorEditor::paintAnalyzer(juce::Graphics &g) {
|
||||
}
|
||||
//endregion paintAnalyzer
|
||||
|
||||
void CrystalizerEQAudioProcessorEditor::paintModeBoxBorders(juce::Graphics &g) {
|
||||
for (auto* b : lowBandModeButtons) {
|
||||
if (b->getToggleState()) {
|
||||
auto r = getLocalArea(&lowBandModeBox, b->getBounds());
|
||||
int side = juce::jmin(r.getWidth(), r.getHeight());
|
||||
r = r.withSizeKeepingCentre(side, side);
|
||||
|
||||
auto rf = r.toFloat();
|
||||
auto rfFilled = rf.toNearestInt().toFloat();
|
||||
const float stroke = 1.0f;
|
||||
auto rfStroke = rfFilled.reduced(stroke * 0.5f);
|
||||
|
||||
g.setColour(juce::Colours::white.withAlpha(0.3f));
|
||||
g.fillRoundedRectangle(r.toFloat(), 5);
|
||||
g.setColour(juce::Colours::white.withAlpha(0.9f));
|
||||
g.drawRoundedRectangle(rfStroke, 5, stroke);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void CrystalizerEQAudioProcessorEditor::paint (juce::Graphics& g)
|
||||
{
|
||||
@ -786,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);
|
||||
@ -796,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;
|
||||
@ -815,10 +890,13 @@ void CrystalizerEQAudioProcessorEditor::paint (juce::Graphics& g)
|
||||
g.fillRect(fA);
|
||||
paintBorderLines(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
|
||||
@ -883,6 +961,15 @@ void CrystalizerEQAudioProcessorEditor::paint (juce::Graphics& g)
|
||||
g.setColour(juce::Colours::cyan.withAlpha(0.9f));
|
||||
g.drawRect(r, 1.0f);
|
||||
}
|
||||
for (auto* c : lowBandModeBox.getChildren())
|
||||
{
|
||||
auto r = getLocalArea(&lowBandModeBox, c->getBounds()); // lokal in presetArea
|
||||
|
||||
g.setColour(juce::Colours::yellow.withAlpha(0.3f));
|
||||
g.fillRect(r);
|
||||
g.setColour(juce::Colours::yellow.withAlpha(0.9f));
|
||||
g.drawRect(r, 1.0f);
|
||||
}
|
||||
for (auto* c : lowMidFilterArea.getChildren())
|
||||
{
|
||||
auto r = getLocalArea(&lowMidFilterArea, c->getBounds()); // lokal in presetArea
|
||||
@ -947,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();
|
||||
|
||||
@ -956,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();
|
||||
@ -991,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
|
||||
@ -1007,6 +1094,7 @@ void CrystalizerEQAudioProcessorEditor::setKnobVisibility() {
|
||||
highBandGainLabel .setEnabled(highMode >= 2);
|
||||
highBandQSlider .setEnabled(highMode >= 1);
|
||||
highBandQLabel .setEnabled(highMode >= 1);
|
||||
highBandModeLabel.setEnabled (highMode >= 1);
|
||||
}
|
||||
//endregion setKnobVisibility
|
||||
|
||||
@ -1067,6 +1155,8 @@ void CrystalizerEQAudioProcessorEditor::resized()
|
||||
setupFooter();
|
||||
//setSliderSizes();
|
||||
|
||||
|
||||
|
||||
const auto testBounds = mainPanel.getLocalBounds();
|
||||
const auto testWidth = testBounds.getWidth();
|
||||
const auto testHeight = testBounds.getHeight();
|
||||
@ -1193,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) },
|
||||
@ -1204,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))
|
||||
|
||||
});
|
||||
|
||||
@ -1259,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) },
|
||||
@ -1287,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)
|
||||
@ -1301,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)),
|
||||
|
||||
|
||||
});
|
||||
@ -1311,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::pxTrack(modeBoxButtonColWidth), Layout::pxTrack(modeBoxButtonColWidth), Layout::fr(1) },
|
||||
/* rows */ { Layout::fr(1)},
|
||||
/* cols */ { Layout::fr(1), Layout::fr(1), Layout::fr(1), 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
|
||||
@ -1490,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) },
|
||||
@ -1518,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),
|
||||
|
||||
@ -1532,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)),
|
||||
|
||||
});
|
||||
|
||||
@ -1541,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::pxTrack(modeBoxButtonColWidth), Layout::pxTrack(modeBoxButtonColWidth), Layout::fr(1) },
|
||||
/* rows */ { Layout::fr(1)},
|
||||
/* cols */ { Layout::fr(1), Layout::fr(1), Layout::fr(1), 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, 1, 2, 2),
|
||||
Layout::area(highCut, 1, 2, 2, 3),
|
||||
Layout::area(highBell, 1, 3, 2, 4),
|
||||
Layout::area(highShelf, 1, 4, 2, 5)
|
||||
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
|
||||
|
||||
@ -134,6 +134,9 @@ public:
|
||||
~CrystalizerEQAudioProcessorEditor() override;
|
||||
|
||||
void paintAnalyzer(juce::Graphics &g);
|
||||
|
||||
void paintModeBoxBorders(juce::Graphics &g);
|
||||
|
||||
void paintBorderLines(juce::Graphics& g);
|
||||
|
||||
//===================================================================
|
||||
@ -176,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;
|
||||
|
||||
@ -261,9 +270,14 @@ 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;
|
||||
std::unique_ptr<Components::lowBandButtonLookAndFeel> lowBandButtonLookAndFeel;
|
||||
std::unique_ptr<Components::highBandButtonLookAndFeel> highBandButtonLookAndFeel;
|
||||
|
||||
|
||||
|
||||
std::unique_ptr<Components::SvgToggleButtonLookAndFeel> svgToggleButtonLookAndFeel;
|
||||
|
||||
@ -319,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;
|
||||
|
||||
|
||||
@ -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",
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user