a
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user