From b903f5a5e9250691bab6644200b244a0da961219 Mon Sep 17 00:00:00 2001 From: cc Date: Wed, 20 Aug 2025 21:01:36 -0700 Subject: Move flood fill Make it crate-available --- src/label_formats/mod.rs | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'src/label_formats/mod.rs') diff --git a/src/label_formats/mod.rs b/src/label_formats/mod.rs index 1e3e4ae..b48486a 100644 --- a/src/label_formats/mod.rs +++ b/src/label_formats/mod.rs @@ -3,3 +3,31 @@ mod label_format; pub use large_label_format::LargeLabelFormat; pub use label_format::LabelFormat; + +pub(crate) fn flood(source: &LargeLabelFormat, destination: &mut Vec, + x: usize, y: usize, + from_color: u32, to_color: u16) { + let width = source.width; + let destination_color = destination[x + y * width]; + if destination_color != 0 { + return; + } + let source_color = source.buffer[x + y * width]; + if source_color != from_color { + return; + } + destination[x + y * width] = to_color; + if x > 0 { + flood(source, destination, x-1, y, from_color, to_color); + } + if (x+1) < width { + flood(source, destination, x+1, y, from_color, to_color); + } + if y > 0 { + flood(source, destination, x, y-1, from_color, to_color); + } + if (y+1) < source.height { + flood(source, destination, x, y+1, from_color, to_color); + } +} + -- cgit v1.2.1