feat(gui): add GUI components and displays

This commit is contained in:
2026-09-08 14:55:22 +02:00
parent 5a80534a2e
commit a9abca9e15
19 changed files with 898 additions and 0 deletions
+71
View File
@@ -0,0 +1,71 @@
#include "ToggleButton.h"
namespace serum
{
ToggleButton::ToggleButton (const juce::String& lbl) : label (lbl)
{
setRepaintsOnMouseActivity (true);
}
void ToggleButton::attach (juce::AudioProcessorValueTreeState& apvts, const juce::String& paramId)
{
param = apvts.getParameter (paramId);
if (param != nullptr)
{
state = param->getValue() > 0.5f;
attachment = std::make_unique<juce::ParameterAttachment> (*param,
[this] (float newValue) { setToggleState (newValue > 0.5f); });
}
}
void ToggleButton::setToggleState (bool s)
{
if (state == s)
return;
state = s;
repaint();
}
void ToggleButton::paint (juce::Graphics& g)
{
const auto bounds = getLocalBounds().toFloat();
const float ledSize = juce::jmin (bounds.getHeight() - 16.0f, 16.0f);
const juce::Rectangle<float> led ((bounds.getWidth() - ledSize) * 0.5f, 4.0f, ledSize, ledSize);
if (state)
{
g.setColour (onColour.withAlpha (0.35f));
g.fillEllipse (led.expanded (6.0f));
g.setColour (onColour);
}
else
{
g.setColour (theme::outline);
}
g.fillEllipse (led);
g.setColour (state ? juce::Colours::black : theme::textDim);
g.drawEllipse (led, 1.0f);
g.setColour (state ? theme::text : theme::textDim);
g.setFont (juce::Font (11.0f));
g.drawText (label, 0, (int) (led.getBottom() + 2), getWidth(), 14, juce::Justification::centred, false);
}
void ToggleButton::mouseDown (const juce::MouseEvent&)
{
const bool newState = ! state;
if (onClick)
{
onClick (newState);
}
else if (param != nullptr)
{
param->setValueNotifyingHost (newState ? 1.0f : 0.0f);
}
setToggleState (newState);
}
} // namespace serum