New themes

This commit is contained in:
2026-02-06 00:19:16 +01:00
parent 51f52be4ce
commit 6ec3a86568
11 changed files with 1178 additions and 46 deletions

View File

@@ -7,6 +7,7 @@ pub struct ProjectState {
pub project: Project,
pub file_path: Option<PathBuf>,
dirty_patterns: [[bool; MAX_PATTERNS]; MAX_BANKS],
dirty_count: usize,
}
impl Default for ProjectState {
@@ -15,6 +16,7 @@ impl Default for ProjectState {
project: Project::default(),
file_path: None,
dirty_patterns: [[false; MAX_PATTERNS]; MAX_BANKS],
dirty_count: 0,
};
state.mark_all_dirty();
state
@@ -23,15 +25,22 @@ impl Default for ProjectState {
impl ProjectState {
pub fn mark_dirty(&mut self, bank: usize, pattern: usize) {
self.dirty_patterns[bank][pattern] = true;
if !self.dirty_patterns[bank][pattern] {
self.dirty_patterns[bank][pattern] = true;
self.dirty_count += 1;
}
}
pub fn mark_all_dirty(&mut self) {
self.dirty_patterns = [[true; MAX_PATTERNS]; MAX_BANKS];
self.dirty_count = MAX_BANKS * MAX_PATTERNS;
}
pub fn take_dirty(&mut self) -> Vec<(usize, usize)> {
let mut result = Vec::new();
if self.dirty_count == 0 {
return Vec::new();
}
let mut result = Vec::with_capacity(self.dirty_count);
for (bank, patterns) in self.dirty_patterns.iter_mut().enumerate() {
for (pattern, dirty) in patterns.iter_mut().enumerate() {
if *dirty {
@@ -40,6 +49,7 @@ impl ProjectState {
}
}
}
self.dirty_count = 0;
result
}
}