Skip to content

Commit

Permalink
gitk: Better workaround for arrows on diagonal line segments
Browse files Browse the repository at this point in the history
Instead of adding extra padding to create a vertical line segment at
the lower end of a line that has an arrow, this now just draws a very
short vertical line segment at the lower end.  This alternative
workaround for the Tk8.4 behaviour (not drawing arrows on diagonal
line segments) doesn't have the problem of making the graph very wide
when people do a lot of merges in a row (hi Junio :).

Signed-off-by: Paul Mackerras <paulus@samba.org>
  • Loading branch information
Paul Mackerras committed Mar 30, 2006
1 parent be0cd09 commit 879e8b1
Showing 1 changed file with 21 additions and 16 deletions.
37 changes: 21 additions & 16 deletions gitk
Original file line number Diff line number Diff line change
Expand Up @@ -1113,17 +1113,6 @@ proc optimize_rows {row col endrow} {
set idlist [lindex $rowidlist $row]
set offs [lindex $rowoffsets $row]
set haspad 0
set downarrowcols {}
if {[info exists linesegends($row)]} {
set downarrowcols $linesegends($row)
if {$col > 0} {
while {$downarrowcols ne {}} {
set i [lsearch -exact $idlist [lindex $downarrowcols 0]]
if {$i < 0 || $i >= $col} break
set downarrowcols [lrange $downarrowcols 1 end]
}
}
}
for {} {$col < [llength $offs]} {incr col} {
if {[lindex $idlist $col] eq {}} {
set haspad 1
Expand All @@ -1141,10 +1130,6 @@ proc optimize_rows {row col endrow} {
$y0 > [lindex $idrowranges($id) 0]} {
set isarrow 1
}
} elseif {$downarrowcols ne {} &&
[lindex $idlist $col] eq [lindex $downarrowcols 0]} {
set downarrowcols [lrange $downarrowcols 1 end]
set isarrow 1
}
if {$z < -1 || ($z < 0 && $isarrow)} {
set npad [expr {-1 - $z + $isarrow}]
Expand Down Expand Up @@ -1258,7 +1243,7 @@ proc linewidth {id} {
proc drawlineseg {id i} {
global rowoffsets rowidlist idrowranges
global displayorder
global canv colormap
global canv colormap linespc

set startrow [lindex $idrowranges($id) [expr {2 * $i}]]
set row [lindex $idrowranges($id) [expr {2 * $i + 1}]]
Expand Down Expand Up @@ -1306,6 +1291,26 @@ proc drawlineseg {id i} {
}
if {[llength $coords] < 4} return
set last [expr {[llength $idrowranges($id)] / 2 - 1}]
if {$i < $last} {
# This line has an arrow at the lower end: check if the arrow is
# on a diagonal segment, and if so, work around the Tk 8.4
# refusal to draw arrows on diagonal lines.
set x0 [lindex $coords 0]
set x1 [lindex $coords 2]
if {$x0 != $x1} {
set y0 [lindex $coords 1]
set y1 [lindex $coords 3]
if {$y0 - $y1 <= 2 * $linespc && $x1 == [lindex $coords 4]} {
# we have a nearby vertical segment, just trim off the diag bit
set coords [lrange $coords 2 end]
} else {
set slope [expr {($x0 - $x1) / ($y0 - $y1)}]
set xi [expr {$x0 - $slope * $linespc / 2}]
set yi [expr {$y0 - $linespc / 2}]
set coords [lreplace $coords 0 1 $xi $y0 $xi $yi]
}
}
}
set arrow [expr {2 * ($i > 0) + ($i < $last)}]
set arrow [lindex {none first last both} $arrow]
set t [$canv create line $coords -width [linewidth $id] \
Expand Down

0 comments on commit 879e8b1

Please sign in to comment.