summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: be0cd09)
raw | patch | inline | side by side (parent: be0cd09)
author | Paul Mackerras <paulus@samba.org> | |
Thu, 30 Mar 2006 23:45:14 +0000 (10:45 +1100) | ||
committer | Paul Mackerras <paulus@samba.org> | |
Thu, 30 Mar 2006 23:45:14 +0000 (10:45 +1100) |
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>
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>
gitk | patch | blob | history |
index e8e0c731f6fb5776431fdb85b2b0f5a0891ccd9f..fa1e83c494ea6da8ba397d7c0314abd250ef3487 100755 (executable)
--- a/gitk
+++ b/gitk
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
$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}]
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}]]
}
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] \