📄 font.tcl
字号:
-editable 0 \
-modifycmd [list SelectFont::_update $path]]
pack $lbf -side left -anchor w
pack $lbs -side left -anchor w -padx 4
foreach st $_styles {
button $path.$st \
-highlightthickness 0 -takefocus 0 -padx 0 -pady 0 -bd 2 \
-background $bg \
-image [Bitmap::get $st] \
-command [list SelectFont::_modstyle $path $st]
pack $path.$st -side left -anchor w
}
set data(label) ""
set data(lbf) $lbf
set data(lbs) $lbs
_getfont $path
return [Widget::create SelectFont $path]
}
return $path
}
# ----------------------------------------------------------------------------
# Command SelectFont::configure
# ----------------------------------------------------------------------------
proc SelectFont::configure { path args } {
set _styles [Widget::getoption "$path#SelectFont" -styles]
set res [Widget::configure "$path#SelectFont" $args]
if { [Widget::hasChanged "$path#SelectFont" -font font] } {
_getfont $path
}
if { [Widget::hasChanged "$path#SelectFont" -background bg] } {
switch -- [Widget::getoption "$path#SelectFont" -type] {
dialog {
Dialog::configure $path -background $bg
set topf [Dialog::getframe $path].topf
$topf configure -background $bg
foreach labf {labf1 labf2} {
LabelFrame::configure $topf.$labf -background $bg
set subf [LabelFrame::getframe $topf.$labf]
ScrolledWindow::configure $subf.sw -background $bg
$subf.sw.lb configure -background $bg
}
LabelFrame::configure $topf.labf3 -background $bg
set subf [LabelFrame::getframe $topf.labf3]
foreach w [winfo children $subf] {
$w configure -background $bg
}
}
toolbar {
$path configure -background $bg
ComboBox::configure $path.font -background $bg
ComboBox::configure $path.size -background $bg
foreach st $_styles {
$path.$st configure -background $bg
}
}
}
}
return $res
}
# ----------------------------------------------------------------------------
# Command SelectFont::cget
# ----------------------------------------------------------------------------
proc SelectFont::cget { path option } {
return [Widget::cget "$path#SelectFont" $option]
}
# ----------------------------------------------------------------------------
# Command SelectFont::loadfont
# ----------------------------------------------------------------------------
proc SelectFont::loadfont {{which all}} {
variable _families
# initialize families
if {![info exists _families(all)]} {
set _families(all) [lsort -dictionary [font families]]
}
if {[regexp {fixed|variable} $which] \
&& ![info exists _families($which)]} {
# initialize families
set _families(fixed) {}
set _families(variable) {}
foreach family $_families(all) {
if { [font metrics [list $family] -fixed] } {
lappend _families(fixed) $family
} else {
lappend _families(variable) $family
}
}
}
return
}
# ----------------------------------------------------------------------------
# Command SelectFont::_draw
# ----------------------------------------------------------------------------
proc SelectFont::_draw { path } {
variable $path
upvar 0 $path data
$data(lbf) selection clear 0 end
$data(lbf) selection set $data(family)
$data(lbf) activate $data(family)
$data(lbf) see $data(family)
$data(lbs) selection clear 0 end
$data(lbs) selection set $data(size)
$data(lbs) activate $data(size)
$data(lbs) see $data(size)
_update $path
if { [Dialog::draw $path] == 0 } {
set result [Widget::getoption "$path#SelectFont" -font]
} else {
set result ""
}
unset data
Widget::destroy "$path#SelectFont"
destroy $path
return $result
}
# ----------------------------------------------------------------------------
# Command SelectFont::_modstyle
# ----------------------------------------------------------------------------
proc SelectFont::_modstyle { path style } {
variable $path
upvar 0 $path data
if { $data($style) == 1 } {
$path.$style configure -relief raised
set data($style) 0
} else {
$path.$style configure -relief sunken
set data($style) 1
}
_update $path
}
# ----------------------------------------------------------------------------
# Command SelectFont::_update
# ----------------------------------------------------------------------------
proc SelectFont::_update { path } {
variable _families
variable _sizes
variable _styleOff
variable $path
upvar 0 $path data
set type [Widget::getoption "$path#SelectFont" -type]
set _styles [Widget::getoption "$path#SelectFont" -styles]
if { [Widget::getoption "$path#SelectFont" -querysystem] } {
set fams [Widget::getoption "$path#SelectFont" -families]
} else {
set fams "preset"
append fams [Widget::getoption "$path#SelectFont" -families]
}
if { $type == "dialog" } {
set curs [$path:cmd cget -cursor]
$path:cmd configure -cursor watch
}
if { [Widget::getoption "$path#SelectFont" -type] == "dialog" } {
set font [list [lindex $_families($fams) $data(family)] \
[lindex $_sizes $data(size)]]
} else {
set font [list $data(family) $data(size)]
}
foreach st $_styles {
if { $data($st) } {
lappend font $st
} elseif {[info exists _styleOff($st)]} {
# This adds the default bold/italic value to a font
#lappend font $_styleOff($st)
}
}
Widget::setoption "$path#SelectFont" -font $font
if { $type == "dialog" } {
$data(label) configure -font $font
$path:cmd configure -cursor $curs
} elseif { [set cmd [Widget::getoption "$path#SelectFont" -command]] != "" } {
uplevel \#0 $cmd
}
}
# ----------------------------------------------------------------------------
# Command SelectFont::_getfont
# ----------------------------------------------------------------------------
proc SelectFont::_getfont { path } {
variable _families
variable _sizes
variable $path
upvar 0 $path data
array set font [font actual [Widget::getoption "$path#SelectFont" -font]]
set data(bold) [expr {![string equal $font(-weight) "normal"]}]
set data(italic) [expr {![string equal $font(-slant) "roman"]}]
set data(underline) $font(-underline)
set data(overstrike) $font(-overstrike)
set _styles [Widget::getoption "$path#SelectFont" -styles]
if { [Widget::getoption "$path#SelectFont" -querysystem] } {
set fams [Widget::getoption "$path#SelectFont" -families]
} else {
set fams "preset"
append fams [Widget::getoption "$path#SelectFont" -families]
}
if { [Widget::getoption "$path#SelectFont" -type] == "dialog" } {
set idxf [lsearch $_families($fams) $font(-family)]
set idxs [lsearch $_sizes $font(-size)]
set data(family) [expr {$idxf >= 0 ? $idxf : 0}]
set data(size) [expr {$idxs >= 0 ? $idxs : 0}]
} else {
set data(family) $font(-family)
set data(size) $font(-size)
foreach st $_styles {
$path.$st configure -relief [expr {$data($st) ? "sunken":"raised"}]
}
}
}
# ----------------------------------------------------------------------------
# Command SelectFont::_destroy
# ----------------------------------------------------------------------------
proc SelectFont::_destroy { path } {
variable $path
upvar 0 $path data
unset data
Widget::destroy "$path#SelectFont"
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -