обновление
This commit is contained in:
2
Cargo.lock
generated
2
Cargo.lock
generated
@@ -981,7 +981,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rumus"
|
name = "rumus"
|
||||||
version = "0.1.0"
|
version = "0.5.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bincode",
|
"bincode",
|
||||||
"crossterm",
|
"crossterm",
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "rumus"
|
name = "rumus"
|
||||||
version = "0.5.0"
|
version = "0.5.0"
|
||||||
edition = "2026"
|
edition = "2024"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
ratatui = "0.29"
|
ratatui = "0.29"
|
||||||
|
|||||||
41
src/ui.rs
41
src/ui.rs
@@ -8,24 +8,34 @@ use crate::library::{RightRow, SortMode};
|
|||||||
use crate::state::RepeatMode;
|
use crate::state::RepeatMode;
|
||||||
|
|
||||||
pub fn draw(f: &mut Frame, app: &mut App) {
|
pub fn draw(f: &mut Frame, app: &mut App) {
|
||||||
|
// Вертикально: верхняя часть (панели + эквалайзер) и статус
|
||||||
let chunks = Layout::default()
|
let chunks = Layout::default()
|
||||||
.direction(Direction::Vertical)
|
.direction(Direction::Vertical)
|
||||||
.constraints([
|
.constraints([
|
||||||
Constraint::Min(1),
|
Constraint::Min(1),
|
||||||
Constraint::Length(6), // эквалайзер
|
|
||||||
Constraint::Length(3), // статус + время + mode + vol
|
Constraint::Length(3), // статус + время + mode + vol
|
||||||
])
|
])
|
||||||
.split(f.area());
|
.split(f.area());
|
||||||
|
|
||||||
|
// Горизонтально: левая колонка (исполнители + эквалайзер) и правая (треки)
|
||||||
let top = Layout::default()
|
let top = Layout::default()
|
||||||
.direction(Direction::Horizontal)
|
.direction(Direction::Horizontal)
|
||||||
.constraints([Constraint::Percentage(30), Constraint::Percentage(70)])
|
.constraints([Constraint::Percentage(30), Constraint::Percentage(70)])
|
||||||
.split(chunks[0]);
|
.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_right_panel(f, app, top[1]);
|
||||||
draw_equalizer(f, app, chunks[1]);
|
draw_status(f, app, chunks[1]);
|
||||||
draw_status(f, app, chunks[2]);
|
|
||||||
|
|
||||||
if app.show_help {
|
if app.show_help {
|
||||||
draw_help(f, f.area());
|
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) {
|
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 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);
|
let mut display: Vec<f32> = Vec::with_capacity(num_bars);
|
||||||
for i in 0..num_bars {
|
for i in 0..num_bars {
|
||||||
let a = bars_data[i * 2];
|
let start = i * step;
|
||||||
let b = bars_data[i * 2 + 1];
|
let end = (start + step).min(bars_data.len());
|
||||||
display.push((a + b) / 2.0);
|
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
|
let bars: Vec<Bar> = display
|
||||||
|
|||||||
Reference in New Issue
Block a user