Compress the graph horizontally if it gets too wide.
If the graph gets to use more than a certain percentage (default 50%) of the width of the top-left pane, we now reduce the amount of space allowed for each graph line. This means it doesn't look quite as nice but you can still see the headline for the commit. (Currently the only way to customize the percentage is to edit your ~/.gitk file manually.)
This commit is contained in:
parent
1115fb38df
commit
8d858d1a3a
103
gitk
103
gitk
@ -480,7 +480,7 @@ proc click {w} {
|
||||
|
||||
proc savestuff {w} {
|
||||
global canv canv2 canv3 ctext cflist mainfont textfont
|
||||
global stuffsaved findmergefiles gaudydiff
|
||||
global stuffsaved findmergefiles gaudydiff maxgraphpct
|
||||
|
||||
if {$stuffsaved} return
|
||||
if {![winfo viewable .]} return
|
||||
@ -490,6 +490,7 @@ proc savestuff {w} {
|
||||
puts $f [list set textfont $textfont]
|
||||
puts $f [list set findmergefiles $findmergefiles]
|
||||
puts $f [list set gaudydiff $gaudydiff]
|
||||
puts $f [list set maxgraphpct $maxgraphpct]
|
||||
puts $f "set geometry(width) [winfo width .ctop]"
|
||||
puts $f "set geometry(height) [winfo height .ctop]"
|
||||
puts $f "set geometry(canv1) [expr [winfo width $canv]-2]"
|
||||
@ -694,7 +695,7 @@ proc bindline {t id} {
|
||||
|
||||
proc drawcommitline {level} {
|
||||
global parents children nparents nchildren todo
|
||||
global canv canv2 canv3 mainfont namefont canvx0 canvy linespc
|
||||
global canv canv2 canv3 mainfont namefont canvy linespc
|
||||
global lineid linehtag linentag linedtag commitinfo
|
||||
global colormap numcommits currentparents dupparents
|
||||
global oldlevel oldnlines oldtodo
|
||||
@ -728,7 +729,7 @@ proc drawcommitline {level} {
|
||||
}
|
||||
}
|
||||
}
|
||||
set x [expr $canvx0 + $level * $linespc]
|
||||
set x [xcoord $level $level $lineno]
|
||||
set y1 $canvy
|
||||
set canvy [expr $canvy + $linespc]
|
||||
allcanvs conf -scrollregion \
|
||||
@ -756,7 +757,7 @@ proc drawcommitline {level} {
|
||||
-fill $ofill -outline black -width 1]
|
||||
$canv raise $t
|
||||
$canv bind $t <1> {selcanvline {} %x %y}
|
||||
set xt [expr $canvx0 + [llength $todo] * $linespc]
|
||||
set xt [xcoord [llength $todo] $level $lineno]
|
||||
if {[llength $currentparents] > 2} {
|
||||
set xt [expr {$xt + ([llength $currentparents] - 2) * $linespc}]
|
||||
}
|
||||
@ -832,8 +833,8 @@ proc drawtags {id x xt y1} {
|
||||
proc updatetodo {level noshortcut} {
|
||||
global currentparents ncleft todo
|
||||
global mainline oldlevel oldtodo oldnlines
|
||||
global canvx0 canvy linespc mainline
|
||||
global commitinfo
|
||||
global canvy linespc mainline
|
||||
global commitinfo lineno xspc1
|
||||
|
||||
set oldlevel $level
|
||||
set oldtodo $todo
|
||||
@ -842,10 +843,11 @@ proc updatetodo {level noshortcut} {
|
||||
set p [lindex $currentparents 0]
|
||||
if {$ncleft($p) == 1 && [lsearch -exact $todo $p] < 0} {
|
||||
set ncleft($p) 0
|
||||
set x [expr $canvx0 + $level * $linespc]
|
||||
set x [xcoord $level $level $lineno]
|
||||
set y [expr $canvy - $linespc]
|
||||
set mainline($p) [list $x $y]
|
||||
set todo [lreplace $todo $level $level $p]
|
||||
set xspc1([expr {$lineno + 1}]) $xspc1($lineno)
|
||||
return 0
|
||||
}
|
||||
}
|
||||
@ -891,10 +893,36 @@ proc notecrossings {id lo hi corner} {
|
||||
}
|
||||
}
|
||||
|
||||
proc drawslants {} {
|
||||
global canv mainline sidelines canvx0 canvy linespc
|
||||
proc xcoord {i level ln} {
|
||||
global canvx0 xspc1 xspc2
|
||||
|
||||
set x [expr {$canvx0 + $i * $xspc1($ln)}]
|
||||
if {$i > 0 && $i == $level} {
|
||||
set x [expr {$x + 0.5 * ($xspc2 - $xspc1($ln))}]
|
||||
} elseif {$i > $level} {
|
||||
set x [expr {$x + $xspc2 - $xspc1($ln)}]
|
||||
}
|
||||
return $x
|
||||
}
|
||||
|
||||
proc drawslants {level} {
|
||||
global canv mainline sidelines canvx0 canvy xspc1 xspc2 lthickness
|
||||
global oldlevel oldtodo todo currentparents dupparents
|
||||
global lthickness linespc canvy colormap
|
||||
global lthickness linespc canvy colormap lineno geometry
|
||||
global maxgraphpct
|
||||
|
||||
# decide on the line spacing for the next line
|
||||
set lj [expr {$lineno + 1}]
|
||||
set maxw [expr {$maxgraphpct * $geometry(canv1) / 100}]
|
||||
set n [llength $todo]
|
||||
if {$n <= 1 || $canvx0 + $n * $xspc2 <= $maxw} {
|
||||
set xspc1($lj) $xspc2
|
||||
} else {
|
||||
set xspc1($lj) [expr {($maxw - $canvx0 - $xspc2) / ($n - 1)}]
|
||||
if {$xspc1($lj) < $lthickness} {
|
||||
set xspc1($lj) $lthickness
|
||||
}
|
||||
}
|
||||
|
||||
set y1 [expr $canvy - $linespc]
|
||||
set y2 $canvy
|
||||
@ -902,17 +930,17 @@ proc drawslants {} {
|
||||
foreach id $oldtodo {
|
||||
incr i
|
||||
if {$id == {}} continue
|
||||
set xi [expr {$canvx0 + $i * $linespc}]
|
||||
set xi [xcoord $i $oldlevel $lineno]
|
||||
if {$i == $oldlevel} {
|
||||
foreach p $currentparents {
|
||||
set j [lsearch -exact $todo $p]
|
||||
set coords [list $xi $y1]
|
||||
set xj [expr {$canvx0 + $j * $linespc}]
|
||||
if {$j < $i - 1} {
|
||||
lappend coords [expr $xj + $linespc] $y1
|
||||
set xj [xcoord $j $level $lj]
|
||||
if {$xj < $xi - $linespc} {
|
||||
lappend coords [expr {$xj + $linespc}] $y1
|
||||
notecrossings $p $j $i [expr {$j + 1}]
|
||||
} elseif {$j > $i + 1} {
|
||||
lappend coords [expr $xj - $linespc] $y1
|
||||
} elseif {$xj > $xi + $linespc} {
|
||||
lappend coords [expr {$xj - $linespc}] $y1
|
||||
notecrossings $p $i $j [expr {$j - 1}]
|
||||
}
|
||||
if {[lsearch -exact $dupparents $p] >= 0} {
|
||||
@ -924,28 +952,48 @@ proc drawslants {} {
|
||||
}
|
||||
} else {
|
||||
# normal case, no parent duplicated
|
||||
set yb $y2
|
||||
set dx [expr {abs($xi - $xj)}]
|
||||
if {0 && $dx < $linespc} {
|
||||
set yb [expr {$y1 + $dx}]
|
||||
}
|
||||
if {![info exists mainline($p)]} {
|
||||
if {$i != $j} {
|
||||
lappend coords $xj $y2
|
||||
if {$xi != $xj} {
|
||||
lappend coords $xj $yb
|
||||
}
|
||||
set mainline($p) $coords
|
||||
} else {
|
||||
lappend coords $xj $yb
|
||||
if {$yb < $y2} {
|
||||
lappend coords $xj $y2
|
||||
}
|
||||
lappend sidelines($p) [list $coords 1]
|
||||
}
|
||||
}
|
||||
}
|
||||
} elseif {[lindex $todo $i] != $id} {
|
||||
} else {
|
||||
set j $i
|
||||
if {[lindex $todo $i] != $id} {
|
||||
set j [lsearch -exact $todo $id]
|
||||
set xj [expr {$canvx0 + $j * $linespc}]
|
||||
lappend mainline($id) $xi $y1 $xj $y2
|
||||
}
|
||||
if {$j != $i || $xspc1($lineno) != $xspc1($lj)
|
||||
|| ($oldlevel <= $i && $i <= $level)
|
||||
|| ($level <= $i && $i <= $oldlevel)} {
|
||||
set xj [xcoord $j $level $lj]
|
||||
set dx [expr {abs($xi - $xj)}]
|
||||
set yb $y2
|
||||
if {0 && $dx < $linespc} {
|
||||
set yb [expr {$y1 + $dx}]
|
||||
}
|
||||
lappend mainline($id) $xi $y1 $xj $yb
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
proc decidenext {{noread 0}} {
|
||||
global parents children nchildren ncleft todo
|
||||
global canv canv2 canv3 mainfont namefont canvx0 canvy linespc
|
||||
global canv canv2 canv3 mainfont namefont canvy linespc
|
||||
global datemode cdate
|
||||
global commitinfo
|
||||
global currentparents oldlevel oldnlines oldtodo
|
||||
@ -1036,7 +1084,7 @@ proc drawcommit {id} {
|
||||
return
|
||||
}
|
||||
while 1 {
|
||||
drawslants
|
||||
drawslants $level
|
||||
drawcommitline $level
|
||||
if {[updatetodo $level $datemode]} {
|
||||
set level [decidenext 1]
|
||||
@ -1065,8 +1113,8 @@ proc finishcommits {} {
|
||||
-font $mainfont -tags textitems
|
||||
set phase {}
|
||||
} else {
|
||||
drawslants
|
||||
set level [decidenext]
|
||||
drawslants $level
|
||||
drawrest $level [llength $startcommits]
|
||||
}
|
||||
. config -cursor $maincursor
|
||||
@ -1114,7 +1162,7 @@ proc drawrest {level startix} {
|
||||
if {$hard} {
|
||||
set level [decidenext]
|
||||
if {$level < 0} break
|
||||
drawslants
|
||||
drawslants $level
|
||||
}
|
||||
if {[clock clicks -milliseconds] >= $nextupdate} {
|
||||
update
|
||||
@ -2451,10 +2499,14 @@ proc listboxsel {} {
|
||||
|
||||
proc setcoords {} {
|
||||
global linespc charspc canvx0 canvy0 mainfont
|
||||
global xspc1 xspc2
|
||||
|
||||
set linespc [font metrics $mainfont -linespace]
|
||||
set charspc [font measure $mainfont "m"]
|
||||
set canvy0 [expr 3 + 0.5 * $linespc]
|
||||
set canvx0 [expr 3 + 0.5 * $linespc]
|
||||
set xspc1(0) $linespc
|
||||
set xspc2 $linespc
|
||||
}
|
||||
|
||||
proc redisplay {} {
|
||||
@ -2941,6 +2993,7 @@ set mainfont {Helvetica 9}
|
||||
set textfont {Courier 9}
|
||||
set findmergefiles 0
|
||||
set gaudydiff 0
|
||||
set maxgraphpct 50
|
||||
|
||||
set colors {green red blue magenta darkgrey brown orange}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user