Skip to content

Commit

Permalink
gitk: Improve appearance of first child links
Browse files Browse the repository at this point in the history
The point where the line for a parent joins to the first child
shown is visually different from the lines to the other children,
because the line doesn't branch, but terminates at the child.
Because of this, we now treat the first child a little differently
in the optimizer, and we draw its link in drawlineseg rather
than drawparentlinks.  This improves the appearance of the graph.

Signed-off-by: Paul Mackerras <paulus@samba.org>
  • Loading branch information
Paul Mackerras committed Mar 18, 2006
1 parent d8d2df0 commit eb447a1
Showing 1 changed file with 53 additions and 6 deletions.
59 changes: 53 additions & 6 deletions gitk
Original file line number Diff line number Diff line change
Expand Up @@ -1148,18 +1148,42 @@ proc optimize_rows {row col endrow} {
set z [lindex $offs $col]
set haspad 1
}
if {$z0 eq {} && !$isarrow} {
# this line links to its first child on row $row-2
set rm2 [expr {$row - 2}]
set id [lindex $displayorder $rm2]
set xc [lsearch -exact [lindex $rowidlist $rm2] $id]
if {$xc >= 0} {
set z0 [expr {$xc - $x0}]
}
}
if {$z0 ne {} && $z < 0 && $z0 > 0} {
insert_pad $y0 $x0 1
set offs [incrange $offs $col 1]
optimize_rows $y0 [expr {$x0 + 1}] $row
}
}
if {!$haspad} {
set o {}
for {set col [llength $idlist]} {[incr col -1] >= 0} {} {
set o [lindex $offs $col]
if {$o eq {}} {
# check if this is the link to the first child
set id [lindex $idlist $col]
if {[info exists idrowranges($id)] &&
$row == [lindex $idrowranges($id) 0]} {
# it is, work out offset to child
set y0 [expr {$row - 1}]
set id [lindex $displayorder $y0]
set x0 [lsearch -exact [lindex $rowidlist $y0] $id]
if {$x0 >= 0} {
set o [expr {$x0 - $col}]
}
}
}
if {$o eq {} || $o <= 0} break
}
if {[incr col] < [llength $idlist]} {
if {$o ne {} && [incr col] < [llength $idlist]} {
set y1 [expr {$row + 1}]
set offs2 [lindex $rowoffsets $y1]
set x1 -1
Expand Down Expand Up @@ -1203,6 +1227,7 @@ proc linewidth {id} {

proc drawlineseg {id i} {
global rowoffsets rowidlist idrowranges
global displayorder
global canv colormap

set startrow [lindex $idrowranges($id) [expr {2 * $i}]]
Expand Down Expand Up @@ -1230,21 +1255,37 @@ proc drawlineseg {id i} {
incr col $o
incr row -1
}
if {$coords eq {}} return
set last [expr {[llength $idrowranges($id)] / 2 - 1}]
set arrow [expr {2 * ($i > 0) + ($i < $last)}]
set arrow [lindex {none first last both} $arrow]
set x [xc $row $col]
set y [yc $row]
lappend coords $x $y
if {$i == 0} {
# draw the link to the first child as part of this line
incr row -1
set child [lindex $displayorder $row]
set ccol [lsearch -exact [lindex $rowidlist $row] $child]
if {$ccol >= 0} {
set x [xc $row $ccol]
set y [yc $row]
if {$ccol < $col - 1} {
lappend coords [xc $row [expr {$col - 1}]] $yc
} elseif {$ccol > $col + 1} {
lappend coords [xc $row [expr {$col + 1}]] $yc
}
lappend coords $x $y
}
}
if {[llength $coords] < 4} return
set last [expr {[llength $idrowranges($id)] / 2 - 1}]
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] \
-fill $colormap($id) -tags lines.$id -arrow $arrow]
$canv lower $t
bindline $t $id
}

proc drawparentlinks {id row col olds} {
global rowidlist canv colormap
global rowidlist canv colormap idrowranges

set row2 [expr {$row + 1}]
set x [xc $row $col]
Expand All @@ -1254,6 +1295,12 @@ proc drawparentlinks {id row col olds} {
# rmx = right-most X coord used
set rmx 0
foreach p $olds {
if {[info exists idrowranges($p)] &&
$row2 == [lindex $idrowranges($p) 0] &&
$row2 < [lindex $idrowranges($p) 1]} {
# drawlineseg will do this one for us
continue
}
set i [lsearch -exact $ids $p]
if {$i < 0} {
puts "oops, parent $p of $id not in list"
Expand Down

0 comments on commit eb447a1

Please sign in to comment.