This commit is contained in:
2025-12-26 23:26:56 +01:00
parent 38ce0f0c43
commit 8c5aa4f948
7 changed files with 4170 additions and 88 deletions

View File

@@ -50,16 +50,42 @@ impl Canvas {
/// Spawn the painters for this canvas
fn spawn_painters(&mut self, binary: bool, flush: bool) {
// Spawn some painters
for i in 0..self.painter_count {
// Determine the slice width
let width = self.size.0 / (self.painter_count as u16);
let grid = (self.painter_count as f64).sqrt() as usize;
if grid * grid == self.painter_count {
let tile_w = self.size.0 / (grid as u16);
let tile_h = self.size.1 / (grid as u16);
// Define the area to paint per thread
let painter_area = Rect::from((i as u16) * width, 0, width, self.size.1);
for row in 0..grid {
for col in 0..grid {
let x = (col as u16) * tile_w;
let y = (row as u16) * tile_h;
let w = if col == grid - 1 {
self.size.0 - x
} else {
tile_w
};
let h = if row == grid - 1 {
self.size.1 - y
} else {
tile_h
};
// Spawn the painter
self.spawn_painter(painter_area, binary, flush);
let painter_area = Rect::from(x, y, w, h);
self.spawn_painter(painter_area, binary, flush);
}
}
} else {
// Spawn some painters
for i in 0..self.painter_count {
// Determine the slice width
let width = self.size.0 / (self.painter_count as u16);
// Define the area to paint per thread
let painter_area = Rect::from((i as u16) * width, 0, width, self.size.1);
// Spawn the painter
self.spawn_painter(painter_area, binary, flush);
}
}
}