Feat: optimizations

This commit is contained in:
2026-02-05 23:15:46 +01:00
parent 2c98a915fa
commit 51f52be4ce
22 changed files with 175 additions and 215 deletions

View File

@@ -104,7 +104,7 @@ pub struct CopiedSteps {
pub struct CopiedStepData {
pub script: String,
pub active: bool,
pub source: Option<usize>,
pub source: Option<u8>,
pub original_index: usize,
pub name: Option<String>,
}

View File

@@ -29,7 +29,7 @@ pub enum Modal {
bank: usize,
selected: bool,
},
FileBrowser(FileBrowserState),
FileBrowser(Box<FileBrowserState>),
RenameBank {
bank: usize,
name: String,
@@ -50,7 +50,7 @@ pub enum Modal {
input: String,
},
SetTempo(String),
AddSamplePath(FileBrowserState),
AddSamplePath(Box<FileBrowserState>),
Editor,
Preview,
PatternProps {

View File

@@ -1,4 +1,3 @@
use std::collections::HashSet;
use std::path::PathBuf;
use crate::model::{MAX_BANKS, MAX_PATTERNS};
@@ -7,7 +6,7 @@ use crate::model::Project;
pub struct ProjectState {
pub project: Project,
pub file_path: Option<PathBuf>,
pub dirty_patterns: HashSet<(usize, usize)>,
dirty_patterns: [[bool; MAX_PATTERNS]; MAX_BANKS],
}
impl Default for ProjectState {
@@ -15,7 +14,7 @@ impl Default for ProjectState {
let mut state = Self {
project: Project::default(),
file_path: None,
dirty_patterns: HashSet::new(),
dirty_patterns: [[false; MAX_PATTERNS]; MAX_BANKS],
};
state.mark_all_dirty();
state
@@ -24,18 +23,23 @@ impl Default for ProjectState {
impl ProjectState {
pub fn mark_dirty(&mut self, bank: usize, pattern: usize) {
self.dirty_patterns.insert((bank, pattern));
self.dirty_patterns[bank][pattern] = true;
}
pub fn mark_all_dirty(&mut self) {
for bank in 0..MAX_BANKS {
for pattern in 0..MAX_PATTERNS {
self.dirty_patterns.insert((bank, pattern));
}
}
self.dirty_patterns = [[true; MAX_PATTERNS]; MAX_BANKS];
}
pub fn take_dirty(&mut self) -> HashSet<(usize, usize)> {
std::mem::take(&mut self.dirty_patterns)
pub fn take_dirty(&mut self) -> Vec<(usize, usize)> {
let mut result = Vec::new();
for (bank, patterns) in self.dirty_patterns.iter_mut().enumerate() {
for (pattern, dirty) in patterns.iter_mut().enumerate() {
if *dirty {
*dirty = false;
result.push((bank, pattern));
}
}
}
result
}
}