Skip to content

Commit 9ab9714

Browse files
grauxmusicclaude
andcommitted
ui(plugin): premium polish — bold type, KEY label, capsule scan button
- KEY + BPM values: plain → bold, larger (44/48pt) - Added missing KEY label at top of key box (mirrors BPM label) - Bottom key label: 9→10pt, cleaner text ("locked · tap to change") - Scan button: 68×22 → 82×28 full capsule, teal glow during scan, clean white border at rest — no more prototype feel Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent aaa9f7c commit 9ab9714

1 file changed

Lines changed: 58 additions & 37 deletions

File tree

Source/PluginEditor.cpp

Lines changed: 58 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -168,12 +168,18 @@ void MorphAudioProcessorEditor::paint (juce::Graphics& g)
168168
g.setColour (borderCol);
169169
g.drawRoundedRectangle (kBtnX, kBtnY, kBtnW, kBtnH, 12.f, 1.f);
170170

171-
// KEY value — large, centered in box
171+
// KEY — small label at top of box
172+
g.setFont (juce::Font (9.f, juce::Font::plain));
173+
g.setColour (juce::Colours::white.withAlpha (hasKey ? 0.28f : 0.13f));
174+
g.drawText ("KEY", (int)kBtnX, (int)(kBtnY + 9.f), (int)kBtnW, 12,
175+
juce::Justification::centred, false);
176+
177+
// KEY value — large, bold, centered in box
172178
const float kValCX = kBtnX + kBtnW * 0.5f;
173-
const float kValCY = kBtnY + kBtnH * 0.5f - 8.f;
174-
g.setFont (juce::Font (40.f, juce::Font::plain));
179+
const float kValCY = kBtnY + kBtnH * 0.5f - 4.f;
180+
g.setFont (juce::Font (44.f, juce::Font::bold));
175181
g.setColour (hasKey ? valueCol : juce::Colours::white.withAlpha (0.13f));
176-
g.drawText (keyStr, (int)kBtnX, (int)(kValCY - 24.f), (int)kBtnW, 48,
182+
g.drawText (keyStr, (int)kBtnX, (int)(kValCY - 26.f), (int)kBtnW, 52,
177183
juce::Justification::centred, false);
178184

179185
// Scanning progress bar — thin fill along bottom of KEY box
@@ -190,22 +196,22 @@ void MorphAudioProcessorEditor::paint (juce::Graphics& g)
190196
}
191197

