@@ -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