From cdf306cfe983aa602e16535231a959be80a7f7a5 Mon Sep 17 00:00:00 2001 From: arabian Date: Tue, 27 Jan 2026 23:51:14 +0300 Subject: [PATCH] feat: make vertical separator in GUI adjustable --- src/gui/draw.rs | 31 +++++++++++++++++++++++++++---- src/types/config.rs | 2 ++ 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/src/gui/draw.rs b/src/gui/draw.rs index c7f51c2..5cc78d2 100644 --- a/src/gui/draw.rs +++ b/src/gui/draw.rs @@ -1,7 +1,7 @@ use crate::gui::{SUPPORTED_EXTENSIONS, SoundpadGui}; use egui::{ - Align, AtomExt, Button, Color32, ComboBox, FontFamily, Label, Layout, RichText, ScrollArea, - Slider, TextEdit, Ui, Vec2, + Align, AtomExt, Button, Color32, ComboBox, CursorIcon, FontFamily, Label, Layout, RichText, + ScrollArea, Sense, Slider, TextEdit, Ui, Vec2, }; use egui_material_icons::icons; use pwsp::types::audio_player::TrackInfo; @@ -260,11 +260,34 @@ impl SoundpadGui { } fn draw_body(&mut self, ui: &mut Ui) { - let dirs_size = Vec2::new(ui.available_width() / 4.0, ui.available_height() - 40.0); + let left_panel_width = (ui.available_width() / 4.0 + self.config.vertical_separator_width) + .max(100.0) + .min(ui.available_width() - 100.0); + let dirs_size = Vec2::new(left_panel_width, ui.available_height() - 40.0); ui.horizontal(|ui| { self.draw_dirs(ui, dirs_size); - ui.separator(); + + let (rect, response) = ui.allocate_at_least( + Vec2::new(ui.spacing().item_spacing.x, ui.available_height()), + Sense::click_and_drag(), + ); + + if ui.is_rect_visible(rect) { + let stroke = ui.visuals().widgets.noninteractive.bg_stroke; + ui.painter().vline(rect.center().x, rect.y_range(), stroke); + } + + let vertical_separator_response = + response.on_hover_and_drag_cursor(CursorIcon::ResizeHorizontal); + + if vertical_separator_response.dragged() { + self.config.vertical_separator_width += vertical_separator_response.drag_delta().x; + } + + if vertical_separator_response.drag_stopped() { + self.config.save_to_file().ok(); + } let files_size = Vec2::new(ui.available_width(), ui.available_height() - 40.0); self.draw_files(ui, files_size); diff --git a/src/types/config.rs b/src/types/config.rs index b8bdc4b..c13d5cb 100644 --- a/src/types/config.rs +++ b/src/types/config.rs @@ -34,6 +34,7 @@ impl DaemonConfig { #[serde(default)] pub struct GuiConfig { pub scale_factor: f32, + pub vertical_separator_width: f32, pub save_volume: bool, pub save_input: bool, @@ -47,6 +48,7 @@ impl Default for GuiConfig { fn default() -> Self { GuiConfig { scale_factor: 1.0, + vertical_separator_width: 0.0, save_volume: false, save_input: false,