diff --git a/src/lib.rs b/src/lib.rs index 41b4657..35d3540 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,5 +1,10 @@ use nih_plug::prelude::*; -use nih_plug_egui::{create_egui_editor, egui, widgets, EguiState}; +use nih_plug_egui::{ + create_egui_editor, + egui::{self, Vec2}, + resizable_window::ResizableWindow, + widgets, EguiState, +}; use std::sync::Arc; mod dsp; @@ -265,6 +270,7 @@ impl Plugin for Codename206 { fn editor(&mut self, _async_executor: AsyncExecutor) -> Option> { let params = self.params.clone(); + let egui_state = self.params.editor_state.clone(); create_egui_editor( self.params.editor_state.clone(), (), @@ -289,28 +295,40 @@ impl Plugin for Codename206 { ui.add(widgets::ParamSlider::for_param(&p.bypass, setter)); }; - egui::CentralPanel::default().show(egui_ctx, |ui| { - ui.heading(Self::NAME); - ui.horizontal(|ui| { - ui.label("Xover Lo/Mid"); - ui.add(widgets::ParamSlider::for_param(¶ms.crossover_low_hz, setter)); - ui.label("Xover Mid/Hi"); - ui.add(widgets::ParamSlider::for_param(¶ms.crossover_high_hz, setter)); - ui.label("Look-ahead"); - ui.add(widgets::ParamSlider::for_param(¶ms.look_ahead_ms, setter)); - ui.label("Ceiling"); - ui.add(widgets::ParamSlider::for_param(¶ms.output_ceiling_db, setter)); - ui.label("Lim Release"); - ui.add(widgets::ParamSlider::for_param(¶ms.limiter_release_ms, setter)); + // Resizable window; vertical scroll so every control stays reachable even when the + // window is small. (Placeholder layout — Stage 6 will replace it.) + ResizableWindow::new("editor") + .min_size(Vec2::new(480.0, 320.0)) + .show(egui_ctx, egui_state.as_ref(), |ui| { + egui::ScrollArea::vertical().show(ui, |ui| { + ui.heading(Self::NAME); + // Global controls stacked vertically so they never overflow sideways. + egui::Grid::new("globals").num_columns(2).show(ui, |ui| { + ui.label("Xover Lo/Mid"); + ui.add(widgets::ParamSlider::for_param(¶ms.crossover_low_hz, setter)); + ui.end_row(); + ui.label("Xover Mid/Hi"); + ui.add(widgets::ParamSlider::for_param(¶ms.crossover_high_hz, setter)); + ui.end_row(); + ui.label("Look-ahead"); + ui.add(widgets::ParamSlider::for_param(¶ms.look_ahead_ms, setter)); + ui.end_row(); + ui.label("Ceiling"); + ui.add(widgets::ParamSlider::for_param(¶ms.output_ceiling_db, setter)); + ui.end_row(); + ui.label("Lim Release"); + ui.add(widgets::ParamSlider::for_param(¶ms.limiter_release_ms, setter)); + ui.end_row(); + }); + ui.separator(); + ui.columns(4, |cols| { + band_col(&mut cols[0], "LOW", ¶ms.low); + band_col(&mut cols[1], "MID", ¶ms.mid); + band_col(&mut cols[2], "HIGH", ¶ms.high); + band_col(&mut cols[3], "ALL", ¶ms.all); + }); + }); }); - ui.separator(); - ui.columns(4, |cols| { - band_col(&mut cols[0], "LOW", ¶ms.low); - band_col(&mut cols[1], "MID", ¶ms.mid); - band_col(&mut cols[2], "HIGH", ¶ms.high); - band_col(&mut cols[3], "ALL", ¶ms.all); - }); - }); }, ) }