📄 font.tcl
字号:
-values $_families($fams) \ -textvariable SelectFont::$path\(family\) \ -editable 0 \ -modifycmd [list SelectFont::_update $path]] set lbs [ComboBox::create $path.size \ -highlightthickness 0 -takefocus 0 -background $bg \ -width 4 \ -values $_sizes \ -textvariable SelectFont::$path\(size\) \ -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] == 1 } { set result [Widget::getoption "$path#SelectFont" -font] set color $data(fontcolor) if { $color == "" } { set color #000000 } } else { set result "" set color "" } unset data Widget::destroy "$path#SelectFont" destroy $path if { $color != -1 } { return [list $result $color] } else { 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 if { ($data(fontcolor) != "") && ($data(fontcolor) != -1) } { $data(label) configure -foreground $data(fontcolor) $data(frc) configure -bg $data(fontcolor) } elseif { $data(fontcolor) == "" } { #If no color is selected, restore previous one set data(fontcolor) [$data(label) cget -foreground] } } 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 + -