[librsvg: 1/2] emit_markers_for_path_builder(): Consider closepath at ending markers



commit fb65cee626a532c6d32ebd4fdcb7ec1e1d54e975
Author: Juraj Fiala <jurf riseup net>
Date:   Wed Jan 24 16:14:53 2018 +0100

    emit_markers_for_path_builder(): Consider closepath at ending markers
    
    If closepath, calculate the last marker angle the same way as with the
    other markers. Also fix and enable the respective test.
    
    Fixes #161.

 rust/src/marker.rs | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)
---
diff --git a/rust/src/marker.rs b/rust/src/marker.rs
index 3d1b509..81b9669 100644
--- a/rust/src/marker.rs
+++ b/rust/src/marker.rs
@@ -738,7 +738,16 @@ fn emit_markers_for_path_builder<E> (builder: &RsvgPathBuilder,
         if let Segment::LineOrCurve{ .. } = *segment {
             let (_, incoming_vx, incoming_vy) = find_incoming_directionality_backwards (&segments, 
segments.len () - 1);
 
-            emit_marker (segment, MarkerEndpoint::End, MarkerType::End, angle_from_vector (incoming_vx, 
incoming_vy), emit_fn);
+            let angle = {
+                if let PathCommand::ClosePath = builder.get_path_commands ()[segments.len()] {
+                    let (_, outgoing_vx, outgoing_vy) = find_outgoing_directionality_forwards (&segments, 0);
+                    bisect_angles (angle_from_vector (incoming_vx, incoming_vy), angle_from_vector 
(outgoing_vx, outgoing_vy))
+                } else {
+                    angle_from_vector (incoming_vx, incoming_vy)
+                }
+            };
+
+            emit_marker (segment, MarkerEndpoint::End, MarkerType::End, angle, emit_fn);
         }
     }
 }
@@ -1158,8 +1167,6 @@ mod marker_tests {
     }
 
     #[test]
-    #[ignore]
-    // https://gitlab.gnome.org/GNOME/librsvg/issues/161
     fn emits_for_closed_subpath () {
         let mut builder = RsvgPathBuilder::new ();
         builder.move_to (0.0, 0.0);
@@ -1178,7 +1185,7 @@ mod marker_tests {
         assert_eq! (v, vec! [(MarkerType::Start,  0.0, 0.0, 0.0),
                              (MarkerType::Middle, 1.0, 0.0, angle_from_vector (1.0, 1.0)),
                              (MarkerType::Middle, 1.0, 1.0, angle_from_vector (-1.0, 1.0)),
-                             (MarkerType::Middle, 0.0, 1.0, angle_from_vector (-1.0, 0.0)),
+                             (MarkerType::Middle, 0.0, 1.0, angle_from_vector (-1.0, -1.0)),
                              (MarkerType::End,    0.0, 0.0, angle_from_vector (1.0, -1.0))]);
     }
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]