From f9dda0f77e018142cee46e2a9ccf7b03b5ab8f21 Mon Sep 17 00:00:00 2001 From: Akshay Date: Sun, 28 Mar 2021 16:31:48 +0530 Subject: restructure Brush enum --- src/brush.rs | 61 ++++++++++++++++++++++++++++++++++-------------------------- 1 file changed, 35 insertions(+), 26 deletions(-) (limited to 'src/brush.rs') diff --git a/src/brush.rs b/src/brush.rs index 1a365b1..8ff0cda 100644 --- a/src/brush.rs +++ b/src/brush.rs @@ -4,29 +4,36 @@ 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, - }, + Line(LineBrush), + Circle(CircleBrush), + RectSelect(RectSelectBrush), Fill, - Custom { - size: u8, - }, + Custom { size: u8 }, +} + +#[derive(Debug, Copy, Clone)] +pub struct LineBrush { + pub size: u8, + pub start: Option, + pub extend: bool, +} + +#[derive(Debug, Copy, Clone)] +pub struct CircleBrush { + pub size: u8, +} + +#[derive(Debug, Copy, Clone)] +pub struct RectSelectBrush { + pub start: MapPoint, + pub end: MapPoint, } impl Brush { pub fn grow(&mut self) { match self { - Brush::Line { ref mut size, .. } => *size += 1, - Brush::Circle { ref mut size, .. } => *size += 1, + Brush::Line(LineBrush { ref mut size, .. }) => *size += 1, + Brush::Circle(CircleBrush { ref mut size, .. }) => *size += 1, Brush::Custom { ref mut size, .. } => *size += 1, _ => (), } @@ -34,23 +41,23 @@ impl Brush { pub fn shrink(&mut self) { match self { - Brush::Line { ref mut size, .. } => *size = size.saturating_sub(1), - Brush::Circle { ref mut size, .. } => *size = size.saturating_sub(1), + Brush::Line(LineBrush { ref mut size, .. }) => *size = size.saturating_sub(1), + Brush::Circle(CircleBrush { ref mut size, .. }) => *size = size.saturating_sub(1), Brush::Custom { ref mut size, .. } => *size = size.saturating_sub(1), _ => (), } } pub fn new(size: u8) -> Self { - Brush::Circle { size } + Brush::Circle(CircleBrush { size }) } pub fn line(size: u8, extend: bool) -> Self { - Brush::Line { + Brush::Line(LineBrush { size, start: None, extend, - } + }) } pub fn is_line(&self) -> bool { @@ -59,8 +66,8 @@ impl Brush { pub fn size(&self) -> Option { match self { - Brush::Line { size, .. } => Some(size.clone()), - Brush::Circle { size } => Some(size.clone()), + Brush::Line(LineBrush { size, .. }) => Some(size.clone()), + Brush::Circle(CircleBrush { size }) => Some(size.clone()), _ => None, } } @@ -69,8 +76,10 @@ impl Brush { 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::Line(LineBrush { 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"), -- cgit v1.2.3