aboutsummaryrefslogtreecommitdiff
path: root/src/app.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/app.rs')
-rw-r--r--src/app.rs41
1 files changed, 24 insertions, 17 deletions
diff --git a/src/app.rs b/src/app.rs
index 84869a3..725a45a 100644
--- a/src/app.rs
+++ b/src/app.rs
@@ -176,8 +176,10 @@ impl<'ctx> AppState<'ctx> {
176 .chain(sym_circle) 176 .chain(sym_circle)
177 .filter(|&pt| dither::bayer(dither_level, pt)) 177 .filter(|&pt| dither::bayer(dither_level, pt))
178 { 178 {
179 let old_val = self.pixmap.set(point, val); 179 if self.pixmap.contains(point) {
180 modify_record.push(PaintRecord::new(point, old_val, val)); 180 let old_val = self.pixmap.set(point, val);
181 modify_record.push(PaintRecord::new(point, old_val, val));
182 }
181 } 183 }
182 Ok(modify_record) 184 Ok(modify_record)
183 } 185 }
@@ -203,8 +205,10 @@ impl<'ctx> AppState<'ctx> {
203 .into_iter() 205 .into_iter()
204 .filter(|&pt| dither::bayer(dither_level, pt)) 206 .filter(|&pt| dither::bayer(dither_level, pt))
205 { 207 {
206 let old_val = self.pixmap.set(c, val); 208 if self.pixmap.contains(c) {
207 line_modify_record.push(PaintRecord::new(c, old_val, val)); 209 let old_val = self.pixmap.set(c, val);
210 line_modify_record.push(PaintRecord::new(c, old_val, val));
211 }
208 } 212 }
209 } 213 }
210 Ok(line_modify_record) 214 Ok(line_modify_record)
@@ -353,9 +357,11 @@ impl<'ctx> AppState<'ctx> {
353 container.place(&mut padding_box, HorAlign::Right, VertAlign::Center); 357 container.place(&mut padding_box, HorAlign::Right, VertAlign::Center);
354 padding_box.place(&mut primary, HorAlign::Center, VertAlign::Center); 358 padding_box.place(&mut primary, HorAlign::Center, VertAlign::Center);
355 359
356 self.canvas.set_draw_color(if !self.active_color { WHITE } else { BLACK }); 360 self.canvas
361 .set_draw_color(if !self.active_color { WHITE } else { BLACK });
357 self.canvas.fill_rect(primary.area()).unwrap(); 362 self.canvas.fill_rect(primary.area()).unwrap();
358 self.canvas.set_draw_color(if self.active_color { WHITE } else { BLACK }); 363 self.canvas
364 .set_draw_color(if self.active_color { WHITE } else { BLACK });
359 365
360 let brush_box = (0..8) 366 let brush_box = (0..8)
361 .map(|x| (0..8).map(|y| (x, y).into()).collect::<Vec<MapPoint>>()) 367 .map(|x| (0..8).map(|y| (x, y).into()).collect::<Vec<MapPoint>>())
@@ -364,9 +370,11 @@ impl<'ctx> AppState<'ctx> {
364 .collect::<Vec<_>>(); 370 .collect::<Vec<_>>();
365 371
366 for pt in brush_box { 372 for pt in brush_box {
367 let canvas_pt = Point::from(primary.start) 373 let canvas_pt =
368 + Point::from((pt.x as i32 * 2, pt.y as i32 * 2)); 374 Point::from(primary.start) + Point::from((pt.x as i32 * 2, pt.y as i32 * 2));
369 self.canvas.fill_rect(rect!(canvas_pt.x(), canvas_pt.y(), 2, 2)).unwrap(); 375 self.canvas
376 .fill_rect(rect!(canvas_pt.x(), canvas_pt.y(), 2, 2))
377 .unwrap();
370 } 378 }
371 379
372 let mouse_coords = if let Some((x, y)) = self.idx_at_coord(self.mouse) { 380 let mouse_coords = if let Some((x, y)) = self.idx_at_coord(self.mouse) {
@@ -735,20 +743,19 @@ impl<'ctx> AppState<'ctx> {
735 Brush::Fill => { 743 Brush::Fill => {
736 if let Some(c) = contact { 744 if let Some(c) = contact {
737 let target = self.pixmap.get(c); 745 let target = self.pixmap.get(c);
738 let mut operation = vec![]; 746 let replacement = self.active_color;
739 self.pixmap.flood_fill( 747 let operation =
740 c, 748 self.pixmap.flood_fill(c, target, replacement);
741 target, 749 for o in operation.iter() {
742 self.active_color, 750 self.pixmap.set(o.clone(), replacement);
743 &mut operation, 751 }
744 );
745 self.current_operation.extend( 752 self.current_operation.extend(
746 operation 753 operation
747 .into_iter() 754 .into_iter()
748 .map(|point| PaintRecord { 755 .map(|point| PaintRecord {
749 point, 756 point,
750 old: target, 757 old: target,
751 new: self.active_color, 758 new: replacement,
752 }) 759 })
753 .collect::<Vec<PaintRecord>>(), 760 .collect::<Vec<PaintRecord>>(),
754 ) 761 )