diff options
author | Jovansonlee Cesar <ivanceras@gmail.com> | 2018-07-31 06:16:03 +0800 |
---|---|---|
committer | Jovansonlee Cesar <ivanceras@gmail.com> | 2018-07-31 06:16:03 +0800 |
commit | b9fdfed96a68e7992f426fdfe362ab4c3f42b64e (patch) | |
tree | 8e633e5cc4fcfcb80debfcb4dd845fdc788be41c | |
parent | 707fe5654522b1001095748633ec9721513101dd (diff) |
Add big open circle and big open circle marker
corrected the circle marker style and viewbox
-rw-r--r-- | svgbob/src/element.rs | 13 | ||||
-rw-r--r-- | svgbob/src/focus_char.rs | 3 | ||||
-rw-r--r-- | svgbob/src/fragments.rs | 6 | ||||
-rw-r--r-- | svgbob/src/grid.rs | 44 | ||||
-rw-r--r-- | svgbob/src/optimizer.rs | 21 | ||||
-rw-r--r-- | svgbob/src/properties.rs | 36 |
6 files changed, 78 insertions, 45 deletions
diff --git a/svgbob/src/element.rs b/svgbob/src/element.rs index 76ee05d..d6ebcb1 100644 --- a/svgbob/src/element.rs +++ b/svgbob/src/element.rs @@ -16,7 +16,7 @@ use loc::Loc; use element::{ Stroke::{Solid,Dashed}, ArcFlag::{Minor,Major}, - Feature::{Arrow,ArrowStart,Circle,OpenCircle}, + Feature::{Arrow,ArrowStart,Circle,OpenCircle,BigOpenCircle}, }; use unicode_width::UnicodeWidthStr; @@ -41,6 +41,7 @@ pub enum Feature { Arrow, //end Circle, //start OpenCircle, //start + BigOpenCircle, //start } @@ -78,6 +79,10 @@ pub fn circle_open_line(a: &Point, b: &Point) -> Element { Element::Line(a.clone(), b.clone(), Solid, vec![OpenCircle]) } +pub fn big_circle_open_line(a: &Point, b: &Point) -> Element { + Element::Line(a.clone(), b.clone(), Solid, vec![BigOpenCircle]) +} + pub fn solid_circle(c: &Point, r: f32) -> Element { Element::Circle(c.clone(), r, "solid".to_string()) } @@ -266,6 +271,9 @@ impl Element { OpenCircle => { svg_line.assign("marker-start", "url(#open_circle)"); } + BigOpenCircle => { + svg_line.assign("marker-start", "url(#big_open_circle)"); + } }; } match *stroke { @@ -303,6 +311,9 @@ impl Element { OpenCircle => { svg_arc.assign("marker-start", "url(#open_circle)"); } + BigOpenCircle => { + svg_arc.assign("marker-start", "url(#big_open_circle)"); + } }; } SvgElement::Path(svg_arc) diff --git a/svgbob/src/focus_char.rs b/svgbob/src/focus_char.rs index 437d4a3..863b59c 100644 --- a/svgbob/src/focus_char.rs +++ b/svgbob/src/focus_char.rs @@ -13,7 +13,7 @@ use point::Point; use loc_block::LocBlock; use element::Element; use fragments::Fragment::Text; -use element::{line,dashed_line,circle_start_line, circle_open_line,arrow_line,start_arrow_line,arc,open_circle,solid_circle,text}; +use element::{line,dashed_line,circle_start_line, circle_open_line,big_circle_open_line, arrow_line,start_arrow_line,arc,open_circle,solid_circle,text}; use location::Location; use settings::Settings; use enhance::Enhance; @@ -174,6 +174,7 @@ impl<'g> FocusChar<'g> { Fragment::Line(p1, p2) => line(&self.point(&p1), &self.point(&p2)), Fragment::CircleStartLine(p1, p2) => circle_start_line(&self.point(&p1), &self.point(&p2)), Fragment::CircleOpenLine(p1, p2) => circle_open_line(&self.point(&p1), &self.point(&p2)), + Fragment::BigCircleOpenLine(p1, p2) => big_circle_open_line(&self.point(&p1), &self.point(&p2)), Fragment::DashedLine(p1, p2) => dashed_line(&self.point(&p1), &self.point(&p2)), Fragment::ArrowLine(p1, p2) => arrow_line(&self.point(&p1), &self.point(&p2)), diff --git a/svgbob/src/fragments.rs b/svgbob/src/fragments.rs index 43649f6..3fc6666 100644 --- a/svgbob/src/fragments.rs +++ b/svgbob/src/fragments.rs @@ -1,4 +1,4 @@ -use self::Fragment::{Arc, ArrowLine, Line, DashedLine, CircleStartLine, CircleOpenLine, OpenCircle, SolidCircle, StartArrowLine}; +use self::Fragment::{Arc, ArrowLine, Line, DashedLine, CircleStartLine, CircleOpenLine, BigCircleOpenLine, OpenCircle, SolidCircle, StartArrowLine}; use point_block::PointBlock; @@ -12,6 +12,7 @@ pub enum Fragment { Line(PointBlock, PointBlock), CircleStartLine(PointBlock, PointBlock), CircleOpenLine(PointBlock, PointBlock), + BigCircleOpenLine(PointBlock, PointBlock), DashedLine(PointBlock, PointBlock), ArrowLine(PointBlock, PointBlock), StartArrowLine(PointBlock, PointBlock), // the arrow is at the start marker @@ -30,6 +31,9 @@ pub fn circle_start_line(p1: &PointBlock, p2: &PointBlock) -> Fragment { pub fn circle_open_line(p1: &PointBlock, p2: &PointBlock) -> Fragment { CircleOpenLine(p1.clone(), p2.clone()) } +pub fn big_circle_open_line(p1: &PointBlock, p2: &PointBlock) -> Fragment { + BigCircleOpenLine(p1.clone(), p2.clone()) +} pub fn dashed_line(p1: &PointBlock, p2: &PointBlock) -> Fragment { DashedLine(p1.clone(), p2.clone()) } diff --git a/svgbob/src/grid.rs b/svgbob/src/grid.rs index f52bb8e..fbe427e 100644 --- a/svgbob/src/grid.rs +++ b/svgbob/src/grid.rs @@ -310,6 +310,7 @@ fn get_defs() -> Definitions { defs.append(arrow_marker()); defs.append(circle_marker()); defs.append(open_circle_marker()); + defs.append(big_open_circle_marker()); defs } @@ -327,7 +328,8 @@ fn get_styles(settings: &Settings) -> Style { line.dashed {{ stroke-dasharray: 5; }} - circle {{ + circle.solid {{ + fill:{stroke_color}; stroke: black; stroke-width: {stroke_width}; stroke-opacity: 1; @@ -335,11 +337,14 @@ fn get_styles(settings: &Settings) -> Style { stroke-linecap: round; stroke-linejoin: miter; }} - circle.solid {{ - fill:{stroke_color}; - }} circle.open {{ fill:{background_color}; + stroke: black; + stroke-width: {stroke_width}; + stroke-opacity: 1; + fill-opacity: 1; + stroke-linecap: round; + stroke-linejoin: miter; }} tspan.head{{ fill: none; @@ -386,7 +391,7 @@ fn circle_marker() -> Marker { .set("cx",10) .set("cy",10) .set("r",8) - .set("fill","red"); + .set("fill","black"); marker.append(circle); marker } @@ -396,14 +401,35 @@ fn open_circle_marker() -> Marker { .set("viewBox", "0 0 20 20") .set("refX", 10) .set("refY", 10) - .set("markerWidth", 5) - .set("markerHeight", 5); + .set("markerWidth", 10) + .set("markerHeight", 10); let mut circle = SvgCircle::new() .set("cx",10) .set("cy",10) - .set("r",8) - .set("fill","green"); + .set("r",4) + .set("stroke","black") + .set("stroke-width",2) + .set("fill","white"); + marker.append(circle); + marker +} +fn big_open_circle_marker() -> Marker { + let mut marker = Marker::new() + .set("id", "big_open_circle") + .set("viewBox", "0 0 40 40") + .set("refX", 20) + .set("refY", 20) + .set("markerWidth", 20) + .set("markerHeight", 20); + + let mut circle = SvgCircle::new() + .set("cx",20) + .set("cy",20) + .set("r",6) + .set("stroke","black") + .set("stroke-width",2) + .set("fill","white"); marker.append(circle); marker } diff --git a/svgbob/src/optimizer.rs b/svgbob/src/optimizer.rs index 3a33e7c..420050d 100644 --- a/svgbob/src/optimizer.rs +++ b/svgbob/src/optimizer.rs @@ -1,5 +1,5 @@ use element::Element; -use element::Feature; +use element::Feature::{self, OpenCircle, BigOpenCircle}; use loc::Loc; use settings::Settings; use element::Stroke; @@ -161,6 +161,7 @@ impl Optimizer { let mut merged = vec![]; let mut solid_lines = vec![]; let mut dashed_lines = vec![]; + let mut featured_solid_lines = vec![]; let mut solid_arcs = vec![]; let mut dashed_arcs = vec![]; let mut text = vec![]; @@ -171,12 +172,18 @@ impl Optimizer { circles.push(elm.clone()); } Element::Line(_, _, ref stroke, ref features) => { - match *stroke { - Stroke::Solid => { - solid_lines.push(elm.clone()); + if features.contains(&OpenCircle) + || features.contains(&BigOpenCircle){ + featured_solid_lines.push(elm.clone()) } - Stroke::Dashed => { - dashed_lines.push(elm.clone()); + else{ + match *stroke { + Stroke::Solid => { + solid_lines.push(elm.clone()); + } + Stroke::Dashed => { + dashed_lines.push(elm.clone()); + } } } }, @@ -200,6 +207,8 @@ impl Optimizer { merged.extend(dashed_arcs); merged.extend(text); merged.extend(circles); + /// put last to be infront of everything + merged.extend(featured_solid_lines); merged } } diff --git a/svgbob/src/properties.rs b/svgbob/src/properties.rs index 0517c2e..6c482c1 100644 --- a/svgbob/src/properties.rs +++ b/svgbob/src/properties.rs @@ -5,7 +5,7 @@ use block::Block::{A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U use point_block::PointBlock; use fragments::Fragment; -use fragments::{arc, arrow_line, line, circle_start_line, circle_open_line, open_circle, solid_circle, start_arrow_line, dashed_line}; +use fragments::{arc, arrow_line, line, circle_start_line, circle_open_line, big_circle_open_line, open_circle, solid_circle, start_arrow_line, dashed_line}; use self::Signal::{Medium, Strong, Weak}; use box_drawing; @@ -1199,32 +1199,14 @@ impl Properties for char { ], intended_behavior: vec![], properties: vec![ - (C, Medium, vec![open_circle(m, 3)]), - (W, Medium, vec![open_circle(m, 3)]), - //TODO: properties should be able to consume - // some elements - (K, Medium, vec![open_circle(m, 3)]), - (O, Medium, vec![open_circle(m, 3)]), - ( - A, - Medium, - vec![line(a, &a.adjust(0.5, 1.0)), open_circle(m, 3)], - ), - ( - E, - Medium, - vec![line(e, &e.adjust(-0.5, 1.0)), open_circle(m, 3)], - ), - ( - U, - Medium, - vec![line(u, &u.adjust(0.5, -1.0)), open_circle(m, 3)], - ), - ( - Y, - Medium, - vec![line(y, &y.adjust(-0.5, -1.0)), open_circle(m, 3)], - ), + (C, Medium, vec![big_circle_open_line(m, c)]), + (W, Medium, vec![big_circle_open_line(m, w)]), + (K, Medium, vec![big_circle_open_line(m, k)]), + (O, Medium, vec![big_circle_open_line(m, o)]), + (A, Medium, vec![big_circle_open_line(m, a)]), + (E, Medium, vec![big_circle_open_line(m, e)]), + (U, Medium, vec![big_circle_open_line(m, u)]), + (Y, Medium, vec![big_circle_open_line(m, y)]), ], }) } |