@@ -140,35 +140,37 @@ def parseCommits(self, commit, i, prevCircle, toFadeOut):
140140            isNewCommit  =  commit .hexsha  not  in   self .drawnCommits 
141141
142142            if  ( not  self .args .reverse  ):
143-                 if  ( not  offset  and  isNewCommit  ):
144-                     arrow  =  Arrow (start = RIGHT , end = LEFT , color = self .fontColor ).next_to (circle , LEFT , buff = 0 )
145-                     length  =  1 
146-                 elif  ( offset  and  isNewCommit  ):
147-                     arrow  =  Arrow (end = prevCircle .get_center (), start = circle .get_center (), color = self .fontColor )
148-                     length  =  numpy .linalg .norm (circle .get_center ()- prevCircle .get_center ())- 3 
149-                 elif  ( offset  and  not  isNewCommit  ):
150-                     arrow  =  Arrow (end = prevCircle .get_center (), start = self .drawnCommits [commit .hexsha ].get_center (), color = self .fontColor )
151-                     length  =  numpy .linalg .norm (self .drawnCommits [commit .hexsha ].get_center ()- prevCircle .get_center ())- 3 
152-                 elif  ( not  offset  and  not  isNewCommit  ):
153-                     arrow  =  Arrow (end = prevCircle .get_center (), start = self .drawnCommits [commit .hexsha ].get_center (), color = self .fontColor )
154-                     length  =  numpy .linalg .norm (self .drawnCommits [commit .hexsha ].get_center ()- prevCircle .get_center ())- 3 
143+                 if  ( isNewCommit  ):
144+                     start  =  circle .get_center ()
145+                     end  =  prevCircle .get_center () if  prevCircle  else  LEFT 
146+                 else :
147+                     start  =  self .drawnCommits [commit .hexsha ].get_center ()
148+                     end  =  prevCircle .get_center ()
155149
156150            else :
157-                 if  ( not  offset  and  isNewCommit  ):
158-                     arrow  =  Arrow (start = LEFT , end = RIGHT , color = self .fontColor ).next_to (circle , LEFT , buff = 0 )
159-                     length  =  1 
160-                 elif  ( offset  and  isNewCommit  ):
161-                     arrow  =  Arrow (start = prevCircle .get_center (), end = circle .get_center (), color = self .fontColor )
162-                     length  =  numpy .linalg .norm (prevCircle .get_center ()- circle .get_center ())- 3 
163-                 elif  ( offset  and  not  isNewCommit  ):
164-                     arrow  =  Arrow (start = prevCircle .get_center (), end = self .drawnCommits [commit .hexsha ].get_center (), color = self .fontColor )
165-                     length  =  numpy .linalg .norm (prevCircle .get_center ()- self .drawnCommits [commit .hexsha ].get_center ())- 3 
166-                 elif  ( not  offset  and  not  isNewCommit  ):
167-                     arrow  =  Arrow (start = prevCircle .get_center (), end = self .drawnCommits [commit .hexsha ].get_center (), color = self .fontColor )
168-                     length  =  numpy .linalg .norm (prevCircle .get_center ()- self .drawnCommits [commit .hexsha ].get_center ())- 3 
169- 
151+                 if  ( isNewCommit  ):
152+                     start  =  prevCircle .get_center () if  prevCircle  else  LEFT 
153+                     end  =  circle .get_center ()
154+                 else :
155+                     start  =  prevCircle .get_center ()
156+                     end  =  self .drawnCommits [commit .hexsha ].get_center ()
157+ 
158+             arrow  =  Arrow (start , end , color = self .fontColor )
159+             length  =  numpy .linalg .norm (start - end ) -  ( 1.5  if  start [1 ] ==  end [1 ] else  3   )
170160            arrow .set_length (length )
171161
162+             angle  =  arrow .get_angle ()
163+             lineRect  =  Rectangle (height = 0.1 , width = length , color = "#123456" ).move_to (arrow .get_center ()).rotate (angle )
164+ 
165+             for  commitCircle  in  self .drawnCommits .values ():
166+                 inter  =  Intersection (lineRect , commitCircle )
167+                 if  ( inter .has_points () ):
168+                     arrow  =  CurvedArrow (start , end )
169+                     if  ( start [1 ] ==  end [1 ]  ):
170+                         arrow .shift (UP * 1.25 )
171+                     if  ( start [0 ] <  end [0 ] and  start [1 ] ==  end [1 ] ):
172+                         arrow .flip (RIGHT ).shift (UP )
173+                 
172174            commitId  =  Text (commit .hexsha [0 :6 ], font = "Monospace" , font_size = 20 , color = self .fontColor ).next_to (circle , UP )
173175
174176            commitMessage  =  commit .message [:40 ].replace ("\n " , " " )
0 commit comments