summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJovansonlee Cesar <ivanceras@gmail.com>2018-10-05 02:29:11 +0800
committerJovansonlee Cesar <ivanceras@gmail.com>2018-10-05 02:29:11 +0800
commitffac40b6fe04632e58f0ae225467a56cfaf9fb52 (patch)
tree8def0bbe8299aa25cdd2dc210c540cf651d7248c
parent79cee03da8c88e2386f0127a935e8f7fdd73e7fb (diff)
Refactor code to combine repitive code in a function
-rw-r--r--svgbob/src/element.rs109
-rw-r--r--svgbob/src/grid.rs6
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")