Skip to content

Commit 4b3a160

Browse files
committed
First pass at builder pattern for scatter style
1 parent 2918c7f commit 4b3a160

File tree

3 files changed

+37
-18
lines changed

3 files changed

+37
-18
lines changed

src/scatter.rs

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,37 @@ use svg_render;
77
use text_render;
88
use representation::Representation;
99

10-
#[derive(Debug)]
10+
#[derive(Debug,Clone)]
1111
pub enum Marker {
1212
Circle,
1313
Square,
1414
}
1515

16-
#[derive(Debug)]
16+
#[derive(Debug,Clone)]
1717
pub struct Style {
18-
pub marker: Marker,
18+
pub marker: Option<Marker>,
19+
pub colour: Option<String>,
1920
}
2021

2122
impl Style {
22-
fn defaults() -> Self {
23-
Style { marker: Marker::Circle }
23+
pub fn new() -> Self {
24+
Style {
25+
marker: None,
26+
colour: None,
27+
}
28+
}
29+
30+
pub fn fill_defaults(&self) -> Self {
31+
Style {
32+
marker: match self.marker {
33+
Some(ref m) => Some(m.clone()),
34+
None => Some(Marker::Circle),
35+
},
36+
colour: match self.colour {
37+
Some(ref c) => Some(c.clone()),
38+
None => Some("".into()),
39+
}
40+
}
2441
}
2542
}
2643

@@ -29,7 +46,7 @@ impl Style {
2946
#[derive(Debug)]
3047
pub struct Scatter {
3148
pub data: Vec<(f64, f64)>,
32-
pub style: Style,
49+
style: Style,
3350
}
3451

3552
impl Scatter {
@@ -41,7 +58,7 @@ impl Scatter {
4158

4259
Scatter {
4360
data: data,
44-
style: Style::defaults(),
61+
style: Style::new(),
4562
}
4663
}
4764

@@ -50,6 +67,10 @@ impl Scatter {
5067
self
5168
}
5269

70+
pub fn get_style(&self) -> Style {
71+
self.style.clone()
72+
}
73+
5374
fn x_range(&self) -> (f64, f64) {
5475
let mut min = f64::INFINITY;
5576
let mut max = f64::NEG_INFINITY;
@@ -86,7 +107,7 @@ impl Representation for Scatter {
86107
face_width: f64,
87108
face_height: f64)
88109
-> svg::node::element::Group {
89-
svg_render::draw_face_points(self, &x_axis, &y_axis, face_width, face_height, &self.style)
110+
svg_render::draw_face_points(self, &x_axis, &y_axis, face_width, face_height, &self.style.fill_defaults())
90111
}
91112

92113
fn to_text(&self,
@@ -95,6 +116,6 @@ impl Representation for Scatter {
95116
face_width: u32,
96117
face_height: u32)
97118
-> String {
98-
text_render::render_face_points(self, &x_axis, &y_axis, face_width, face_height, &self.style)
119+
text_render::render_face_points(self, &x_axis, &y_axis, face_width, face_height, &self.style.fill_defaults())
99120
}
100121
}

src/svg_render.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -109,14 +109,14 @@ pub fn draw_face_points(s: &scatter::Scatter,
109109
let x_pos = value_to_face_offset(x, &x_axis, face_width);
110110
let y_pos = -value_to_face_offset(y, &y_axis, face_height);
111111
let radius = 5.;
112-
match style.marker {
113-
scatter::Marker::Circle => {
112+
match style.marker.as_ref().unwrap() {
113+
&scatter::Marker::Circle => {
114114
group.append(node::element::Circle::new()
115115
.set("cx", x_pos)
116116
.set("cy", y_pos)
117117
.set("r", radius));
118118
},
119-
scatter::Marker::Square => {
119+
&scatter::Marker::Square => {
120120
group.append(node::element::Rectangle::new()
121121
.set("x", x_pos - radius)
122122
.set("y", y_pos - radius)

src/text_render.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -331,9 +331,9 @@ pub fn render_face_points(s: &scatter::Scatter,
331331
})
332332
.collect();
333333

334-
let marker = match style.marker {
335-
scatter::Marker::Circle => '●',
336-
scatter::Marker::Square => '■',
334+
let marker = match style.marker.as_ref().unwrap() {
335+
&scatter::Marker::Circle => '●',
336+
&scatter::Marker::Square => '■',
337337
};
338338

339339
let mut face_strings: Vec<String> = vec![];
@@ -557,9 +557,7 @@ mod tests {
557557
let s = scatter::Scatter::from_vec(&data);
558558
let x_axis = axis::Axis::new(-3.575, 9.075);
559559
let y_axis = axis::Axis::new(-1.735, 5.635);
560-
let style = scatter::Style {
561-
marker: scatter::Marker::Circle,
562-
};
560+
let style = scatter::Style::new().fill_defaults();
563561
let strings = render_face_points(&s, &x_axis, &y_axis, 20, 10, &style);
564562
assert_eq!(strings.lines().count(), 10);
565563
assert!(strings.lines().all(|s| s.chars().count() == 20));

0 commit comments

Comments
 (0)