обновление
This commit is contained in:
41
src/ui.rs
41
src/ui.rs
@@ -8,24 +8,34 @@ use crate::library::{RightRow, SortMode};
|
||||
use crate::state::RepeatMode;
|
||||
|
||||
pub fn draw(f: &mut Frame, app: &mut App) {
|
||||
// Вертикально: верхняя часть (панели + эквалайзер) и статус
|
||||
let chunks = Layout::default()
|
||||
.direction(Direction::Vertical)
|
||||
.constraints([
|
||||
Constraint::Min(1),
|
||||
Constraint::Length(6), // эквалайзер
|
||||
Constraint::Length(3), // статус + время + mode + vol
|
||||
])
|
||||
.split(f.area());
|
||||
|
||||
// Горизонтально: левая колонка (исполнители + эквалайзер) и правая (треки)
|
||||
let top = Layout::default()
|
||||
.direction(Direction::Horizontal)
|
||||
.constraints([Constraint::Percentage(30), Constraint::Percentage(70)])
|
||||
.split(chunks[0]);
|
||||
|
||||
draw_left_panel(f, app, top[0]);
|
||||
// Левая колонка делится вертикально: список сверху, эквалайзер снизу
|
||||
let left_col = Layout::default()
|
||||
.direction(Direction::Vertical)
|
||||
.constraints([
|
||||
Constraint::Min(1),
|
||||
Constraint::Length(8), // эквалайзер
|
||||
])
|
||||
.split(top[0]);
|
||||
|
||||
draw_left_panel(f, app, left_col[0]);
|
||||
draw_equalizer(f, app, left_col[1]);
|
||||
draw_right_panel(f, app, top[1]);
|
||||
draw_equalizer(f, app, chunks[1]);
|
||||
draw_status(f, app, chunks[2]);
|
||||
draw_status(f, app, chunks[1]);
|
||||
|
||||
if app.show_help {
|
||||
draw_help(f, f.area());
|
||||
@@ -210,14 +220,29 @@ fn draw_right_panel(f: &mut Frame, app: &mut App, area: Rect) {
|
||||
}
|
||||
|
||||
fn draw_equalizer(f: &mut Frame, app: &App, area: Rect) {
|
||||
// Внутренняя ширина панели (минус 2 символа рамки)
|
||||
let inner_width = area.width.saturating_sub(2) as usize;
|
||||
if inner_width == 0 {
|
||||
return;
|
||||
}
|
||||
|
||||
// Каждый столбик занимает 2 ячейки: 1 символ + 1 gap.
|
||||
// Значит число столбиков = ширина / 2.
|
||||
let num_bars = (inner_width / 2).max(4);
|
||||
|
||||
let bars_data = app.player.spectrum.bars();
|
||||
let num_bars = 32;
|
||||
let step = (bars_data.len() / num_bars).max(1);
|
||||
|
||||
let mut display: Vec<f32> = Vec::with_capacity(num_bars);
|
||||
for i in 0..num_bars {
|
||||
let a = bars_data[i * 2];
|
||||
let b = bars_data[i * 2 + 1];
|
||||
display.push((a + b) / 2.0);
|
||||
let start = i * step;
|
||||
let end = (start + step).min(bars_data.len());
|
||||
if start >= bars_data.len() {
|
||||
display.push(0.0);
|
||||
continue;
|
||||
}
|
||||
let sum: f32 = bars_data[start..end].iter().sum();
|
||||
display.push(sum / (end - start).max(1) as f32);
|
||||
}
|
||||
|
||||
let bars: Vec<Bar> = display
|
||||
|
||||
Reference in New Issue
Block a user