diff options
author | Jovansonlee Cesar <ivanceras@gmail.com> | 2018-10-05 02:29:11 +0800 |
---|---|---|
committer | Jovansonlee Cesar <ivanceras@gmail.com> | 2018-10-05 02:29:11 +0800 |
commit | ffac40b6fe04632e58f0ae225467a56cfaf9fb52 (patch) | |
tree | 8def0bbe8299aa25cdd2dc210c540cf651d7248c | |
parent | 79cee03da8c88e2386f0127a935e8f7fdd73e7fb (diff) |
Refactor code to combine repitive code in a function
-rw-r--r-- | svgbob/src/element.rs | 109 | ||||
-rw-r--r-- | svgbob/src/grid.rs | 6 |
2 files changed, 33 insertions, 82 deletions
diff --git a/svgbob/src/element.rs b/svgbob/src/element.rs index d2f9284..f723a35 100644 --- a/svgbob/src/element.rs +++ b/svgbob/src/element.rs @@ -79,6 +79,21 @@ pub enum Feature { Nothing, } +impl Feature { + + fn get_marker(&self) -> Option<&str> { + match *self { + Nothing => None, + Arrow => Some("url(#triangle)"), + ClearArrow => Some("url(#clear_triangle)"), + Circle => Some("url(#circle)"), + Square => Some("url(#square)"), + OpenCircle => Some("url(#open_circle)"), + BigOpenCircle => Some("url(#big_open_circle)"), + } + } +} + #[derive(Debug, Clone, PartialEq, PartialOrd)] @@ -299,6 +314,7 @@ impl Element { } } + /// convert drawing element to SVG element pub fn to_svg(&self, settings: &Settings) -> SvgElement { match *self { @@ -317,47 +333,12 @@ impl Element { .set("y1", s.y) .set("x2", e.x) .set("y2", e.y); - match *start_feature { - Nothing => (), - Arrow => { - svg_line.assign("marker-start", "url(#triangle)"); - } - ClearArrow => { - svg_line.assign("marker-start", "url(#clear_triangle)"); - } - Circle => { - svg_line.assign("marker-start", "url(#circle)"); - } - Square => { - svg_line.assign("marker-start", "url(#square)"); - } - OpenCircle => { - svg_line.assign("marker-start", "url(#open_circle)"); - } - BigOpenCircle => { - svg_line.assign("marker-start", "url(#big_open_circle)"); - } + + if let Some(marker) = start_feature.get_marker(){ + svg_line.assign("marker-start", marker); } - match *end_feature { - Nothing => (), - Arrow => { - svg_line.assign("marker-end", "url(#triangle)"); - } - ClearArrow => { - svg_line.assign("marker-end", "url(#clear_triangle)"); - } - Circle => { - svg_line.assign("marker-end", "url(#circle)"); - } - Square => { - svg_line.assign("marker-end", "url(#square)"); - } - OpenCircle => { - svg_line.assign("marker-end", "url(#open_circle)"); - } - BigOpenCircle => { - svg_line.assign("marker-end", "url(#big_open_circle)"); - } + if let Some(marker) = end_feature.get_marker(){ + svg_line.assign("marker-end", marker); } match *stroke { Solid => (), @@ -378,48 +359,13 @@ impl Element { "M {} {} A {} {} 0 {} {} {} {}", s.x, s.y, radius, radius, arc_flag, sweept, e.x, e.y ); - let mut svg_arc = SvgPath::new().set("d", d).set("fill", "none"); - match *start_feature { - Nothing => {} - Arrow => { - svg_arc.assign("marker-start", "url(#triangle)"); - } - ClearArrow => { - svg_arc.assign("marker-start", "url(#clear_triangle)"); - } - Circle => { - svg_arc.assign("marker-start", "url(#circle)"); - } - Square => { - svg_arc.assign("marker-start", "url(#square)"); - } - OpenCircle => { - svg_arc.assign("marker-start", "url(#open_circle)"); - } - BigOpenCircle => { - svg_arc.assign("marker-start", "url(#big_open_circle)"); - } + let mut svg_arc = SvgPath::new() + .set("d", d); + if let Some(marker) = start_feature.get_marker(){ + svg_arc.assign("marker-start", marker); } - match *end_feature { - Nothing => {} - Arrow => { - svg_arc.assign("marker-end", "url(#triangle)"); - } - ClearArrow => { - svg_arc.assign("marker-end", "url(#clear_triangle)"); - } - Circle => { - svg_arc.assign("marker-end", "url(#circle)"); - } - Square => { - svg_arc.assign("marker-end", "url(#square)"); - } - OpenCircle => { - svg_arc.assign("marker-end", "url(#open_circle)"); - } - BigOpenCircle => { - svg_arc.assign("marker-end", "url(#big_open_circle)"); - } + if let Some(marker) = end_feature.get_marker(){ + svg_arc.assign("marker-end", marker); } SvgElement::Path(svg_arc) } @@ -434,3 +380,4 @@ impl Element { } } } + diff --git a/svgbob/src/grid.rs b/svgbob/src/grid.rs index 139659a..1c8966c 100644 --- a/svgbob/src/grid.rs +++ b/svgbob/src/grid.rs @@ -239,7 +239,7 @@ impl Grid { let rect = SvgRect::new() .set("x", 0) .set("y", 0) - .set("fill", self.settings.background_color.to_string()) + .set("class","backdrop") .set("width", width) .set("height", height); svg.append(rect); @@ -341,6 +341,9 @@ fn get_defs() -> Definitions { fn get_styles(settings: &Settings) -> Style { let style = format!( r#" + rect.backdrop {{ + fill: {background_color}; + }} line,path {{ stroke: {stroke_color}; stroke-width: {stroke_width}; @@ -377,6 +380,7 @@ fn get_styles(settings: &Settings) -> Style { "#, stroke_width = settings.stroke_width, stroke_color = &settings.stroke_color, + background_color = &settings.background_color, ); Style::new(style) .set("type", "text/css") |