a Jellyfin & Subsonic client for the terminal — powered by mpv, Chromecast and UPnP MediaRenderer
mpv chromecast mpris navidrome jellyfin upnp tui
0

Configure Feed

Select the types of activity you want to include in your feed.

EQ sliders: put "dB" right on the value, drop the separate unit row

Previously the layout stacked "+2.5" on one row and "dB" on the next.
Reading it took an extra saccade — and the "dB" row was pure whitespace
for the column, cluttering the panel.

Now the top row of each slider column reads "+2.5 dB" as a single line
(number in the band's style, unit in muted style). The bar picks up one
more row of vertical resolution as a side effect.

+13 -14
+13 -14
crates/fin-tui/src/widgets/eq.rs
··· 33 33 let col_w = (area.width as usize / n).max(4) as u16; 34 34 let center_row = area.y + area.height / 2; 35 35 36 - // Reserve top row for dB text, bottom row for Hz text; the middle 37 - // rows draw the bar. 36 + // Reserve top row for the "+N.N dB" text, bottom row for the Hz 37 + // text; every row in between draws the bar. 38 38 let bar_top = area.y + 1; 39 - let bar_bot = area.y + area.height.saturating_sub(3); 39 + let bar_bot = area.y + area.height.saturating_sub(2); 40 40 let bar_h = bar_bot.saturating_sub(bar_top) as i32; 41 41 if bar_h < 1 { 42 42 return; ··· 113 113 } else { 114 114 muted_style() 115 115 }; 116 - let db_text = format!("{:+.1}", gain_db); 116 + // Unit right on the value — "+2.5 dB" reads better than a 117 + // stacked "+2.5" / "dB". The muted "dB" span keeps the number 118 + // itself easy to scan. 117 119 let db_area = Rect::new(col_x, area.y, col_w, 1); 118 - Paragraph::new(Span::styled(db_text, db_style)) 119 - .alignment(ratatui::layout::Alignment::Center) 120 - .render(db_area, buf); 120 + Paragraph::new(Line::from(vec![ 121 + Span::styled(format!("{:+.1} ", gain_db), db_style), 122 + Span::styled("dB", muted_style()), 123 + ])) 124 + .alignment(ratatui::layout::Alignment::Center) 125 + .render(db_area, buf); 121 126 122 - // "dB" units row (small hint under the number). 123 - let unit_row = area.y + area.height.saturating_sub(2); 127 + // Cutoff frequency label under the bar. 124 128 let hz_row = area.y + area.height.saturating_sub(1); 125 - 126 129 let hz_text = fmt_hz(band.cutoff); 127 130 let hz_style = if is_sel && self.enabled { 128 131 Style::default() ··· 131 134 } else { 132 135 muted_style() 133 136 }; 134 - let unit_area = Rect::new(col_x, unit_row, col_w, 1); 135 - Paragraph::new(Span::styled("dB", muted_style())) 136 - .alignment(ratatui::layout::Alignment::Center) 137 - .render(unit_area, buf); 138 137 let hz_area = Rect::new(col_x, hz_row, col_w, 1); 139 138 Paragraph::new(Span::styled(hz_text, hz_style)) 140 139 .alignment(ratatui::layout::Alignment::Center)