diff options
Diffstat (limited to 'src/app.rs')
-rw-r--r-- | src/app.rs | 41 |
1 files changed, 24 insertions, 17 deletions
@@ -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 | ) |