]> granicus.if.org Git - graphviz/commitdiff
arrows: arrow_type_normal0: fix positioning of normal/inv arrow also for l/r modifiers
authorMagnus Jacobsson <Magnus.Jacobsson@berotec.se>
Thu, 15 Sep 2022 12:12:16 +0000 (14:12 +0200)
committerMagnus Jacobsson <Magnus.Jacobsson@berotec.se>
Tue, 11 Oct 2022 19:45:27 +0000 (21:45 +0200)
The test_edge_node_overlap_normal_and_inv_edge_arrows_all_modifiers
now succeeds, so the expectancy that it should fail is removed.

lib/common/arrows.c
tests/test_edge_node_overlap_normal_and_inv_edge_arrows_all_modifiers.cpp

index 705fca7da25d7b1ef06fb6dab9db918e117c9deb..e68f193cc650950301a2ed5735634a5098c895d5 100644 (file)
@@ -504,11 +504,10 @@ static pointf arrow_type_normal0(pointf p, pointf u, double penwidth, int flag,
     q.x = p.x + u.x;
     q.y = p.y + u.y;
 
-    // FIXME: handle this correctly for ARR_MOD_LEFT and ARR_MOD_RIGHT when the
-    // angle of the arrow tip is half of the normal arrow
-
-    const pointf normal_left = {-v.x, -v.y};
-    const pointf normal_right = v;
+    const pointf origin = {0, 0};
+    const pointf v_inv = {-v.x, -v.y};
+    const pointf normal_left = flag & ARR_MOD_RIGHT ? origin : v_inv;
+    const pointf normal_right = flag & ARR_MOD_LEFT ? origin : v;
     const pointf base_left = flag & ARR_MOD_INV ? normal_right : normal_left;
     const pointf base_right = flag & ARR_MOD_INV ? normal_left : normal_right;
     const pointf normal_tip = {-u.x, -u.y};
index 22a2ce84f11d1f7df0a61dc5fa16da36c8475e9e..10a4b3de8bd787de0278d7beef2acc33a079490a 100644 (file)
@@ -5,14 +5,11 @@
 #include "test_edge_node_overlap_utilities.h"
 #include "test_utilities.h"
 
-// FIXME: this test fails for the 'l' and 'r' arrow shape modifiers which do not
-// handle the miter point correctly yet
-
 TEST_CASE(
     "Edge node overlap for normal and inv arrow with all arrow shape modifiers",
-    "[!shouldfail] An edge connected to a node shall touch that node and not "
-    "overlap it too much, regardless of if the arrow shape is 'normal' or "
-    "'inv' and which arrrow shape modifier is used") {
+    "An edge connected to a node shall touch that node and not overlap it too "
+    "much, regardless of if the arrow shape is 'normal' or 'inv' and which "
+    "arrrow shape modifier is used") {
 
   std::string filename_base = AUTO_NAME();