The resulting code is easier to follow than the old counting-based code, plus in a moment we will add some more specific types. Signed-off-by: Michael Haggerty <mhagger@xxxxxxxxxxxx> --- gitk | 37 +++++++++++++++++++++---------------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/gitk b/gitk index 296efb3..7c830c3 100755 --- a/gitk +++ b/gitk @@ -6560,8 +6560,7 @@ proc drawtags {id x xt y1} { global reflinecolor set marks {} - set ntags 0 - set nheads 0 + set types {} set singletag 0 set maxtags 3 set maxtagpct 25 @@ -6576,22 +6575,30 @@ proc drawtags {id x xt y1} { [totalwidth $tags mainfont $extra] > $maxwidth} { # show just a single "n tags..." tag set singletag 1 + lappend types tag if {$ntags == 1} { lappend marks "tag..." } else { lappend marks [format "%d tags..." $ntags] - set ntags 1 } } else { - set marks [concat $marks $tags] + foreach tag $tags { + lappend types tag + lappend marks $tag + } } } if {[info exists idheads($id)]} { - set marks [concat $marks $idheads($id)] - set nheads [llength $idheads($id)] + foreach head $idheads($id) { + lappend types head + lappend marks $head + } } if {[info exists idotherrefs($id)]} { - set marks [concat $marks $idotherrefs($id)] + foreach other $idotherrefs($id) { + lappend types other + lappend marks $other + } } if {$marks eq {}} { return $xt @@ -6601,10 +6608,8 @@ proc drawtags {id x xt y1} { set yb [expr {$yt + $linespc - 1}] set xvals {} set wvals {} - set i -1 - foreach tag $marks { - incr i - if {$i >= $ntags && $i < $ntags + $nheads && $tag eq $mainhead} { + foreach tag $marks type $types { + if {$type eq "head" && $tag eq $mainhead} { set wid [font measure mainfontbold $tag] } else { set wid [font measure mainfont $tag] @@ -6616,12 +6621,12 @@ proc drawtags {id x xt y1} { set t [$canv create line $x $y1 [lindex $xvals end] $y1 \ -width $lthickness -fill $reflinecolor -tags tag.$id] $canv lower $t - foreach tag $marks x $xvals wid $wvals { + foreach tag $marks type $types x $xvals wid $wvals { set tag_quoted [string map {% %%} $tag] set xl [expr {$x + $delta}] set xr [expr {$x + $delta + $wid + $lthickness}] set font mainfont - if {[incr ntags -1] >= 0} { + if {$type eq "tag"} { # draw a tag set t [$canv create polygon $x [expr {$yt + $delta}] $xl $yt \ $xr $yt $xr $yb $xl $yb $x [expr {$yb - $delta}] \ @@ -6636,7 +6641,7 @@ proc drawtags {id x xt y1} { set rowtextx([rowofcommit $id]) [expr {$xr + $linespc}] } else { # draw a head or other ref - if {[incr nheads -1] >= 0} { + if {$type eq "head"} { set col $headbgcolor if {$tag eq $mainhead} { set font mainfontbold @@ -6658,9 +6663,9 @@ proc drawtags {id x xt y1} { } set t [$canv create text $xl $y1 -anchor w -text $tag -fill $headfgcolor \ -font $font -tags [list tag.$id text]] - if {$ntags >= 0} { + if {$type eq "tag"} { $canv bind $t <1> $tagclick - } elseif {$nheads >= 0} { + } elseif {$type eq "head"} { $canv bind $t $ctxbut [list headmenu %X %Y $id $tag_quoted] } } -- 2.9.3