gitk: Use named fonts instead of the font specification
[gitweb.git] / gitk
diff --git a/gitk b/gitk
index 35920abc7bd5f1680c7c102006e1f8e053c7f04a..c257bb57acb68b3a54806ded2c8a2202e6982991 100755 (executable)
--- a/gitk
+++ b/gitk
@@ -133,7 +133,7 @@ proc stop_rev_list {} {
 }
 
 proc getcommits {} {
-    global phase canv mainfont curview
+    global phase canv curview
 
     set phase getcommits
     initlayout
@@ -615,7 +615,7 @@ proc confirm_popup msg {
 
 proc makewindow {} {
     global canv canv2 canv3 linespc charspc ctext cflist
-    global textfont mainfont uifont tabstop
+    global tabstop
     global findtype findtypemenu findloc findstring fstring geometry
     global entries sha1entry sha1string sha1but
     global diffcontextstring diffcontext
@@ -630,19 +630,19 @@ proc makewindow {} {
 
     menu .bar
     .bar add cascade -label "File" -menu .bar.file
-    .bar configure -font $uifont
+    .bar configure -font uifont
     menu .bar.file
     .bar.file add command -label "Update" -command updatecommits
     .bar.file add command -label "Reread references" -command rereadrefs
     .bar.file add command -label "List references" -command showrefs
     .bar.file add command -label "Quit" -command doquit
-    .bar.file configure -font $uifont
+    .bar.file configure -font uifont
     menu .bar.edit
     .bar add cascade -label "Edit" -menu .bar.edit
     .bar.edit add command -label "Preferences" -command doprefs
-    .bar.edit configure -font $uifont
+    .bar.edit configure -font uifont
 
-    menu .bar.view -font $uifont
+    menu .bar.view -font uifont
     .bar add cascade -label "View" -menu .bar.view
     .bar.view add command -label "New view..." -command {newview 0}
     .bar.view add command -label "Edit view..." -command editview \
@@ -656,7 +656,7 @@ proc makewindow {} {
     .bar add cascade -label "Help" -menu .bar.help
     .bar.help add command -label "About gitk" -command about
     .bar.help add command -label "Key bindings" -command keys
-    .bar.help configure -font $uifont
+    .bar.help configure -font uifont
     . configure -menu .bar
 
     # the gui has upper and lower half, parts of a paned window.
@@ -713,10 +713,10 @@ proc makewindow {} {
     set entries $sha1entry
     set sha1but .tf.bar.sha1label
     button $sha1but -text "SHA1 ID: " -state disabled -relief flat \
-       -command gotocommit -width 8 -font $uifont
+       -command gotocommit -width 8 -font uifont
     $sha1but conf -disabledforeground [$sha1but cget -foreground]
     pack .tf.bar.sha1label -side left
-    entry $sha1entry -width 40 -font $textfont -textvariable sha1string
+    entry $sha1entry -width 40 -font textfont -textvariable sha1string
     trace add variable sha1string write sha1change
     pack $sha1entry -side left -pady 2
 
@@ -745,9 +745,9 @@ proc makewindow {} {
 
     # Status label and progress bar
     set statusw .tf.bar.status
-    label $statusw -width 15 -relief sunken -font $uifont
+    label $statusw -width 15 -relief sunken -font uifont
     pack $statusw -side left -padx 5
-    set h [expr {[font metrics $uifont -linespace] + 2}]
+    set h [expr {[font metrics uifont -linespace] + 2}]
     set progresscanv .tf.bar.progress
     canvas $progresscanv -relief sunken -height $h -borderwidth 2
     set progressitem [$progresscanv create rect -1 0 0 $h -fill green]
@@ -760,10 +760,10 @@ proc makewindow {} {
     set progupdatepending 0
 
     # build up the bottom bar of upper window
-    label .tf.lbar.flabel -text "Find " -font $uifont
-    button .tf.lbar.fnext -text "next" -command dofind -font $uifont
-    button .tf.lbar.fprev -text "prev" -command {dofind 1} -font $uifont
-    label .tf.lbar.flab2 -text " commit " -font $uifont
+    label .tf.lbar.flabel -text "Find " -font uifont
+    button .tf.lbar.fnext -text "next" -command dofind -font uifont
+    button .tf.lbar.fprev -text "prev" -command {dofind 1} -font uifont
+    label .tf.lbar.flab2 -text " commit " -font uifont
     pack .tf.lbar.flabel .tf.lbar.fnext .tf.lbar.fprev .tf.lbar.flab2 \
        -side left -fill y
     set gdttype "containing:"
@@ -772,27 +772,27 @@ proc makewindow {} {
                "touching paths:" \
                "adding/removing string:"]
     trace add variable gdttype write gdttype_change
-    $gm conf -font $uifont
-    .tf.lbar.gdttype conf -font $uifont
+    $gm conf -font uifont
+    .tf.lbar.gdttype conf -font uifont
     pack .tf.lbar.gdttype -side left -fill y
 
     set findstring {}
     set fstring .tf.lbar.findstring
     lappend entries $fstring
-    entry $fstring -width 30 -font $textfont -textvariable findstring
+    entry $fstring -width 30 -font textfont -textvariable findstring
     trace add variable findstring write find_change
     set findtype Exact
     set findtypemenu [tk_optionMenu .tf.lbar.findtype \
                      findtype Exact IgnCase Regexp]
     trace add variable findtype write findcom_change
-    .tf.lbar.findtype configure -font $uifont
-    .tf.lbar.findtype.menu configure -font $uifont
+    .tf.lbar.findtype configure -font uifont
+    .tf.lbar.findtype.menu configure -font uifont
     set findloc "All fields"
     tk_optionMenu .tf.lbar.findloc findloc "All fields" Headline \
        Comments Author Committer
     trace add variable findloc write find_change
-    .tf.lbar.findloc configure -font $uifont
-    .tf.lbar.findloc.menu configure -font $uifont
+    .tf.lbar.findloc configure -font uifont
+    .tf.lbar.findloc.menu configure -font uifont
     pack .tf.lbar.findloc -side right
     pack .tf.lbar.findtype -side right
     pack $fstring -side left -expand 1 -fill x
@@ -820,10 +820,10 @@ proc makewindow {} {
     frame .bleft.mid
 
     button .bleft.top.search -text "Search" -command dosearch \
-       -font $uifont
+       -font uifont
     pack .bleft.top.search -side left -padx 5
     set sstring .bleft.top.sstring
-    entry $sstring -width 20 -font $textfont -textvariable searchstring
+    entry $sstring -width 20 -font textfont -textvariable searchstring
     lappend entries $sstring
     trace add variable searchstring write incrsearch
     pack $sstring -side left -expand 1 -fill x
@@ -834,9 +834,9 @@ proc makewindow {} {
     radiobutton .bleft.mid.new -text "New version" \
        -command changediffdisp -variable diffelide -value {1 0}
     label .bleft.mid.labeldiffcontext -text "      Lines of context: " \
-       -font $uifont
+       -font uifont
     pack .bleft.mid.diff .bleft.mid.old .bleft.mid.new -side left
-    spinbox .bleft.mid.diffcontext -width 5 -font $textfont \
+    spinbox .bleft.mid.diffcontext -width 5 -font textfont \
        -from 1 -increment 1 -to 10000000 \
        -validate all -validatecommand "diffcontextvalidate %P" \
        -textvariable diffcontextstring
@@ -846,7 +846,7 @@ proc makewindow {} {
     pack .bleft.mid.labeldiffcontext .bleft.mid.diffcontext -side left
     set ctext .bleft.ctext
     text $ctext -background $bgcolor -foreground $fgcolor \
-       -state disabled -font $textfont \
+       -state disabled -font textfont \
        -yscrollcommand scrolltext -wrap none
     if {$have_tk85} {
        $ctext conf -tabstyle wordprocessor
@@ -860,7 +860,7 @@ proc makewindow {} {
     lappend fglist $ctext
 
     $ctext tag conf comment -wrap $wrapcomment
-    $ctext tag conf filesep -font [concat $textfont bold] -back "#aaaaaa"
+    $ctext tag conf filesep -font textfontbold -back "#aaaaaa"
     $ctext tag conf hunksep -fore [lindex $diffcolors 2]
     $ctext tag conf d0 -fore [lindex $diffcolors 0]
     $ctext tag conf d1 -fore [lindex $diffcolors 1]
@@ -882,8 +882,8 @@ proc makewindow {} {
     $ctext tag conf m15 -fore "#ff70b0"
     $ctext tag conf mmax -fore darkgrey
     set mergemax 16
-    $ctext tag conf mresult -font [concat $textfont bold]
-    $ctext tag conf msep -font [concat $textfont bold]
+    $ctext tag conf mresult -font textfontbold
+    $ctext tag conf msep -font textfontbold
     $ctext tag conf found -back yellow
 
     .pwbottom add .bleft
@@ -894,18 +894,18 @@ proc makewindow {} {
     frame .bright.mode
     radiobutton .bright.mode.patch -text "Patch" \
        -command reselectline -variable cmitmode -value "patch"
-    .bright.mode.patch configure -font $uifont
+    .bright.mode.patch configure -font uifont
     radiobutton .bright.mode.tree -text "Tree" \
        -command reselectline -variable cmitmode -value "tree"
-    .bright.mode.tree configure -font $uifont
+    .bright.mode.tree configure -font uifont
     grid .bright.mode.patch .bright.mode.tree -sticky ew
     pack .bright.mode -side top -fill x
     set cflist .bright.cfiles
-    set indent [font measure $mainfont "nn"]
+    set indent [font measure mainfont "nn"]
     text $cflist \
        -selectbackground $selectbgcolor \
        -background $bgcolor -foreground $fgcolor \
-       -font $mainfont \
+       -font mainfont \
        -tabs [list $indent [expr {2 * $indent}]] \
        -yscrollcommand ".bright.sb set" \
        -cursor [. cget -cursor] \
@@ -917,7 +917,7 @@ proc makewindow {} {
     pack $cflist -side left -fill both -expand 1
     $cflist tag configure highlight \
        -background [$cflist cget -selectbackground]
-    $cflist tag configure bold -font [concat $mainfont bold]
+    $cflist tag configure bold -font mainfontbold
 
     .pwbottom add .bright
     .ctop add .pwbottom
@@ -1272,10 +1272,10 @@ Copyright 
 Use and redistribute under the terms of the GNU General Public License} \
            -justify center -aspect 400 -border 2 -bg white -relief groove
     pack $w.m -side top -fill x -padx 2 -pady 2
-    $w.m configure -font $uifont
+    $w.m configure -font uifont
     button $w.ok -text Close -command "destroy $w" -default active
     pack $w.ok -side bottom
-    $w.ok configure -font $uifont
+    $w.ok configure -font uifont
     bind $w <Visibility> "focus $w.ok"
     bind $w <Key-Escape> "destroy $w"
     bind $w <Key-Return> "destroy $w"
@@ -1336,10 +1336,10 @@ f               Scroll diff view to next file
 " \
            -justify left -bg white -border 2 -relief groove
     pack $w.m -side top -fill both -padx 2 -pady 2
-    $w.m configure -font $uifont
+    $w.m configure -font uifont
     button $w.ok -text Close -command "destroy $w" -default active
     pack $w.ok -side bottom
-    $w.ok configure -font $uifont
+    $w.ok configure -font uifont
     bind $w <Visibility> "focus $w.ok"
     bind $w <Key-Escape> "destroy $w"
     bind $w <Key-Return> "destroy $w"
@@ -1871,22 +1871,22 @@ proc vieweditor {top n title} {
 
     toplevel $top
     wm title $top $title
-    label $top.nl -text "Name" -font $uifont
-    entry $top.name -width 20 -textvariable newviewname($n) -font $uifont
+    label $top.nl -text "Name" -font uifont
+    entry $top.name -width 20 -textvariable newviewname($n) -font uifont
     grid $top.nl $top.name -sticky w -pady 5
     checkbutton $top.perm -text "Remember this view" -variable newviewperm($n) \
-       -font $uifont
+       -font uifont
     grid $top.perm - -pady 5 -sticky w
-    message $top.al -aspect 1000 -font $uifont \
+    message $top.al -aspect 1000 -font uifont \
        -text "Commits to include (arguments to git rev-list):"
     grid $top.al - -sticky w -pady 5
     entry $top.args -width 50 -textvariable newviewargs($n) \
-       -background white -font $uifont
+       -background white -font uifont
     grid $top.args - -sticky ew -padx 5
-    message $top.l -aspect 1000 -font $uifont \
+    message $top.l -aspect 1000 -font uifont \
        -text "Enter files and directories to include, one per line:"
     grid $top.l - -sticky w
-    text $top.t -width 40 -height 10 -background white -font $uifont
+    text $top.t -width 40 -height 10 -background white -font uifont
     if {[info exists viewfiles($n)]} {
        foreach f $viewfiles($n) {
            $top.t insert end $f
@@ -1898,9 +1898,9 @@ proc vieweditor {top n title} {
     grid $top.t - -sticky ew -padx 5
     frame $top.buts
     button $top.buts.ok -text "OK" -command [list newviewok $top $n] \
-       -font $uifont
+       -font uifont
     button $top.buts.can -text "Cancel" -command [list destroy $top] \
-       -font $uifont
+       -font uifont
     grid $top.buts.ok $top.buts.can
     grid columnconfigure $top.buts 0 -weight 1 -uniform a
     grid columnconfigure $top.buts 1 -weight 1 -uniform a
@@ -2191,12 +2191,12 @@ proc bolden_name {row font} {
 }
 
 proc unbolden {} {
-    global mainfont boldrows
+    global boldrows
 
     set stillbold {}
     foreach row $boldrows {
        if {![ishighlighted $row]} {
-           bolden $row $mainfont
+           bolden $row mainfont
        } else {
            lappend stillbold $row
        }
@@ -2235,9 +2235,8 @@ proc delvhighlight {} {
 
 proc vhighlightmore {} {
     global hlview vhl_done commitidx vhighlights
-    global displayorder vdisporder curview mainfont
+    global displayorder vdisporder curview
 
-    set font [concat $mainfont bold]
     set max $commitidx($hlview)
     if {$hlview == $curview} {
        set disp $displayorder
@@ -2253,7 +2252,7 @@ proc vhighlightmore {} {
            set row $commitrow($curview,$id)
            if {$r0 <= $row && $row <= $r1} {
                if {![highlighted $row]} {
-                   bolden $row $font
+                   bolden $row mainfontbold
                }
                set vhighlights($row) 1
            }
@@ -2263,11 +2262,11 @@ proc vhighlightmore {} {
 }
 
 proc askvhighlight {row id} {
-    global hlview vhighlights commitrow iddrawn mainfont
+    global hlview vhighlights commitrow iddrawn
 
     if {[info exists commitrow($hlview,$id)]} {
        if {[info exists iddrawn($id)] && ![ishighlighted $row]} {
-           bolden $row [concat $mainfont bold]
+           bolden $row mainfontbold
        }
        set vhighlights($row) 1
     } else {
@@ -2277,7 +2276,7 @@ proc askvhighlight {row id} {
 
 proc hfiles_change {} {
     global highlight_files filehighlight fhighlights fh_serial
-    global mainfont highlight_paths gdttype
+    global highlight_paths gdttype
 
     if {[info exists filehighlight]} {
        # delete previous highlights
@@ -2335,13 +2334,13 @@ proc find_change {name ix op} {
 }
 
 proc findcom_change args {
-    global nhighlights mainfont boldnamerows
+    global nhighlights boldnamerows
     global findpattern findtype findstring gdttype
 
     stopfinding
     # delete previous highlights, if any
     foreach row $boldnamerows {
-       bolden_name $row $mainfont
+       bolden_name $row mainfont
     }
     set boldnamerows {}
     catch {unset nhighlights}
@@ -2414,7 +2413,7 @@ proc askfilehighlight {row id} {
 }
 
 proc readfhighlight {} {
-    global filehighlight fhighlights commitrow curview mainfont iddrawn
+    global filehighlight fhighlights commitrow curview iddrawn
     global fhl_list find_dirn
 
     if {![info exists filehighlight]} {
@@ -2436,7 +2435,7 @@ proc readfhighlight {} {
        if {![info exists commitrow($curview,$line)]} continue
        set row $commitrow($curview,$line)
        if {[info exists iddrawn($line)] && ![ishighlighted $row]} {
-           bolden $row [concat $mainfont bold]
+           bolden $row mainfontbold
        }
        set fhighlights($row) 1
     }
@@ -2470,7 +2469,7 @@ proc doesmatch {f} {
 }
 
 proc askfindhighlight {row id} {
-    global nhighlights commitinfo iddrawn mainfont
+    global nhighlights commitinfo iddrawn
     global findloc
     global markingmatches
 
@@ -2491,11 +2490,10 @@ proc askfindhighlight {row id} {
        }
     }
     if {$isbold && [info exists iddrawn($id)]} {
-       set f [concat $mainfont bold]
        if {![ishighlighted $row]} {
-           bolden $row $f
+           bolden $row mainfontbold
            if {$isbold > 1} {
-               bolden_name $row $f
+               bolden_name $row mainfontbold
            }
        }
        if {$markingmatches} {
@@ -2624,7 +2622,7 @@ proc is_ancestor {a} {
 }
 
 proc askrelhighlight {row id} {
-    global descendent highlight_related iddrawn mainfont rhighlights
+    global descendent highlight_related iddrawn rhighlights
     global selectedline ancestor
 
     if {![info exists selectedline]} return
@@ -2648,7 +2646,7 @@ proc askrelhighlight {row id} {
     }
     if {[info exists iddrawn($id)]} {
        if {$isbold && ![ishighlighted $row]} {
-           bolden $row [concat $mainfont bold]
+           bolden $row mainfontbold
        }
     }
     set rhighlights($row) $isbold
@@ -3624,7 +3622,7 @@ proc drawcmittext {id row col} {
     global commitlisted commitinfo rowidlist parentlist
     global rowtextx idpos idtags idheads idotherrefs
     global linehtag linentag linedtag selectedline
-    global mainfont canvxmax boldrows boldnamerows fgcolor nullid nullid2
+    global canvxmax boldrows boldnamerows fgcolor nullid nullid2
 
     # listed is 0 for boundary, 1 for normal, 2 for left, 3 for right
     set listed [lindex $commitlisted $row]
@@ -3681,15 +3679,15 @@ proc drawcmittext {id row col} {
     set name [lindex $commitinfo($id) 1]
     set date [lindex $commitinfo($id) 2]
     set date [formatdate $date]
-    set font $mainfont
-    set nfont $mainfont
+    set font mainfont
+    set nfont mainfont
     set isbold [ishighlighted $row]
     if {$isbold > 0} {
        lappend boldrows $row
-       lappend font bold
+       set font mainfontbold
        if {$isbold > 1} {
            lappend boldnamerows $row
-           lappend nfont bold
+           set nfont mainfontbold
        }
     }
     set linehtag($row) [$canv create text $xt $y -anchor w -fill $fgcolor \
@@ -3698,11 +3696,11 @@ proc drawcmittext {id row col} {
     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]
+                           -text $date -font mainfont -tags text]
     if {[info exists selectedline] && $selectedline == $row} {
        make_secsel $row
     }
-    set xr [expr {$xt + [font measure $mainfont $headline]}]
+    set xr [expr {$xt + [font measure $font $headline]}]
     if {$xr > $canvxmax} {
        set canvxmax $xr
        setcanvscroll
@@ -3985,7 +3983,7 @@ proc bindline {t id} {
 proc drawtags {id x xt y1} {
     global idtags idheads idotherrefs mainhead
     global linespc lthickness
-    global canv mainfont commitrow rowtextx curview fgcolor bgcolor
+    global canv commitrow rowtextx curview fgcolor bgcolor
 
     set marks {}
     set ntags 0
@@ -4014,9 +4012,9 @@ proc drawtags {id x xt y1} {
     foreach tag $marks {
        incr i
        if {$i >= $ntags && $i < $ntags + $nheads && $tag eq $mainhead} {
-           set wid [font measure [concat $mainfont bold] $tag]
+           set wid [font measure mainfontbold $tag]
        } else {
-           set wid [font measure $mainfont $tag]
+           set wid [font measure mainfont $tag]
        }
        lappend xvals $xt
        lappend wvals $wid
@@ -4028,7 +4026,7 @@ proc drawtags {id x xt y1} {
     foreach tag $marks x $xvals wid $wvals {
        set xl [expr {$x + $delta}]
        set xr [expr {$x + $delta + $wid + $lthickness}]
-       set font $mainfont
+       set font mainfont
        if {[incr ntags -1] >= 0} {
            # draw a tag
            set t [$canv create polygon $x [expr {$yt + $delta}] $xl $yt \
@@ -4041,7 +4039,7 @@ proc drawtags {id x xt y1} {
            if {[incr nheads -1] >= 0} {
                set col green
                if {$tag eq $mainhead} {
-                   lappend font bold
+                   set font mainfontbold
                }
            } else {
                set col "#ddddff"
@@ -4050,7 +4048,7 @@ proc drawtags {id x xt y1} {
            $canv create polygon $x $yt $xr $yt $xr $yb $x $yb \
                -width 1 -outline black -fill $col -tags tag.$id
            if {[regexp {^(remotes/.*/|remotes/)} $tag match remoteprefix]} {
-               set rwid [font measure $mainfont $remoteprefix]
+               set rwid [font measure mainfont $remoteprefix]
                set xi [expr {$x + 1}]
                set yti [expr {$yt + 1}]
                set xri [expr {$x + $rwid}]
@@ -4082,10 +4080,10 @@ proc xcoord {i level ln} {
 }
 
 proc show_status {msg} {
-    global canv mainfont fgcolor
+    global canv fgcolor
 
     clear_display
-    $canv create text 3 3 -anchor nw -text $msg -font $mainfont \
+    $canv create text 3 3 -anchor nw -text $msg -font mainfont \
        -tags text -fill $fgcolor
 }
 
@@ -5522,12 +5520,12 @@ proc clear_ctext {{first 1.0}} {
 }
 
 proc settabs {{firstab {}}} {
-    global firsttabstop tabstop textfont ctext have_tk85
+    global firsttabstop tabstop ctext have_tk85
 
     if {$firstab ne {} && $have_tk85} {
        set firsttabstop $firstab
     }
-    set w [font measure $textfont "0"]
+    set w [font measure textfont "0"]
     if {$firsttabstop != 0} {
        $ctext conf -tabs [list [expr {($firsttabstop + $tabstop) * $w}] \
                               [expr {($firsttabstop + 2 * $tabstop) * $w}]]
@@ -5658,11 +5656,11 @@ proc scrolltext {f0 f1} {
 }
 
 proc setcoords {} {
-    global linespc charspc canvx0 canvy0 mainfont
+    global linespc charspc canvx0 canvy0
     global xspc1 xspc2 lthickness
 
-    set linespc [font metrics $mainfont -linespace]
-    set charspc [font measure $mainfont "m"]
+    set linespc [font metrics mainfont -linespace]
+    set charspc [font measure mainfont "m"]
     set canvy0 [expr {int(3 + 0.5 * $linespc)}]
     set canvx0 [expr {int(3 + 0.5 * $linespc)}]
     set lthickness [expr {int($linespc / 9) + 1}]
@@ -5687,25 +5685,45 @@ proc redisplay {} {
     }
 }
 
+proc fontdescr {f} {
+    set d [list [font actual $f -family] [font actual $f -size]]
+    if {[font actual $f -weight] eq "bold"} {
+       lappend d "bold"
+    }
+    if {[font actual $f -slant] eq "italic"} {
+       lappend d "italic"
+    }
+    if {[font actual $f -underline]} {
+       lappend d "underline"
+    }
+    if {[font actual $f -overstrike]} {
+       lappend d "overstrike"
+    }
+    return $d
+}
+
 proc incrfont {inc} {
     global mainfont textfont ctext canv phase cflist showrefstop
     global stopped entries
     unmarkmatches
-    set mainfont [lreplace $mainfont 1 1 [expr {[lindex $mainfont 1] + $inc}]]
-    set textfont [lreplace $textfont 1 1 [expr {[lindex $textfont 1] + $inc}]]
+    set s [font actual mainfont -size]
+    incr s $inc
+    if {$s < 1} {
+       set s 1
+    }
+    font config mainfont -size $s
+    font config mainfontbold -size $s
+    set mainfont [fontdescr mainfont]
+    set s [font actual textfont -size]
+    incr s $inc
+    if {$s < 1} {
+       set s 1
+    }
+    font config textfont -size $s
+    font config textfontbold -size $s
+    set textfont [fontdescr textfont]
     setcoords
     settabs
-    $cflist conf -font $textfont
-    $ctext tag conf filesep -font [concat $textfont bold]
-    foreach e $entries {
-       $e conf -font $mainfont
-    }
-    if {$phase eq "getcommits"} {
-       $canv itemconf textitems -font $mainfont
-    }
-    if {[info exists showrefstop] && [winfo exists $showrefstop]} {
-       $showrefstop.list conf -font $mainfont
-    }
     redisplay
 }
 
@@ -5816,7 +5834,7 @@ proc lineleave {id} {
 proc linehover {} {
     global hoverx hovery hoverid hovertimer
     global canv linespc lthickness
-    global commitinfo mainfont
+    global commitinfo
 
     set text [lindex $commitinfo($hoverid) 0]
     set ymax [lindex [$canv cget -scrollregion] 3]
@@ -5826,13 +5844,13 @@ proc linehover {} {
     set y [expr {$hovery + $yfrac * $ymax - $linespc / 2}]
     set x0 [expr {$x - 2 * $lthickness}]
     set y0 [expr {$y - 2 * $lthickness}]
-    set x1 [expr {$x + [font measure $mainfont $text] + 2 * $lthickness}]
+    set x1 [expr {$x + [font measure mainfont $text] + 2 * $lthickness}]
     set y1 [expr {$y + $linespc + 2 * $lthickness}]
     set t [$canv create rectangle $x0 $y0 $x1 $y1 \
               -fill \#ffff80 -outline black -width 1 -tags hover]
     $canv raise $t
     set t [$canv create text $x $y -anchor nw -text $text -tags hover \
-              -font $mainfont]
+              -font mainfont]
     $canv raise $t
 }
 
@@ -6168,7 +6186,7 @@ proc domktag {} {
 
 proc redrawtags {id} {
     global canv linehtag commitrow idpos selectedline curview
-    global mainfont canvxmax iddrawn
+    global canvxmax iddrawn
 
     if {![info exists commitrow($curview,$id)]} return
     if {![info exists iddrawn($id)]} return
@@ -6177,7 +6195,7 @@ proc redrawtags {id} {
     set xt [eval drawtags $id $idpos($id)]
     $canv coords $linehtag($commitrow($curview,$id)) $xt [lindex $idpos($id) 2]
     set text [$canv itemcget $linehtag($commitrow($curview,$id)) -text]
-    set xr [expr {$xt + [font measure $mainfont $text]}]
+    set xr [expr {$xt + [font measure mainfont $text]}]
     if {$xr > $canvxmax} {
        set canvxmax $xr
        setcanvscroll
@@ -6509,8 +6527,8 @@ proc rmbranch {} {
 
 # Display a list of tags and heads
 proc showrefs {} {
-    global showrefstop bgcolor fgcolor selectbgcolor mainfont
-    global bglist fglist uifont reflistfilter reflist maincursor
+    global showrefstop bgcolor fgcolor selectbgcolor
+    global bglist fglist reflistfilter reflist maincursor
 
     set top .showrefs
     set showrefstop $top
@@ -6522,7 +6540,7 @@ proc showrefs {} {
     toplevel $top
     wm title $top "Tags and heads: [file tail [pwd]]"
     text $top.list -background $bgcolor -foreground $fgcolor \
-       -selectbackground $selectbgcolor -font $mainfont \
+       -selectbackground $selectbgcolor -font mainfont \
        -xscrollcommand "$top.xsb set" -yscrollcommand "$top.ysb set" \
        -width 30 -height 20 -cursor $maincursor \
        -spacing1 1 -spacing3 1 -state disabled
@@ -6534,15 +6552,15 @@ proc showrefs {} {
     grid $top.list $top.ysb -sticky nsew
     grid $top.xsb x -sticky ew
     frame $top.f
-    label $top.f.l -text "Filter: " -font $uifont
-    entry $top.f.e -width 20 -textvariable reflistfilter -font $uifont
+    label $top.f.l -text "Filter: " -font uifont
+    entry $top.f.e -width 20 -textvariable reflistfilter -font uifont
     set reflistfilter "*"
     trace add variable reflistfilter write reflistfilter_change
     pack $top.f.e -side right -fill x -expand 1
     pack $top.f.l -side left
     grid $top.f - -sticky ew -pady 2
     button $top.close -command [list destroy $top] -text "Close" \
-       -font $uifont
+       -font uifont
     grid $top.close -
     grid columnconfigure $top 0 -weight 1
     grid rowconfigure $top 0 -weight 1
@@ -7845,7 +7863,7 @@ proc doprefs {} {
     toplevel $top
     wm title $top "Gitk preferences"
     label $top.ldisp -text "Commit list display options"
-    $top.ldisp configure -font $uifont
+    $top.ldisp configure -font uifont
     grid $top.ldisp - -sticky w -pady 10
     label $top.spacer -text " "
     label $top.maxwidthl -text "Maximum graph width (lines)" \
@@ -7863,7 +7881,7 @@ proc doprefs {} {
     grid x $top.showlocal -sticky w
 
     label $top.ddisp -text "Diff display options"
-    $top.ddisp configure -font $uifont
+    $top.ddisp configure -font uifont
     grid $top.ddisp - -sticky w -pady 10
     label $top.diffoptl -text "Options for diff program" \
        -font optionfont
@@ -7879,7 +7897,7 @@ proc doprefs {} {
     grid x $top.tabstopl $top.tabstop -sticky w
 
     label $top.cdisp -text "Colors: press to choose"
-    $top.cdisp configure -font $uifont
+    $top.cdisp configure -font uifont
     grid $top.cdisp - -sticky w -pady 10
     label $top.bg -padx 40 -relief sunk -background $bgcolor
     button $top.bgbut -text "Background" -font optionfont \
@@ -7912,9 +7930,9 @@ proc doprefs {} {
 
     frame $top.buts
     button $top.buts.ok -text "OK" -command prefsok -default active
-    $top.buts.ok configure -font $uifont
+    $top.buts.ok configure -font uifont
     button $top.buts.can -text "Cancel" -command prefscan -default normal
-    $top.buts.can configure -font $uifont
+    $top.buts.can configure -font uifont
     grid $top.buts.ok $top.buts.can
     grid columnconfigure $top.buts 0 -weight 1 -uniform a
     grid columnconfigure $top.buts 1 -weight 1 -uniform a
@@ -8322,6 +8340,15 @@ set selectbgcolor gray85
 catch {source ~/.gitk}
 
 font create optionfont -family sans-serif -size -12
+font create mainfont
+catch {eval font config mainfont [font actual $mainfont]}
+eval font create mainfontbold [font actual mainfont] -weight bold
+font create textfont
+catch {eval font config textfont [font actual $textfont]}
+eval font create textfontbold [font actual textfont]
+font config textfontbold -weight bold
+font create uifont
+catch {eval font config uifont [font actual $uifont]}
 
 # check that we can find a .git directory somewhere...
 if {[catch {set gitdir [gitdir]}]} {