summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJovansonlee Cesar <ivanceras@gmail.com>2018-07-31 06:16:03 +0800
committerJovansonlee Cesar <ivanceras@gmail.com>2018-07-31 06:16:03 +0800
commitb9fdfed96a68e7992f426fdfe362ab4c3f42b64e (patch)
tree8e633e5cc4fcfcb80debfcb4dd845fdc788be41c
parent707fe5654522b1001095748633ec9721513101dd (diff)
Add big open circle and big open circle marker
corrected the circle marker style and viewbox
-rw-r--r--svgbob/src/element.rs13
-rw-r--r--svgbob/src/focus_char.rs3
-rw-r--r--svgbob/src/fragments.rs6
-rw-r--r--svgbob/src/grid.rs44
-rw-r--r--svgbob/src/optimizer.rs21
-rw-r--r--svgbob/src/properties.rs36
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)]),
],
})
}