Feat: UI/UX and ducking compressor
Some checks failed
Deploy Website / deploy (push) Failing after 4m52s

This commit is contained in:
2026-02-24 02:57:27 +01:00
parent 7632bc76f7
commit f0de312d6b
24 changed files with 402 additions and 71 deletions

View File

@@ -10,6 +10,8 @@ pub enum OptionsFocus {
ShowScope,
ShowSpectrum,
ShowLissajous,
GainBoost,
NormalizeViz,
ShowCompletion,
ShowPreview,
PerformanceMode,
@@ -40,6 +42,8 @@ impl CyclicEnum for OptionsFocus {
Self::ShowScope,
Self::ShowSpectrum,
Self::ShowLissajous,
Self::GainBoost,
Self::NormalizeViz,
Self::ShowCompletion,
Self::ShowPreview,
Self::PerformanceMode,
@@ -96,30 +100,32 @@ const FULL_LAYOUT: &[(OptionsFocus, usize)] = &[
(OptionsFocus::ShowScope, 6),
(OptionsFocus::ShowSpectrum, 7),
(OptionsFocus::ShowLissajous, 8),
(OptionsFocus::ShowCompletion, 9),
(OptionsFocus::ShowPreview, 10),
(OptionsFocus::PerformanceMode, 11),
(OptionsFocus::Font, 12),
(OptionsFocus::ZoomFactor, 13),
(OptionsFocus::WindowSize, 14),
// blank=15, ABLETON LINK header=16, divider=17
(OptionsFocus::LinkEnabled, 18),
(OptionsFocus::StartStopSync, 19),
(OptionsFocus::Quantum, 20),
// blank=21, SESSION header=22, divider=23, Tempo=24, Beat=25, Phase=26
// blank=27, MIDI OUTPUTS header=28, divider=29
(OptionsFocus::MidiOutput0, 30),
(OptionsFocus::MidiOutput1, 31),
(OptionsFocus::MidiOutput2, 32),
(OptionsFocus::MidiOutput3, 33),
// blank=34, MIDI INPUTS header=35, divider=36
(OptionsFocus::MidiInput0, 37),
(OptionsFocus::MidiInput1, 38),
(OptionsFocus::MidiInput2, 39),
(OptionsFocus::MidiInput3, 40),
// blank=41, ONBOARDING header=42, divider=43
(OptionsFocus::ResetOnboarding, 44),
(OptionsFocus::LoadDemoOnStartup, 45),
(OptionsFocus::GainBoost, 9),
(OptionsFocus::NormalizeViz, 10),
(OptionsFocus::ShowCompletion, 11),
(OptionsFocus::ShowPreview, 12),
(OptionsFocus::PerformanceMode, 13),
(OptionsFocus::Font, 14),
(OptionsFocus::ZoomFactor, 15),
(OptionsFocus::WindowSize, 16),
// blank=17, ABLETON LINK header=18, divider=19
(OptionsFocus::LinkEnabled, 20),
(OptionsFocus::StartStopSync, 21),
(OptionsFocus::Quantum, 22),
// blank=23, SESSION header=24, divider=25, Tempo=26, Beat=27, Phase=28
// blank=29, MIDI OUTPUTS header=30, divider=31
(OptionsFocus::MidiOutput0, 32),
(OptionsFocus::MidiOutput1, 33),
(OptionsFocus::MidiOutput2, 34),
(OptionsFocus::MidiOutput3, 35),
// blank=36, MIDI INPUTS header=37, divider=38
(OptionsFocus::MidiInput0, 39),
(OptionsFocus::MidiInput1, 40),
(OptionsFocus::MidiInput2, 41),
(OptionsFocus::MidiInput3, 42),
// blank=43, ONBOARDING header=44, divider=45
(OptionsFocus::ResetOnboarding, 46),
(OptionsFocus::LoadDemoOnStartup, 47),
];
impl OptionsFocus {
@@ -175,13 +181,13 @@ fn visible_layout(plugin_mode: bool) -> Vec<(OptionsFocus, usize)> {
// based on which sections are hidden.
let mut offset: usize = 0;
// Font/Zoom/Window lines (12,13,14) hidden when !plugin_mode
// Font/Zoom/Window lines (14,15,16) hidden when !plugin_mode
if !plugin_mode {
offset += 3; // 3 lines for Font, ZoomFactor, WindowSize
}
// Link + Session + MIDI sections hidden when plugin_mode
// These span from blank(15) through MidiInput3(40) = 26 lines
// These span from blank(17) through MidiInput3(42) = 26 lines
if plugin_mode {
let link_section_lines = 26;
offset += link_section_lines;
@@ -192,10 +198,10 @@ fn visible_layout(plugin_mode: bool) -> Vec<(OptionsFocus, usize)> {
if !focus.is_visible(plugin_mode) {
continue;
}
// Lines at or below index 11 (PerformanceMode) are never shifted
let adjusted = if raw_line <= 11 {
// Lines at or below index 13 (PerformanceMode) are never shifted
let adjusted = if raw_line <= 13 {
raw_line
} else if !plugin_mode && raw_line <= 14 {
} else if !plugin_mode && raw_line <= 16 {
// Font/Zoom/Window — these are hidden, skip
continue;
} else {