[librsvg: 1/2] emit_markers_for_path_builder(): Consider closepath at ending markers
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg: 1/2] emit_markers_for_path_builder(): Consider closepath at ending markers
- Date: Thu, 8 Feb 2018 20:31:17 +0000 (UTC)
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]