13 #include "BinaryData.h" 20 setColour(juce::ResizableWindow::ColourIds::backgroundColourId, juce::Colour(0xff212121));
22 setColour(juce::Slider::ColourIds::backgroundColourId, juce::Colour(0x00000000));
23 setColour(juce::Slider::ColourIds::rotarySliderOutlineColourId, juce::Colour(0xff141414));
24 setColour(juce::Slider::ColourIds::rotarySliderFillColourId, juce::Colour(0xff9a9a9a));
25 setColour(juce::Slider::ColourIds::trackColourId, juce::Colour(0xff0079c1));
27 setColour(juce::ToggleButton::ColourIds::tickColourId, juce::Colour(0xff212121));
28 setColour(juce::ToggleButton::ColourIds::tickDisabledColourId, juce::Colour(0xffcccccc));
30 setColour(juce::TextButton::ColourIds::buttonColourId, juce::Colour(0x00000000));
31 setColour(juce::TextButton::ColourIds::textColourOffId, juce::Colour(0xffffffff));
32 setColour(juce::TextButton::ColourIds::buttonOnColourId, juce::Colour(0xff03a9f4));
33 setColour(juce::TextButton::ColourIds::textColourOnId, juce::Colour(0xffffffff));
35 setColour(juce::TextEditor::ColourIds::backgroundColourId, juce::Colour(0x00000000));
36 setColour(juce::TextEditor::ColourIds::focusedOutlineColourId, juce::Colour(0xff808080));
37 setColour(juce::TextEditor::ColourIds::highlightColourId, juce::Colour(0xff0079c1));
38 setColour(juce::TextEditor::ColourIds::highlightedTextColourId, juce::Colour(0xffffffff));
39 setColour(juce::TextEditor::ColourIds::outlineColourId, juce::Colour(0xff808080));
40 setColour(juce::TextEditor::ColourIds::shadowColourId, juce::Colour(0x00000000));
41 setColour(juce::TextEditor::ColourIds::textColourId, juce::Colour(0xffffffff));
46 juce::Typeface::Ptr
LookAndFeel::getTypefaceForFont(
const juce::Font& font)
48 static auto ubuntuL = juce::Typeface::createSystemTypefaceFor(BinaryData::UbuntuLight_ttf,
49 BinaryData::UbuntuLight_ttfSize);
51 static auto ubuntuB = juce::Typeface::createSystemTypefaceFor(BinaryData::UbuntuBold_ttf,
52 BinaryData::UbuntuBold_ttfSize);
64 juce::Font
LookAndFeel::getTextButtonFont(juce::TextButton&,
int buttonHeight)
66 static juce::Font tmp(15.0f, juce::Font::bold);
68 juce::Font font(getTypefaceForFont(tmp));
70 font.setSizeAndStyle(std::min(15.0f, 0.6f * buttonHeight),
72 font.getHorizontalScale(),
73 font.getExtraKerningFactor());
78 juce::Font
LookAndFeel::getLabelFont(juce::Label& label)
80 static juce::Font tmp;
82 juce::Font font(getTypefaceForFont(tmp));
84 font.setSizeAndStyle(std::min(16.0f, 0.9f * label.getHeight()),
86 font.getHorizontalScale(),
87 font.getExtraKerningFactor());
92 void LookAndFeel::drawRotarySlider(juce::Graphics& g,
int x,
int y,
int width,
int height,
float sliderPosProportional,
float rotaryStartAngle,
float rotaryEndAngle, juce::Slider& slider)
94 constexpr float pi = juce::MathConstants<
float>::pi;
97 juce::Rectangle<
float> bounds = juce::Rectangle<
int>(x, y, width, height).toFloat().reduced(10);
99 float radius = std::min(bounds.getWidth(), bounds.getHeight()) / 2.0f;
100 float toAngle = rotaryStartAngle + sliderPosProportional * (rotaryEndAngle - rotaryStartAngle);
101 float lineW = std::min(8.0f, radius * 0.5f);
102 float arcRadius = radius - lineW * 0.5f;
104 float knobRadius = arcRadius - lineW * 0.1f;
105 float knobPointerAngle = pi / 4.0f;
107 float knobPointerHeight = radius - knobRadius + 1.0f;
108 juce::Point<
float> knobPointerTip(bounds.getCentreX(),
109 bounds.getCentreY() - (knobPointerHeight + arcRadius));
112 juce::Colour arcInactive = slider.findColour(juce::Slider::rotarySliderOutlineColourId);
113 juce::Colour arcActive = slider.findColour(juce::Slider::trackColourId);
114 juce::Colour fillOuter = slider.findColour(juce::Slider::rotarySliderFillColourId);
115 juce::Colour fillInner = fillOuter.brighter();
117 juce::ColourGradient fill(fillInner, bounds.getCentre(),
118 fillOuter, bounds.getTopLeft(),
121 auto arcStrokeType = juce::PathStrokeType(lineW,
122 juce::PathStrokeType::curved,
123 juce::PathStrokeType::EndCapStyle::butt);
126 juce::Path backgroundArc;
127 backgroundArc.addCentredArc(bounds.getCentreX(), bounds.getCentreY(),
128 arcRadius, arcRadius,
130 rotaryStartAngle, rotaryEndAngle,
133 g.setColour(arcInactive);
135 g.strokePath(backgroundArc, arcStrokeType);
138 if (slider.isEnabled())
141 valueArc.addCentredArc(bounds.getCentreX(),
150 g.setColour(arcActive);
151 g.strokePath(valueArc, arcStrokeType);
156 knob.addCentredArc(bounds.getCentreX(), bounds.getCentreY(),
157 knobRadius, knobRadius,
159 knobPointerAngle / 2.0f,
160 2 * pi - knobPointerAngle / 2.0f,
163 knob.lineTo(knobPointerTip);
166 knob.applyTransform(juce::AffineTransform::rotation(toAngle, bounds.getCentreX(), bounds.getCentreY()));
168 g.setGradientFill(fill);
float getParam(const juce::AudioProcessorValueTreeState ¶ms, const juce::String &blockId) const
Internal method used to get (and check) a parameter's value.