From bbfca639547fcd08e51181b70e449e71281d1d9b Mon Sep 17 00:00:00 2001 From: Akshay Date: Sun, 28 Mar 2021 09:51:26 +0530 Subject: add new brush type --- src/brush.rs | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 src/brush.rs (limited to 'src/brush.rs') diff --git a/src/brush.rs b/src/brush.rs new file mode 100644 index 0000000..98c2b23 --- /dev/null +++ b/src/brush.rs @@ -0,0 +1,73 @@ +use std::fmt; + +use crate::bitmap::MapPoint; + +#[derive(Debug, Copy, Clone)] +pub enum Brush { + Line { + size: u8, + start: Option, + extend: bool, + }, + Circle { + size: u8, + }, + RectSelect { + start: MapPoint, + end: MapPoint, + }, + Fill, + Custom { + size: u8, + }, +} + +impl Brush { + pub fn grow(&mut self) -> Result<(), BrushError> { + match self { + Brush::Line { ref mut size, .. } => *size += 1, + Brush::Circle { ref mut size, .. } => *size += 1, + Brush::Custom { ref mut size, .. } => *size += 1, + _ => return Err(BrushError::CannotIncreaseSize), + } + Ok(()) + } + pub fn shrink(&mut self) -> Result<(), BrushError> { + match self { + Brush::Line { ref mut size, .. } => *size += size.saturating_sub(1), + Brush::Circle { ref mut size, .. } => *size += size.saturating_sub(1), + Brush::Custom { ref mut size, .. } => *size += size.saturating_sub(1), + _ => return Err(BrushError::CannotIncreaseSize), + } + Ok(()) + } + pub fn new() -> Self { + Brush::Circle { size: 0 } + } + pub fn line(size: u8, extend: bool) -> Self { + Brush::Line { + size, + start: None, + extend, + } + } + pub fn is_line(&self) -> bool { + matches!(self, Self::Line { .. }) + } +} + +impl fmt::Display for Brush { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + match self { + Brush::Line { extend, .. } => write!(f, "LINE{}", if *extend { "+" } else { "" }), + Brush::Circle { .. } => write!(f, "CIRCLE"), + Brush::RectSelect { .. } => write!(f, "SELECT"), + Brush::Fill => write!(f, "FILL"), + Brush::Custom { .. } => write!(f, "CUSTOM"), + } + } +} + +pub enum BrushError { + CannotIncreaseSize, +} -- cgit v1.2.3