📄 scale.tcl
字号:
# scale.tcl --## This file defines the default bindings for Tk scale widgets and provides# procedures that help in implementing the bindings.## SCCS: @(#) scale.tcl 1.12 96/04/16 11:42:25## Copyright (c) 1994 The Regents of the University of California.# Copyright (c) 1994-1995 Sun Microsystems, Inc.## See the file "license.terms" for information on usage and redistribution# of this file, and for a DISCLAIMER OF ALL WARRANTIES.##-------------------------------------------------------------------------# The code below creates the default class bindings for entries.#-------------------------------------------------------------------------# Standard Motif bindings:bind Scale <Enter> { if $tk_strictMotif { set tkPriv(activeBg) [%W cget -activebackground] %W config -activebackground [%W cget -background] } tkScaleActivate %W %x %y}bind Scale <Motion> { tkScaleActivate %W %x %y}bind Scale <Leave> { if $tk_strictMotif { %W config -activebackground $tkPriv(activeBg) } if {[%W cget -state] == "active"} { %W configure -state normal }}bind Scale <1> { tkScaleButtonDown %W %x %y}bind Scale <B1-Motion> { tkScaleDrag %W %x %y}bind Scale <B1-Leave> { }bind Scale <B1-Enter> { }bind Scale <ButtonRelease-1> { tkCancelRepeat tkScaleEndDrag %W tkScaleActivate %W %x %y}bind Scale <2> { tkScaleButton2Down %W %x %y}bind Scale <B2-Motion> { tkScaleDrag %W %x %y}bind Scale <B2-Leave> { }bind Scale <B2-Enter> { }bind Scale <ButtonRelease-2> { tkCancelRepeat tkScaleEndDrag %W tkScaleActivate %W %x %y}bind Scale <Control-1> { tkScaleControlPress %W %x %y}bind Scale <Up> { tkScaleIncrement %W up little noRepeat}bind Scale <Down> { tkScaleIncrement %W down little noRepeat}bind Scale <Left> { tkScaleIncrement %W up little noRepeat}bind Scale <Right> { tkScaleIncrement %W down little noRepeat}bind Scale <Control-Up> { tkScaleIncrement %W up big noRepeat}bind Scale <Control-Down> { tkScaleIncrement %W down big noRepeat}bind Scale <Control-Left> { tkScaleIncrement %W up big noRepeat}bind Scale <Control-Right> { tkScaleIncrement %W down big noRepeat}bind Scale <Home> { %W set [%W cget -from]}bind Scale <End> { %W set [%W cget -to]}# tkScaleActivate --# This procedure is invoked to check a given x-y position in the# scale and activate the slider if the x-y position falls within# the slider.## Arguments:# w - The scale widget.# x, y - Mouse coordinates.proc tkScaleActivate {w x y} { global tkPriv if {[$w cget -state] == "disabled"} { return; } if {[$w identify $x $y] == "slider"} { $w configure -state active } else { $w configure -state normal }}# tkScaleButtonDown --# This procedure is invoked when a button is pressed in a scale. It# takes different actions depending on where the button was pressed.## Arguments:# w - The scale widget.# x, y - Mouse coordinates of button press.proc tkScaleButtonDown {w x y} { global tkPriv set tkPriv(dragging) 0 set el [$w identify $x $y] if {$el == "trough1"} { tkScaleIncrement $w up little initial } elseif {$el == "trough2"} { tkScaleIncrement $w down little initial } elseif {$el == "slider"} { set tkPriv(dragging) 1 set tkPriv(initValue) [$w get] set coords [$w coords] set tkPriv(deltaX) [expr $x - [lindex $coords 0]] set tkPriv(deltaY) [expr $y - [lindex $coords 1]] $w configure -sliderrelief sunken }}# tkScaleDrag --# This procedure is called when the mouse is dragged with# mouse button 1 down. If the drag started inside the slider# (i.e. the scale is active) then the scale's value is adjusted# to reflect the mouse's position.## Arguments:# w - The scale widget.# x, y - Mouse coordinates.proc tkScaleDrag {w x y} { global tkPriv if !$tkPriv(dragging) { return } $w set [$w get [expr $x - $tkPriv(deltaX)] \ [expr $y - $tkPriv(deltaY)]]}# tkScaleEndDrag --# This procedure is called to end an interactive drag of the# slider. It just marks the drag as over.## Arguments:# w - The scale widget.proc tkScaleEndDrag {w} { global tkPriv set tkPriv(dragging) 0 $w configure -sliderrelief raised}# tkScaleIncrement --# This procedure is invoked to increment the value of a scale and# to set up auto-repeating of the action if that is desired. The# way the value is incremented depends on the "dir" and "big"# arguments.## Arguments:# w - The scale widget.# dir - "up" means move value towards -from, "down" means# move towards -to.# big - Size of increments: "big" or "little".# repeat - Whether and how to auto-repeat the action: "noRepeat"# means don't auto-repeat, "initial" means this is the# first action in an auto-repeat sequence, and "again"# means this is the second repetition or later.proc tkScaleIncrement {w dir big repeat} { global tkPriv if {![winfo exists $w]} return if {$big == "big"} { set inc [$w cget -bigincrement] if {$inc == 0} { set inc [expr abs([$w cget -to] - [$w cget -from])/10.0] } if {$inc < [$w cget -resolution]} { set inc [$w cget -resolution] } } else { set inc [$w cget -resolution] } if {([$w cget -from] > [$w cget -to]) ^ ($dir == "up")} { set inc [expr -$inc] } $w set [expr [$w get] + $inc] if {$repeat == "again"} { set tkPriv(afterId) [after [$w cget -repeatinterval] \ tkScaleIncrement $w $dir $big again] } elseif {$repeat == "initial"} { set delay [$w cget -repeatdelay] if {$delay > 0} { set tkPriv(afterId) [after $delay \ tkScaleIncrement $w $dir $big again] } }}# tkScaleControlPress --# This procedure handles button presses that are made with the Control# key down. Depending on the mouse position, it adjusts the scale# value to one end of the range or the other.## Arguments:# w - The scale widget.# x, y - Mouse coordinates where the button was pressed.proc tkScaleControlPress {w x y} { set el [$w identify $x $y] if {$el == "trough1"} { $w set [$w cget -from] } elseif {$el == "trough2"} { $w set [$w cget -to] }}# tkScaleButton2Down# This procedure is invoked when button 2 is pressed over a scale.# It sets the value to correspond to the mouse position and starts# a slider drag.## Arguments:# w - The scrollbar widget.# x, y - Mouse coordinates within the widget.proc tkScaleButton2Down {w x y} { global tkPriv if {[$w cget -state] == "disabled"} { return; } $w configure -state active $w set [$w get $x $y] set tkPriv(dragging) 1 set tkPriv(initValue) [$w get] set coords "$x $y" set tkPriv(deltaX) 0 set tkPriv(deltaY) 0}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -