обновление

This commit is contained in:
2026-10-15 17:05:22 +02:00
parent 07baff09c4
commit 1211165228
3 changed files with 35 additions and 10 deletions

2
Cargo.lock generated
View File

@@ -981,7 +981,7 @@ dependencies = [
[[package]]
name = "rumus"
version = "0.1.0"
version = "0.5.0"
dependencies = [
"bincode",
"crossterm",

View File

@@ -1,7 +1,7 @@
[package]
name = "rumus"
version = "0.5.0"
edition = "2026"
edition = "2024"
[dependencies]
ratatui = "0.29"

View File

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