From a8b50eb46b8fd16a3168ca628bb1b1e24f96a8ef Mon Sep 17 00:00:00 2001 From: juntaochi <53086415+juntaochi@users.noreply.github.com> Date: Wed, 20 May 2026 15:54:35 +0000 Subject: [PATCH 1/2] =?UTF-8?q?=E2=9A=A1=20Bolt:=20Eliminate=20format!=20m?= =?UTF-8?q?acro=20allocations=20in=20UI=20render=20loop?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ui/mod.rs | 34 +++++++++++++++++----------------- src/ui/settings.rs | 29 +++++++++++++++-------------- 2 files changed, 32 insertions(+), 31 deletions(-) diff --git a/src/ui/mod.rs b/src/ui/mod.rs index 6bbba9d..f72d130 100644 --- a/src/ui/mod.rs +++ b/src/ui/mod.rs @@ -962,25 +962,25 @@ pub fn draw(f: &mut Frame, app: &mut App) { f.render_widget(gauge, tuner_area); } - let controls = if is_jp { - vec![ - ("▶再生", "SPC"), - ("▶▶次", "]"), - ("◀◀前", "["), - ("音量+", "+"), - ("音量-", "-"), - ("消音", "m"), - ("電源", "q"), + let controls: &[(&str, &str)] = if is_jp { + &[ + (" ▶再生", " [SPC] "), + (" ▶▶次", " []] "), + (" ◀◀前", " [[] "), + (" 音量+", " [+] "), + (" 音量-", " [-] "), + (" 消音", " [m] "), + (" 電源", " [q] "), ] } else { - vec![ - ("PLAY", "SPC"), - ("SKIP", "]"), - ("PREV", "["), - ("VOL+", "+"), - ("VOL-", "-"), - ("MUTE", "m"), - ("EXIT", "q"), + &[ + (" PLAY", " [SPC] "), + (" SKIP", " []] "), + (" PREV", " [[] "), + (" VOL+", " [+] "), + (" VOL-", " [-] "), + (" MUTE", " [m] "), + (" EXIT", " [q] "), ] }; diff --git a/src/ui/settings.rs b/src/ui/settings.rs index 94b87fc..6ae2e34 100644 --- a/src/ui/settings.rs +++ b/src/ui/settings.rs @@ -1,3 +1,4 @@ +use std::borrow::Cow; use ratatui::{ layout::{Alignment, Rect}, style::{Modifier, Style}, @@ -236,43 +237,43 @@ impl SettingsMenu { } let is_selected = i == self.selected_index; - let (label, value) = match item { + let (label, value): (&'static str, Cow<'static, str>) = match item { SettingsItem::Language { current } => { let lang_str = match current { - Language::English => "English", - Language::Japanese => "日本語", + Language::English => " English ", + Language::Japanese => " 日本語 ", }; - ("Language / 言語", lang_str.to_string()) + (" Language / 言語: ", Cow::Borrowed(lang_str)) } SettingsItem::Theme { current_index, total_themes, } => ( - "Theme / テーマ", - format!("{} / {}", current_index + 1, total_themes), + " Theme / テーマ: ", + Cow::Owned(format!(" {} / {} ", current_index + 1, total_themes)), ), SettingsItem::Album { enabled } => { let status = if *enabled { - "ON / オン" + " ON / オン " } else { - "OFF / オフ" + " OFF / オフ " }; - ("Album Artwork / アルバム", status.to_string()) + (" Album Artwork / アルバム: ", Cow::Borrowed(status)) } SettingsItem::Mosaic { enabled } => { let status = if *enabled { - "ON / オン" + " ON / オン " } else { - "OFF / オフ" + " OFF / オフ " }; - ("Mosaic Artwork / モザイク", status.to_string()) + (" Mosaic Artwork / モザイク: ", Cow::Borrowed(status)) } - SettingsItem::Close => ("Close / 閉じる", String::new()), + SettingsItem::Close => (" Close / 閉じる ", Cow::Borrowed("")), }; let line = if value.is_empty() { vec![Span::styled( - format!(" {} ", label), + label, if is_selected { Style::default() .fg(theme.bg) From 8e7f0b880ad5e99e39009475edca67f9a27367dd Mon Sep 17 00:00:00 2001 From: juntaochi <53086415+juntaochi@users.noreply.github.com> Date: Wed, 20 May 2026 16:01:42 +0000 Subject: [PATCH 2/2] =?UTF-8?q?=E2=9A=A1=20Bolt:=20Fix=20rustfmt=20orderin?= =?UTF-8?q?g=20for=20UI=20settings=20imports?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ui/settings.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ui/settings.rs b/src/ui/settings.rs index 6ae2e34..bc5c4ff 100644 --- a/src/ui/settings.rs +++ b/src/ui/settings.rs @@ -1,4 +1,3 @@ -use std::borrow::Cow; use ratatui::{ layout::{Alignment, Rect}, style::{Modifier, Style}, @@ -6,6 +5,7 @@ use ratatui::{ widgets::{Block, BorderType, Borders, Clear, List, ListItem, Paragraph}, Frame, }; +use std::borrow::Cow; use crate::config::Language; use crate::ui::Theme;