192198
// KEY label at bottom of box
193-
g.setFont (juce::Font (9.f, juce::Font::plain));
199+
g.setFont (juce::Font (10.f, juce::Font::plain));
194200
{
195201
juce::String keyLabel;
196202
if (audioProcessor.isAnalysing())
197203
keyLabel = juce::String (juce::CharPointer_UTF8 ("detecting key\xe2\x80\xa6"));
198204
else if (hasManual)
199-
keyLabel = juce::String (juce::CharPointer_UTF8 ("set \xe2\x96\xbe tap to change"));
205+
keyLabel = "locked \xc2\xb7 tap to change";
200206
else if (hasKey)
201-
keyLabel = juce::String (juce::CharPointer_UTF8 ("auto \xe2\x80\x94 tap to correct"));
207+
keyLabel = "auto-detect \xc2\xb7 tap to set";
202208
else if (isScanning)
203209
keyLabel = juce::String (juce::CharPointer_UTF8 ("scanning\xe2\x80\xa6 "))
204210
+ juce::String ((int)(scanProg * 100)) + "%";
205211
else
206-
keyLabel = juce::String (juce::CharPointer_UTF8 ("tap to set \xe2\x96\xbe"));
207-
g.setColour (hasKey ? juce::Colours::white.withAlpha (0.28f) : juce::Colour (kTeal).withAlpha (0.70f));
208-
g.drawText (keyLabel, (int)kBtnX, (int)(kBtnY + kBtnH - 20.f), (int)kBtnW, 14,
212+
keyLabel = "tap to set key";
213+
g.setColour (hasKey ? juce::Colours::white.withAlpha (0.32f) : juce::Colour (kTeal).withAlpha (0.75f));
214+
g.drawText (keyLabel, (int)kBtnX, (int)(kBtnY + kBtnH - 22.f), (int)kBtnW, 16,
209215
juce::Justification::centred, false);
210216
}
211217

@@ -214,43 +220,58 @@ void MorphAudioProcessorEditor::paint (juce::Graphics& g)
214220
g.fillRect (half - 0.5f, zoneMid - 20.f, 1.f, 40.f);
215221

216222
// BPM — centered in right half
217-
g.setFont (juce::Font (44.f, juce::Font::plain));
223+
g.setFont (juce::Font (48.f, juce::Font::bold));
218224
g.setColour (valueCol);
219-
g.drawText (bpmStr, (int)half, (int)(zoneMid - 28.f), (int)(w - half), 56,
225+
g.drawText (bpmStr, (int)half, (int)(zoneMid - 30.f), (int)(w - half), 58,
220226
juce::Justification::centred, false);
221227

222-
g.setFont (juce::Font (9.f, juce::Font::plain));
223-
g.setColour (juce::Colours::white.withAlpha (0.22f));
224-
g.drawText ("BPM", (int)half, (int)(zoneMid + 30.f), (int)(w - half), 14,
228+
g.setFont (juce::Font (10.f, juce::Font::plain));
229+
g.setColour (juce::Colours::white.withAlpha (0.25f));
230+
g.drawText ("BPM", (int)half, (int)(zoneMid + 32.f), (int)(w - half), 16,
225231
juce::Justification::centred, false);
226232

227-
// ── Scan button — bottom of BPM panel ────────────────────────────────────
233+
// ── Scan button — premium capsule ────────────────────────────────────────
228234
{
229-
const float sbW = 68.f, sbH = 22.f;
235+
const float sbW = 82.f, sbH = 28.f;
230236
const float sbX = half + (w - half - sbW) * 0.5f;
231-
const float sbY = zoneBot - sbH - 6.f;
237+
const float sbY = zoneBot - sbH - 8.f;
232238
scanRect_ = { sbX, sbY, sbW, sbH };
233239

234240
const bool scanning = audioProcessor.isAnalysing() || audioProcessor.getAnalysisProgress() > 0.01f;
235-
juce::Colour btnBg = scanning
236-
? juce::Colour (kTeal).withAlpha (0.18f)
237-
: juce::Colours::white.withAlpha (0.06f);
238-
juce::Colour btnFg = scanning
239-
? juce::Colour (kTeal).withAlpha (0.85f)
240-
: juce::Colours::white.withAlpha (0.35f);
241-
242-
g.setColour (btnBg);
243-
g.fillRoundedRectangle (scanRect_, 6.f);
244-
g.setColour (btnFg);
245-
g.drawRoundedRectangle (scanRect_, 6.f, 0.7f);
246-
247-
g.setFont (juce::Font (9.5f, juce::Font::bold));
248-
g.setColour (btnFg);
249-
juce::String scanLbl = scanning
250-
? juce::CharPointer_UTF8 ("\xe2\x86\xbb Scanning")
251-
: juce::CharPointer_UTF8 ("\xe2\x86\xbb Re-Scan");
252-
g.drawText (scanLbl, (int)sbX, (int)sbY, (int)sbW, (int)sbH,
253-
juce::Justification::centred, false);
241+
242+
if (scanning)
243+
{
244+
// Outer glow
245+
g.setColour (juce::Colour (kTeal).withAlpha (0.10f));
246+
g.fillRoundedRectangle (sbX - 4.f, sbY - 4.f, sbW + 8.f, sbH + 8.f, 18.f);
247+
// Fill
248+
g.setColour (juce::Colour (kTeal).withAlpha (0.18f));
249+
g.fillRoundedRectangle (sbX, sbY, sbW, sbH, 14.f);
250+
// Border
251+
g.setColour (juce::Colour (kTeal).withAlpha (0.55f));
252+
g.drawRoundedRectangle (sbX, sbY, sbW, sbH, 14.f, 0.8f);
253+
// Label
254+
g.setFont (juce::Font (10.5f, juce::Font::bold));
255+
g.setColour (juce::Colour (kTeal));
256+
g.drawText (juce::CharPointer_UTF8 ("\xe2\x86\xbb Scanning"),
257+
(int)sbX, (int)sbY, (int)sbW, (int)sbH,
258+
juce::Justification::centred, false);
259+
}
260+
else
261+
{
262+
// Fill
263+
g.setColour (juce::Colours::white.withAlpha (0.05f));
264+
g.fillRoundedRectangle (sbX, sbY, sbW, sbH, 14.f);
265+
// Border
266+
g.setColour (juce::Colours::white.withAlpha (0.18f));
267+
g.drawRoundedRectangle (sbX, sbY, sbW, sbH, 14.f, 0.8f);
268+
// Label
269+
g.setFont (juce::Font (10.5f, juce::Font::bold));
270+
g.setColour (juce::Colours::white.withAlpha (0.50f));
271+
g.drawText (juce::CharPointer_UTF8 ("\xe2\x86\xbb Re-Scan"),
272+
(int)sbX, (int)sbY, (int)sbW, (int)sbH,
273+
juce::Justification::centred, false);
274+
}
254275
}
255276

256277
// ── Status strip ─────────────────────────────────────────────────────────

0 commit comments

Comments
 (0)