Draw selected graph line thicker and make arrowheads active.

This commit is contained in:
Paul Mackerras 2005-08-30 10:57:11 +10:00
parent 106288cb02
commit 9843c3074d

147
gitk
View File

@ -775,6 +775,32 @@ proc bindline {t id} {
$canv bind $t <Button-1> "lineclick %x %y $id 1"
}
proc drawlines {id xtra} {
global mainline mainlinearrow sidelines lthickness colormap canv
$canv delete lines.$id
if {[info exists mainline($id)]} {
set t [$canv create line $mainline($id) \
-width [expr {($xtra + 1) * $lthickness}] \
-fill $colormap($id) -tags lines.$id \
-arrow $mainlinearrow($id)]
$canv lower $t
bindline $t $id
}
if {[info exists sidelines($id)]} {
foreach ls $sidelines($id) {
set coords [lindex $ls 0]
set thick [lindex $ls 1]
set arrow [lindex $ls 2]
set t [$canv create line $coords -fill $colormap($id) \
-width [expr {($thick + $xtra) * $lthickness}] \
-arrow $arrow -tags lines.$id]
$canv lower $t
bindline $t $id
}
}
}
# level here is an index in displist
proc drawcommitline {level} {
global parents children nparents displist
@ -823,23 +849,8 @@ proc drawcommitline {level} {
if {$mainlinearrow($id) ne "none"} {
set mainline($id) [trimdiagstart $mainline($id)]
}
set t [$canv create line $mainline($id) \
-width $lthickness -fill $colormap($id) \
-arrow $mainlinearrow($id)]
$canv lower $t
bindline $t $id
}
if {[info exists sidelines($id)]} {
foreach ls $sidelines($id) {
set coords [lindex $ls 0]
set thick [lindex $ls 1]
set arrow [lindex $ls 2]
set t [$canv create line $coords -fill $colormap($id) \
-width [expr {$thick * $lthickness}] -arrow $arrow]
$canv lower $t
bindline $t $id
}
}
drawlines $id 0
set orad [expr {$linespc / 3}]
set t [$canv create oval [expr $x - $orad] [expr $y1 - $orad] \
[expr $x + $orad - 1] [expr $y1 + $orad - 1] \
@ -2059,6 +2070,7 @@ proc selectline {l isnew} {
global commentend idtags idline linknum
$canv delete hover
normalline
if {![info exists lineid($l)] || ![info exists linehtag($l)]} return
$canv delete secsel
set t [eval $canv create rect [$canv bbox $linehtag($l)] -outline {{}} \
@ -3127,15 +3139,102 @@ proc linehover {} {
$canv raise $t
}
proc clickisonarrow {id y} {
global mainline mainlinearrow sidelines lthickness
set thresh [expr {2 * $lthickness + 6}]
if {[info exists mainline($id)]} {
if {$mainlinearrow($id) ne "none"} {
if {abs([lindex $mainline($id) 1] - $y) < $thresh} {
return "up"
}
}
}
if {[info exists sidelines($id)]} {
foreach ls $sidelines($id) {
set coords [lindex $ls 0]
set arrow [lindex $ls 2]
if {$arrow eq "first" || $arrow eq "both"} {
if {abs([lindex $coords 1] - $y) < $thresh} {
return "up"
}
}
if {$arrow eq "last" || $arrow eq "both"} {
if {abs([lindex $coords end] - $y) < $thresh} {
return "down"
}
}
}
}
return {}
}
proc arrowjump {id dirn y} {
global mainline sidelines canv
set yt {}
if {$dirn eq "down"} {
if {[info exists mainline($id)]} {
set y1 [lindex $mainline($id) 1]
if {$y1 > $y} {
set yt $y1
}
}
if {[info exists sidelines($id)]} {
foreach ls $sidelines($id) {
set y1 [lindex $ls 0 1]
if {$y1 > $y && ($yt eq {} || $y1 < $yt)} {
set yt $y1
}
}
}
} else {
if {[info exists sidelines($id)]} {
foreach ls $sidelines($id) {
set y1 [lindex $ls 0 end]
if {$y1 < $y && ($yt eq {} || $y1 > $yt)} {
set yt $y1
}
}
}
}
if {$yt eq {}} return
set ymax [lindex [$canv cget -scrollregion] 3]
if {$ymax eq {} || $ymax <= 0} return
set view [$canv yview]
set yspan [expr {[lindex $view 1] - [lindex $view 0]}]
set yfrac [expr {$yt / $ymax - $yspan / 2}]
if {$yfrac < 0} {
set yfrac 0
}
$canv yview moveto $yfrac
}
proc lineclick {x y id isnew} {
global ctext commitinfo children cflist canv
global ctext commitinfo children cflist canv thickerline
unmarkmatches
unselectline
if {$isnew} {
addtohistory [list lineclick $x $x $id 0]
}
normalline
$canv delete hover
# draw this line thicker than normal
drawlines $id 1
set thickerline $id
if {$isnew} {
set ymax [lindex [$canv cget -scrollregion] 3]
if {$ymax eq {}} return
set yfrac [lindex [$canv yview] 0]
set y [expr {$y + $yfrac * $ymax}]
}
set dirn [clickisonarrow $id $y]
if {$dirn ne {}} {
arrowjump $id $dirn $y
return
}
if {$isnew} {
addtohistory [list lineclick $x $y $id 0]
}
# fill the details pane with info about this line
$ctext conf -state normal
$ctext delete 0.0 end
@ -3168,6 +3267,14 @@ proc lineclick {x y id isnew} {
$cflist delete 0 end
}
proc normalline {} {
global thickerline
if {[info exists thickerline]} {
drawlines $thickerline 0
unset thickerline
}
}
proc selbyid {id} {
global idline
if {[info exists idline($id)]} {