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 <mhag...@alum.mit.edu>
---
 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

Reply via email to