mirror of
https://github.com/git/git.git
synced 2024-11-18 17:03:56 +01:00
c382fdd795
In several places, only the background colour is set to an explicit value, sometimes even "white". This does not work well with dark colour themes. This patch tries to set the foreground colour to "black" in those situations, where an explicit background colour is set without defining any foreground colour. Signed-off-by: Philipp A. Hartmann <ph@sorgh.de> Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
169 lines
4.0 KiB
Tcl
169 lines
4.0 KiB
Tcl
# git-gui font chooser
|
|
# Copyright (C) 2007 Shawn Pearce
|
|
|
|
class choose_font {
|
|
|
|
field w
|
|
field w_family ; # UI widget of all known family names
|
|
field w_example ; # Example to showcase the chosen font
|
|
|
|
field f_family ; # Currently chosen family name
|
|
field f_size ; # Currently chosen point size
|
|
|
|
field v_family ; # Name of global variable for family
|
|
field v_size ; # Name of global variable for size
|
|
|
|
variable all_families [list] ; # All fonts known to Tk
|
|
|
|
constructor pick {path title a_family a_size} {
|
|
variable all_families
|
|
|
|
set v_family $a_family
|
|
set v_size $a_size
|
|
|
|
upvar #0 $v_family pv_family
|
|
upvar #0 $v_size pv_size
|
|
|
|
set f_family $pv_family
|
|
set f_size $pv_size
|
|
|
|
make_toplevel top w
|
|
wm title $top "[appname] ([reponame]): $title"
|
|
wm geometry $top "+[winfo rootx $path]+[winfo rooty $path]"
|
|
|
|
label $w.header -text $title -font font_uibold
|
|
pack $w.header -side top -fill x
|
|
|
|
frame $w.buttons
|
|
button $w.buttons.select \
|
|
-text [mc Select] \
|
|
-default active \
|
|
-command [cb _select]
|
|
button $w.buttons.cancel \
|
|
-text [mc Cancel] \
|
|
-command [list destroy $w]
|
|
pack $w.buttons.select -side right
|
|
pack $w.buttons.cancel -side right -padx 5
|
|
pack $w.buttons -side bottom -fill x -pady 10 -padx 10
|
|
|
|
frame $w.inner
|
|
|
|
frame $w.inner.family
|
|
label $w.inner.family.l \
|
|
-text [mc "Font Family"] \
|
|
-anchor w
|
|
set w_family $w.inner.family.v
|
|
text $w_family \
|
|
-background white \
|
|
-foreground black \
|
|
-borderwidth 1 \
|
|
-relief sunken \
|
|
-cursor $::cursor_ptr \
|
|
-wrap none \
|
|
-width 30 \
|
|
-height 10 \
|
|
-yscrollcommand [list $w.inner.family.sby set]
|
|
rmsel_tag $w_family
|
|
scrollbar $w.inner.family.sby -command [list $w_family yview]
|
|
pack $w.inner.family.l -side top -fill x
|
|
pack $w.inner.family.sby -side right -fill y
|
|
pack $w_family -fill both -expand 1
|
|
|
|
frame $w.inner.size
|
|
label $w.inner.size.l \
|
|
-text [mc "Font Size"] \
|
|
-anchor w
|
|
spinbox $w.inner.size.v \
|
|
-textvariable @f_size \
|
|
-from 2 -to 80 -increment 1 \
|
|
-width 3
|
|
bind $w.inner.size.v <FocusIn> {%W selection range 0 end}
|
|
pack $w.inner.size.l -fill x -side top
|
|
pack $w.inner.size.v -fill x -padx 2
|
|
|
|
grid configure $w.inner.family $w.inner.size -sticky nsew
|
|
grid rowconfigure $w.inner 0 -weight 1
|
|
grid columnconfigure $w.inner 0 -weight 1
|
|
pack $w.inner -fill both -expand 1 -padx 5 -pady 5
|
|
|
|
frame $w.example
|
|
label $w.example.l \
|
|
-text [mc "Font Example"] \
|
|
-anchor w
|
|
set w_example $w.example.t
|
|
text $w_example \
|
|
-background white \
|
|
-foreground black \
|
|
-borderwidth 1 \
|
|
-relief sunken \
|
|
-height 3 \
|
|
-width 40
|
|
rmsel_tag $w_example
|
|
$w_example tag conf example -justify center
|
|
$w_example insert end [mc "This is example text.\nIf you like this text, it can be your font."] example
|
|
$w_example conf -state disabled
|
|
pack $w.example.l -fill x
|
|
pack $w_example -fill x
|
|
pack $w.example -fill x -padx 5
|
|
|
|
if {$all_families eq {}} {
|
|
set all_families [lsort [font families]]
|
|
}
|
|
|
|
$w_family tag conf pick
|
|
$w_family tag bind pick <Button-1> [cb _pick_family %x %y]\;break
|
|
foreach f $all_families {
|
|
set sel [list pick]
|
|
if {$f eq $f_family} {
|
|
lappend sel in_sel
|
|
}
|
|
$w_family insert end "$f\n" $sel
|
|
}
|
|
$w_family conf -state disabled
|
|
_update $this
|
|
|
|
trace add variable @f_size write [cb _update]
|
|
bind $w <Key-Escape> [list destroy $w]
|
|
bind $w <Key-Return> [cb _select]\;break
|
|
bind $w <Visibility> "
|
|
grab $w
|
|
focus $w
|
|
"
|
|
tkwait window $w
|
|
}
|
|
|
|
method _select {} {
|
|
upvar #0 $v_family pv_family
|
|
upvar #0 $v_size pv_size
|
|
|
|
set pv_family $f_family
|
|
set pv_size $f_size
|
|
|
|
destroy $w
|
|
}
|
|
|
|
method _pick_family {x y} {
|
|
variable all_families
|
|
|
|
set i [lindex [split [$w_family index @$x,$y] .] 0]
|
|
set n [lindex $all_families [expr {$i - 1}]]
|
|
if {$n ne {}} {
|
|
$w_family tag remove in_sel 0.0 end
|
|
$w_family tag add in_sel $i.0 [expr {$i + 1}].0
|
|
set f_family $n
|
|
_update $this
|
|
}
|
|
}
|
|
|
|
method _update {args} {
|
|
variable all_families
|
|
|
|
set i [lsearch -exact $all_families $f_family]
|
|
if {$i < 0} return
|
|
|
|
$w_example tag conf example -font [list $f_family $f_size]
|
|
$w_family see [expr {$i + 1}].0
|
|
}
|
|
|
|
}
|