Skip to content

Commit

Permalink
gitk: Index line[hnd]tag arrays by id rather than row number
Browse files Browse the repository at this point in the history
This simplifies things a bit and is better because ids are stable
but row numbers aren't.  It also means we can avoid one [rowofcommit]
call.

Signed-off-by: Paul Mackerras <paulus@samba.org>
  • Loading branch information
Paul Mackerras committed Nov 15, 2008
1 parent d98d50e commit 28593d3
Showing 1 changed file with 58 additions and 59 deletions.
117 changes: 58 additions & 59 deletions gitk
Original file line number Diff line number Diff line change
Expand Up @@ -4004,49 +4004,49 @@ proc ishighlighted {id} {
return 0
}

proc bolden {row font} {
global canv linehtag selectedline boldrows need_redisplay
proc bolden {id font} {
global canv linehtag currentid boldids need_redisplay

# need_redisplay = 1 means the display is stale and about to be redrawn
if {$need_redisplay} return
lappend boldrows $row
$canv itemconf $linehtag($row) -font $font
if {$row == $selectedline} {
lappend boldids $id
$canv itemconf $linehtag($id) -font $font
if {[info exists currentid] && $id eq $currentid} {
$canv delete secsel
set t [eval $canv create rect [$canv bbox $linehtag($row)] \
set t [eval $canv create rect [$canv bbox $linehtag($id)] \
-outline {{}} -tags secsel \
-fill [$canv cget -selectbackground]]
$canv lower $t
}
}

proc bolden_name {row font} {
global canv2 linentag selectedline boldnamerows need_redisplay
proc bolden_name {id font} {
global canv2 linentag currentid boldnameids need_redisplay

if {$need_redisplay} return
lappend boldnamerows $row
$canv2 itemconf $linentag($row) -font $font
if {$row == $selectedline} {
lappend boldnameids $id
$canv2 itemconf $linentag($id) -font $font
if {[info exists currentid] && $id eq $currentid} {
$canv2 delete secsel
set t [eval $canv2 create rect [$canv2 bbox $linentag($row)] \
set t [eval $canv2 create rect [$canv2 bbox $linentag($id)] \
-outline {{}} -tags secsel \
-fill [$canv2 cget -selectbackground]]
$canv2 lower $t
}
}

proc unbolden {} {
global boldrows
global boldids

set stillbold {}
foreach row $boldrows {
if {![ishighlighted [commitonrow $row]]} {
bolden $row mainfont
foreach id $boldids {
if {![ishighlighted $id]} {
bolden $id mainfont
} else {
lappend stillbold $row
lappend stillbold $id
}
}
set boldrows $stillbold
set boldids $stillbold
}

proc addvhighlight {n} {
Expand Down Expand Up @@ -4087,7 +4087,7 @@ proc vhighlightmore {} {
set row [rowofcommit $id]
if {$r0 <= $row && $row <= $r1} {
if {![highlighted $row]} {
bolden $row mainfontbold
bolden $id mainfontbold
}
set vhighlights($id) 1
}
Expand All @@ -4102,7 +4102,7 @@ proc askvhighlight {row id} {

if {[commitinview $id $hlview]} {
if {[info exists iddrawn($id)] && ![ishighlighted $id]} {
bolden $row mainfontbold
bolden $id mainfontbold
}
set vhighlights($id) 1
} else {
Expand Down Expand Up @@ -4170,15 +4170,15 @@ proc find_change {name ix op} {
}

proc findcom_change args {
global nhighlights boldnamerows
global nhighlights boldnameids
global findpattern findtype findstring gdttype

stopfinding
# delete previous highlights, if any
foreach row $boldnamerows {
bolden_name $row mainfont
foreach id $boldnameids {
bolden_name $id mainfont
}
set boldnamerows {}
set boldnameids {}
catch {unset nhighlights}
unbolden
unmarkmatches
Expand Down Expand Up @@ -4267,9 +4267,8 @@ proc readfhighlight {} {
set fhl_list [lrange $fhl_list [expr {$i+1}] end]
if {$line eq {}} continue
if {![commitinview $line $curview]} continue
set row [rowofcommit $line]
if {[info exists iddrawn($line)] && ![ishighlighted $line]} {
bolden $row mainfontbold
bolden $line mainfontbold
}
set fhighlights($line) 1
}
Expand Down Expand Up @@ -4321,9 +4320,9 @@ proc askfindhighlight {row id} {
}
if {$isbold && [info exists iddrawn($id)]} {
if {![ishighlighted $id]} {
bolden $row mainfontbold
bolden $id mainfontbold
if {$isbold > 1} {
bolden_name $row mainfontbold
bolden_name $id mainfontbold
}
}
if {$markingmatches} {
Expand All @@ -4343,15 +4342,15 @@ proc markrowmatches {row id} {
if {$findloc eq [mc "All fields"] || $findloc eq [mc "Headline"]} {
set m [findmatches $headline]
if {$m ne {}} {
markmatches $canv $row $headline $linehtag($row) $m \
[$canv itemcget $linehtag($row) -font] $row
markmatches $canv $row $headline $linehtag($id) $m \
[$canv itemcget $linehtag($id) -font] $row
}
}
if {$findloc eq [mc "All fields"] || $findloc eq [mc "Author"]} {
set m [findmatches $author]
if {$m ne {}} {
markmatches $canv2 $row $author $linentag($row) $m \
[$canv2 itemcget $linentag($row) -font] $row
markmatches $canv2 $row $author $linentag($id) $m \
[$canv2 itemcget $linentag($id) -font] $row
}
}
}
Expand Down Expand Up @@ -4476,7 +4475,7 @@ proc askrelhighlight {row id} {
}
if {[info exists iddrawn($id)]} {
if {$isbold && ![ishighlighted $id]} {
bolden $row mainfontbold
bolden $id mainfontbold
}
}
set rhighlights($id) $isbold
Expand Down Expand Up @@ -5469,7 +5468,7 @@ proc drawcmittext {id row col} {
global cmitlisted commitinfo rowidlist parentlist
global rowtextx idpos idtags idheads idotherrefs
global linehtag linentag linedtag selectedline
global canvxmax boldrows boldnamerows fgcolor
global canvxmax boldids boldnameids fgcolor
global mainheadid nullid nullid2 circleitem circlecolors ctxbut

# listed is 0 for boundary, 1 for normal, 2 for negative, 3 for left, 4 for right
Expand Down Expand Up @@ -5534,22 +5533,22 @@ proc drawcmittext {id row col} {
set nfont mainfont
set isbold [ishighlighted $id]
if {$isbold > 0} {
lappend boldrows $row
lappend boldids $id
set font mainfontbold
if {$isbold > 1} {
lappend boldnamerows $row
lappend boldnameids $id
set nfont mainfontbold
}
}
set linehtag($row) [$canv create text $xt $y -anchor w -fill $fgcolor \
-text $headline -font $font -tags text]
$canv bind $linehtag($row) $ctxbut "rowmenu %X %Y $id"
set linentag($row) [$canv2 create text 3 $y -anchor w -fill $fgcolor \
-text $name -font $nfont -tags text]
set linedtag($row) [$canv3 create text 3 $y -anchor w -fill $fgcolor \
-text $date -font mainfont -tags text]
set linehtag($id) [$canv create text $xt $y -anchor w -fill $fgcolor \
-text $headline -font $font -tags text]
$canv bind $linehtag($id) $ctxbut "rowmenu %X %Y $id"
set linentag($id) [$canv2 create text 3 $y -anchor w -fill $fgcolor \
-text $name -font $nfont -tags text]
set linedtag($id) [$canv3 create text 3 $y -anchor w -fill $fgcolor \
-text $date -font mainfont -tags text]
if {$selectedline == $row} {
make_secsel $row
make_secsel $id
}
set xr [expr {$xt + [font measure $font $headline]}]
if {$xr > $canvxmax} {
Expand Down Expand Up @@ -5757,16 +5756,16 @@ proc drawvisible {} {
proc clear_display {} {
global iddrawn linesegs need_redisplay nrows_drawn
global vhighlights fhighlights nhighlights rhighlights
global linehtag linentag linedtag boldrows boldnamerows
global linehtag linentag linedtag boldids boldnameids

allcanvs delete all
catch {unset iddrawn}
catch {unset linesegs}
catch {unset linehtag}
catch {unset linentag}
catch {unset linedtag}
set boldrows {}
set boldnamerows {}
set boldids {}
set boldnameids {}
catch {unset vhighlights}
catch {unset fhighlights}
catch {unset nhighlights}
Expand Down Expand Up @@ -6474,20 +6473,20 @@ proc dispnexttag {} {
}
}

proc make_secsel {l} {
proc make_secsel {id} {
global linehtag linentag linedtag canv canv2 canv3

if {![info exists linehtag($l)]} return
if {![info exists linehtag($id)]} return
$canv delete secsel
set t [eval $canv create rect [$canv bbox $linehtag($l)] -outline {{}} \
set t [eval $canv create rect [$canv bbox $linehtag($id)] -outline {{}} \
-tags secsel -fill [$canv cget -selectbackground]]
$canv lower $t
$canv2 delete secsel
set t [eval $canv2 create rect [$canv2 bbox $linentag($l)] -outline {{}} \
set t [eval $canv2 create rect [$canv2 bbox $linentag($id)] -outline {{}} \
-tags secsel -fill [$canv2 cget -selectbackground]]
$canv2 lower $t
$canv3 delete secsel
set t [eval $canv3 create rect [$canv3 bbox $linedtag($l)] -outline {{}} \
set t [eval $canv3 create rect [$canv3 bbox $linedtag($id)] -outline {{}} \
-tags secsel -fill [$canv3 cget -selectbackground]]
$canv3 lower $t
}
Expand Down Expand Up @@ -6553,7 +6552,7 @@ proc selectline {l isnew {desired_loc {}}} {
drawvisible
}

make_secsel $l
make_secsel $id

if {$isnew} {
addtohistory [list selbyid $id]
Expand Down Expand Up @@ -8109,16 +8108,16 @@ proc redrawtags {id} {
$canv itemconf $circleitem($row) -fill $ofill
$canv delete tag.$id
set xt [eval drawtags $id $idpos($id)]
$canv coords $linehtag($row) $xt [lindex $idpos($id) 2]
set text [$canv itemcget $linehtag($row) -text]
set font [$canv itemcget $linehtag($row) -font]
$canv coords $linehtag($id) $xt [lindex $idpos($id) 2]
set text [$canv itemcget $linehtag($id) -text]
set font [$canv itemcget $linehtag($id) -font]
set xr [expr {$xt + [font measure $font $text]}]
if {$xr > $canvxmax} {
set canvxmax $xr
setcanvscroll
}
if {[info exists currentid] && $currentid == $id} {
make_secsel $row
make_secsel $id
}
}

Expand Down Expand Up @@ -10766,8 +10765,8 @@ set nhl_names {}
set highlight_paths {}
set findpattern {}
set searchdirn -forwards
set boldrows {}
set boldnamerows {}
set boldids {}
set boldnameids {}
set diffelide {0 0}
set markingmatches 0
set linkentercount 0
Expand Down

0 comments on commit 28593d3

Please sign in to comment.