summaryrefslogtreecommitdiffstats
path: root/svgbob/src/buffer/fragment_buffer/fragment.rs
diff options
context:
space:
mode:
Diffstat (limited to 'svgbob/src/buffer/fragment_buffer/fragment.rs')
-rw-r--r--svgbob/src/buffer/fragment_buffer/fragment.rs35
1 files changed, 33 insertions, 2 deletions
diff --git a/svgbob/src/buffer/fragment_buffer/fragment.rs b/svgbob/src/buffer/fragment_buffer/fragment.rs
index ae3378a..6795558 100644
--- a/svgbob/src/buffer/fragment_buffer/fragment.rs
+++ b/svgbob/src/buffer/fragment_buffer/fragment.rs
@@ -97,7 +97,8 @@ impl Fragment {
}
}
- /// FIXME: This is only merging lines and text right now
+ /// merge this fragment to the other fragment if it is possible
+ /// returns None if the fragment can not be merge
pub fn merge(&self, other: &Self) -> Option<Self> {
match (self, other) {
// line and line
@@ -118,9 +119,12 @@ impl Fragment {
/*
// line and marker_line
(Fragment::Line(line), Fragment::MarkerLine(mline)) => line.merge_marker_line(mline),
-
+ */
+ /*
// marker_line and line
(Fragment::MarkerLine(mline), Fragment::Line(line)) => line.merge_marker_line(mline),
+ */
+ /*
(Fragment::MarkerLine(mline), Fragment::Polygon(polygon)) => {
mline.merge_polygon(polygon)
}
@@ -659,6 +663,33 @@ mod tests {
}
#[test]
+ fn merge_line_and_circle() {
+ let a = CellGrid::a();
+ let m = CellGrid::m();
+ let y = CellGrid::y();
+
+ let circle = circle(m, Cell::unit(2), false);
+
+ let circle = circle.absolute_position(Cell::new(0, 0));
+ let diagonal: Fragment = Line::new_noswap(a, y, false).into();
+ let diagonal = diagonal.absolute_position(Cell::new(1, 1));
+
+ println!("circle: {:#?}", circle);
+ println!("diagonal: {:#?}", diagonal);
+
+ let merged = circle.merge(&diagonal);
+
+ let expected = marker_line(
+ Point::new(2.0, 4.0),
+ Point::new(0.5, 1.0),
+ false,
+ None,
+ Some(Marker::BigOpenCircle),
+ );
+ assert_eq!(Some(expected), merged);
+ }
+
+ #[test]
fn line_overlaps() {
let line = Line::new(CellGrid::a(), CellGrid::b(), false);
println!("line: {}", line);