GUI polish: 3D metal knobs, Rajdhani font, background texture, scaling UI
- Custom Rajdhani font (Regular/Medium/Bold) embedded via BinaryData - Background carbon fiber noise texture overlay - 3D metal knobs with radial gradient, rim, highlight, center cap - Orange type (ADSR/Master/Pitch/Pan) + Dark/blue type (FX/Filter) - Intense glow on value arc (5 layers: outer -> hot center) - Intense glow on pointer (4 layers) - All thicknesses scale proportionally with knob pixel size - FX panel: bordered boxes for each section with gradient background - Pad glow: cyan multi-pass glow on selected pad - Pad numbers: dark background badge for contrast - Waveform display: grid lines + center reference line - VU meter: peak hold indicator + dB scale markers - Buttons: gradient fill + hover highlight + rounded border - All fonts and spacing scale proportionally with window size - Top bar: darker header with gradient - Double-click resets knobs to default values Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -3,7 +3,6 @@
|
||||
|
||||
MasterPanel::MasterPanel()
|
||||
{
|
||||
masterTitle.setFont (juce::FontOptions (12.0f, juce::Font::bold));
|
||||
masterTitle.setColour (juce::Label::textColourId, InstaDrumsLookAndFeel::textSecondary);
|
||||
addAndMakeVisible (masterTitle);
|
||||
|
||||
@@ -21,10 +20,10 @@ void MasterPanel::setupKnob (juce::Slider& s, juce::Label& l, const juce::String
|
||||
s.setTextBoxStyle (juce::Slider::NoTextBox, false, 0, 0);
|
||||
s.setRange (min, max, step);
|
||||
s.setValue (val, juce::dontSendNotification);
|
||||
s.setDoubleClickReturnValue (true, val);
|
||||
addAndMakeVisible (s);
|
||||
|
||||
l.setText (name, juce::dontSendNotification);
|
||||
l.setFont (juce::FontOptions (9.0f));
|
||||
l.setColour (juce::Label::textColourId, InstaDrumsLookAndFeel::textSecondary);
|
||||
l.setJustificationType (juce::Justification::centred);
|
||||
addAndMakeVisible (l);
|
||||
@@ -41,22 +40,26 @@ void MasterPanel::paint (juce::Graphics& g)
|
||||
|
||||
void MasterPanel::resized()
|
||||
{
|
||||
auto area = getLocalBounds().reduced (4);
|
||||
auto area = getLocalBounds().reduced (6);
|
||||
float scale = (float) getHeight() / 52.0f;
|
||||
float titleSize = std::max (12.0f, 16.0f * scale);
|
||||
float labelSize = std::max (9.0f, 12.0f * scale);
|
||||
int labelH = (int) (labelSize + 4);
|
||||
|
||||
masterTitle.setBounds (area.removeFromLeft (55).reduced (0, 2));
|
||||
masterTitle.setFont (juce::FontOptions (titleSize, juce::Font::bold));
|
||||
masterTitle.setBounds (area.removeFromLeft ((int) (65 * scale)).reduced (0, 2));
|
||||
|
||||
// VU meter on the right
|
||||
vuMeter.setBounds (area.removeFromRight (24).reduced (0, 2));
|
||||
vuMeter.setBounds (area.removeFromRight ((int) (28 * scale)).reduced (0, 2));
|
||||
area.removeFromRight (4);
|
||||
|
||||
// Knobs
|
||||
int knobW = area.getWidth() / 3;
|
||||
juce::Slider* sliders[] = { &volumeSlider, &tuneSlider, &panSlider };
|
||||
juce::Label* labels[] = { &volumeLabel, &tuneLabel, &panLabel };
|
||||
for (int i = 0; i < 3; ++i)
|
||||
{
|
||||
labels[i]->setFont (juce::FontOptions (labelSize));
|
||||
auto col = area.removeFromLeft (knobW);
|
||||
labels[i]->setBounds (col.removeFromBottom (12));
|
||||
labels[i]->setBounds (col.removeFromBottom (labelH));
|
||||
sliders[i]->setBounds (col);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user