Skip to content

Commit

Permalink
Compress the graph horizontally if it gets too wide.
Browse files Browse the repository at this point in the history
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.)
  • Loading branch information
Paul Mackerras committed Aug 4, 2005
1 parent 1115fb3 commit 8d858d1
Showing 1 changed file with 81 additions and 28 deletions.
109 changes: 81 additions & 28 deletions gitk
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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]"
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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 \
Expand Down Expand Up @@ -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}]
}
Expand Down Expand Up @@ -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
Expand All @@ -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
}
}
Expand Down Expand Up @@ -891,28 +893,54 @@ proc notecrossings {id lo hi corner} {
}
}

proc drawslants {} {
global canv mainline sidelines canvx0 canvy linespc
global oldlevel oldtodo todo currentparents dupparents
global lthickness linespc canvy colormap
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 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
set i -1
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} {
Expand All @@ -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 $y2
lappend coords $xj $yb
if {$yb < $y2} {
lappend coords $xj $y2
}
lappend sidelines($p) [list $coords 1]
}
}
}
} elseif {[lindex $todo $i] != $id} {
set j [lsearch -exact $todo $id]
set xj [expr {$canvx0 + $j * $linespc}]
lappend mainline($id) $xi $y1 $xj $y2
} else {
set j $i
if {[lindex $todo $i] != $id} {
set j [lsearch -exact $todo $id]
}
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
Expand Down Expand Up @@ -1036,7 +1084,7 @@ proc drawcommit {id} {
return
}
while 1 {
drawslants
drawslants $level
drawcommitline $level
if {[updatetodo $level $datemode]} {
set level [decidenext 1]
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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 {} {
Expand Down Expand Up @@ -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}

Expand Down

0 comments on commit 8d858d1

Please sign in to comment.