summaryrefslogtreecommitdiffstats
path: root/svgbob/src/element.rs
diff options
context:
space:
mode:
Diffstat (limited to 'svgbob/src/element.rs')
-rw-r--r--svgbob/src/element.rs109
1 files changed, 28 insertions, 81 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 {
}
}
}
+