summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Mackerras <paulus@samba.org>2006-03-30 23:45:14 (GMT)
committerPaul Mackerras <paulus@samba.org>2006-03-30 23:45:14 (GMT)
commit879e8b1aad021cade0a254db0a5b67f56d99902a (patch)
tree10baa203bbc62355604e007ca5aa2cbcc39c013d
parentbe0cd0981f1811b9e5177f1f5c8ff900c33fbdbb (diff)
downloadgit-879e8b1aad021cade0a254db0a5b67f56d99902a.zip
git-879e8b1aad021cade0a254db0a5b67f56d99902a.tar.gz
git-879e8b1aad021cade0a254db0a5b67f56d99902a.tar.bz2
gitk: Better workaround for arrows on diagonal line segments
Instead of adding extra padding to create a vertical line segment at the lower end of a line that has an arrow, this now just draws a very short vertical line segment at the lower end. This alternative workaround for the Tk8.4 behaviour (not drawing arrows on diagonal line segments) doesn't have the problem of making the graph very wide when people do a lot of merges in a row (hi Junio :). Signed-off-by: Paul Mackerras <paulus@samba.org>
-rwxr-xr-xgitk37
1 files changed, 21 insertions, 16 deletions
diff --git a/gitk b/gitk
index e8e0c73..fa1e83c 100755
--- a/gitk
+++ b/gitk
@@ -1113,17 +1113,6 @@ proc optimize_rows {row col endrow} {
set idlist [lindex $rowidlist $row]
set offs [lindex $rowoffsets $row]
set haspad 0
- set downarrowcols {}
- if {[info exists linesegends($row)]} {
- set downarrowcols $linesegends($row)
- if {$col > 0} {
- while {$downarrowcols ne {}} {
- set i [lsearch -exact $idlist [lindex $downarrowcols 0]]
- if {$i < 0 || $i >= $col} break
- set downarrowcols [lrange $downarrowcols 1 end]
- }
- }
- }
for {} {$col < [llength $offs]} {incr col} {
if {[lindex $idlist $col] eq {}} {
set haspad 1
@@ -1141,10 +1130,6 @@ proc optimize_rows {row col endrow} {
$y0 > [lindex $idrowranges($id) 0]} {
set isarrow 1
}
- } elseif {$downarrowcols ne {} &&
- [lindex $idlist $col] eq [lindex $downarrowcols 0]} {
- set downarrowcols [lrange $downarrowcols 1 end]
- set isarrow 1
}
if {$z < -1 || ($z < 0 && $isarrow)} {
set npad [expr {-1 - $z + $isarrow}]
@@ -1258,7 +1243,7 @@ proc linewidth {id} {
proc drawlineseg {id i} {
global rowoffsets rowidlist idrowranges
global displayorder
- global canv colormap
+ global canv colormap linespc
set startrow [lindex $idrowranges($id) [expr {2 * $i}]]
set row [lindex $idrowranges($id) [expr {2 * $i + 1}]]
@@ -1306,6 +1291,26 @@ proc drawlineseg {id i} {
}
if {[llength $coords] < 4} return
set last [expr {[llength $idrowranges($id)] / 2 - 1}]
+ if {$i < $last} {
+ # This line has an arrow at the lower end: check if the arrow is
+ # on a diagonal segment, and if so, work around the Tk 8.4
+ # refusal to draw arrows on diagonal lines.
+ set x0 [lindex $coords 0]
+ set x1 [lindex $coords 2]
+ if {$x0 != $x1} {
+ set y0 [lindex $coords 1]
+ set y1 [lindex $coords 3]
+ if {$y0 - $y1 <= 2 * $linespc && $x1 == [lindex $coords 4]} {
+ # we have a nearby vertical segment, just trim off the diag bit
+ set coords [lrange $coords 2 end]
+ } else {
+ set slope [expr {($x0 - $x1) / ($y0 - $y1)}]
+ set xi [expr {$x0 - $slope * $linespc / 2}]
+ set yi [expr {$y0 - $linespc / 2}]
+ set coords [lreplace $coords 0 1 $xi $y0 $xi $yi]
+ }
+ }
+ }
set arrow [expr {2 * ($i > 0) + ($i < $last)}]
set arrow [lindex {none first last both} $arrow]
set t [$canv create line $coords -width [linewidth $id] \