summaryrefslogtreecommitdiff
path: root/src/label_formats/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/label_formats/mod.rs')
-rw-r--r--src/label_formats/mod.rs28
1 files changed, 28 insertions, 0 deletions
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<u16>,
+ 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);
+ }
+}
+