|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bind Scale <Enter> { |
|
if {$tk_strictMotif} { |
|
set tk::Priv(activeBg) [%W cget -activebackground] |
|
%W configure -activebackground [%W cget -background] |
|
} |
|
tk::ScaleActivate %W %x %y |
|
} |
|
bind Scale <Motion> { |
|
tk::ScaleActivate %W %x %y |
|
} |
|
bind Scale <Leave> { |
|
if {$tk_strictMotif} { |
|
%W configure -activebackground $tk::Priv(activeBg) |
|
} |
|
if {[%W cget -state] eq "active"} { |
|
%W configure -state normal |
|
} |
|
} |
|
bind Scale <1> { |
|
tk::ScaleButtonDown %W %x %y |
|
} |
|
bind Scale <B1-Motion> { |
|
tk::ScaleDrag %W %x %y |
|
} |
|
bind Scale <B1-Leave> { } |
|
bind Scale <B1-Enter> { } |
|
bind Scale <ButtonRelease-1> { |
|
tk::CancelRepeat |
|
tk::ScaleEndDrag %W |
|
tk::ScaleActivate %W %x %y |
|
} |
|
bind Scale <2> { |
|
tk::ScaleButton2Down %W %x %y |
|
} |
|
bind Scale <B2-Motion> { |
|
tk::ScaleDrag %W %x %y |
|
} |
|
bind Scale <B2-Leave> { } |
|
bind Scale <B2-Enter> { } |
|
bind Scale <ButtonRelease-2> { |
|
tk::CancelRepeat |
|
tk::ScaleEndDrag %W |
|
tk::ScaleActivate %W %x %y |
|
} |
|
if {[tk windowingsystem] eq "win32"} { |
|
|
|
bind Scale <3> [bind Scale <2>] |
|
bind Scale <B3-Motion> [bind Scale <B2-Motion>] |
|
bind Scale <B3-Leave> [bind Scale <B2-Leave>] |
|
bind Scale <B3-Enter> [bind Scale <B2-Enter>] |
|
bind Scale <ButtonRelease-3> [bind Scale <ButtonRelease-2>] |
|
} |
|
bind Scale <Control-1> { |
|
tk::ScaleControlPress %W %x %y |
|
} |
|
bind Scale <<PrevLine>> { |
|
tk::ScaleIncrement %W up little noRepeat |
|
} |
|
bind Scale <<NextLine>> { |
|
tk::ScaleIncrement %W down little noRepeat |
|
} |
|
bind Scale <<PrevChar>> { |
|
tk::ScaleIncrement %W up little noRepeat |
|
} |
|
bind Scale <<NextChar>> { |
|
tk::ScaleIncrement %W down little noRepeat |
|
} |
|
bind Scale <<PrevPara>> { |
|
tk::ScaleIncrement %W up big noRepeat |
|
} |
|
bind Scale <<NextPara>> { |
|
tk::ScaleIncrement %W down big noRepeat |
|
} |
|
bind Scale <<PrevWord>> { |
|
tk::ScaleIncrement %W up big noRepeat |
|
} |
|
bind Scale <<NextWord>> { |
|
tk::ScaleIncrement %W down big noRepeat |
|
} |
|
bind Scale <<LineStart>> { |
|
%W set [%W cget -from] |
|
} |
|
bind Scale <<LineEnd>> { |
|
%W set [%W cget -to] |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
proc ::tk::ScaleActivate {w x y} { |
|
if {[$w cget -state] eq "disabled"} { |
|
return |
|
} |
|
if {[$w identify $x $y] eq "slider"} { |
|
set state active |
|
} else { |
|
set state normal |
|
} |
|
if {[$w cget -state] ne $state} { |
|
$w configure -state $state |
|
} |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
proc ::tk::ScaleButtonDown {w x y} { |
|
variable ::tk::Priv |
|
set Priv(dragging) 0 |
|
set el [$w identify $x $y] |
|
|
|
|
|
set Priv($w,relief) [$w cget -sliderrelief] |
|
|
|
if {$el eq "trough1"} { |
|
ScaleIncrement $w up little initial |
|
} elseif {$el eq "trough2"} { |
|
ScaleIncrement $w down little initial |
|
} elseif {$el eq "slider"} { |
|
set Priv(dragging) 1 |
|
set Priv(initValue) [$w get] |
|
set coords [$w coords] |
|
set Priv(deltaX) [expr {$x - [lindex $coords 0]}] |
|
set Priv(deltaY) [expr {$y - [lindex $coords 1]}] |
|
switch -exact -- $Priv($w,relief) { |
|
"raised" { $w configure -sliderrelief sunken } |
|
"ridge" { $w configure -sliderrelief groove } |
|
} |
|
} |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
proc ::tk::ScaleDrag {w x y} { |
|
variable ::tk::Priv |
|
if {!$Priv(dragging)} { |
|
return |
|
} |
|
$w set [$w get [expr {$x-$Priv(deltaX)}] [expr {$y-$Priv(deltaY)}]] |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
proc ::tk::ScaleEndDrag {w} { |
|
variable ::tk::Priv |
|
set Priv(dragging) 0 |
|
if {[info exists Priv($w,relief)]} { |
|
$w configure -sliderrelief $Priv($w,relief) |
|
unset Priv($w,relief) |
|
} |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
proc ::tk::ScaleIncrement {w dir big repeat} { |
|
variable ::tk::Priv |
|
|
|
if {![winfo exists $w]} return |
|
|
|
|
|
|
|
set clockms [clock milliseconds] |
|
if {$repeat eq "again" && |
|
[expr {$clockms - $Priv(clockms)}] > [expr {[$w cget -repeatinterval] * 1.1}]} { |
|
set Priv(clockms) $clockms |
|
set Priv(afterId) [after [$w cget -repeatinterval] \ |
|
[list tk::ScaleIncrement $w $dir $big again]] |
|
return |
|
} |
|
|
|
if {$big eq "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 eq "up")} { |
|
if {$inc > 0} { |
|
set inc [expr {-$inc}] |
|
} |
|
} else { |
|
if {$inc < 0} { |
|
set inc [expr {-$inc}] |
|
} |
|
} |
|
|
|
|
|
$w set [expr {[$w get] + $inc}] |
|
|
|
if {$repeat eq "again"} { |
|
set Priv(clockms) $clockms |
|
set Priv(afterId) [after [$w cget -repeatinterval] \ |
|
[list tk::ScaleIncrement $w $dir $big again]] |
|
} elseif {$repeat eq "initial"} { |
|
set delay [$w cget -repeatdelay] |
|
if {$delay > 0} { |
|
set Priv(clockms) $clockms |
|
set Priv(afterId) [after $delay \ |
|
[list tk::ScaleIncrement $w $dir $big again]] |
|
} |
|
} |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
proc ::tk::ScaleControlPress {w x y} { |
|
set el [$w identify $x $y] |
|
if {$el eq "trough1"} { |
|
$w set [$w cget -from] |
|
} elseif {$el eq "trough2"} { |
|
$w set [$w cget -to] |
|
} |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
proc ::tk::ScaleButton2Down {w x y} { |
|
variable ::tk::Priv |
|
|
|
if {[$w cget -state] eq "disabled"} { |
|
return |
|
} |
|
|
|
$w configure -state active |
|
$w set [$w get $x $y] |
|
set Priv(dragging) 1 |
|
set Priv(initValue) [$w get] |
|
set Priv($w,relief) [$w cget -sliderrelief] |
|
set coords "$x $y" |
|
set Priv(deltaX) 0 |
|
set Priv(deltaY) 0 |
|
} |
|
|