Add files via upload
This commit is contained in:
102
windowsAgent/dist/tk/ttk/sizegrip.tcl
vendored
Normal file
102
windowsAgent/dist/tk/ttk/sizegrip.tcl
vendored
Normal file
@ -0,0 +1,102 @@
|
||||
#
|
||||
# Sizegrip widget bindings.
|
||||
#
|
||||
# Dragging a sizegrip widget resizes the containing toplevel.
|
||||
#
|
||||
# NOTE: the sizegrip widget must be in the lower right hand corner.
|
||||
#
|
||||
|
||||
switch -- [tk windowingsystem] {
|
||||
x11 -
|
||||
win32 {
|
||||
option add *TSizegrip.cursor [ttk::cursor seresize] widgetDefault
|
||||
}
|
||||
aqua {
|
||||
# Aqua sizegrips use default Arrow cursor.
|
||||
}
|
||||
}
|
||||
|
||||
namespace eval ttk::sizegrip {
|
||||
variable State
|
||||
array set State {
|
||||
pressed 0
|
||||
pressX 0
|
||||
pressY 0
|
||||
width 0
|
||||
height 0
|
||||
widthInc 1
|
||||
heightInc 1
|
||||
resizeX 1
|
||||
resizeY 1
|
||||
toplevel {}
|
||||
}
|
||||
}
|
||||
|
||||
bind TSizegrip <ButtonPress-1> { ttk::sizegrip::Press %W %X %Y }
|
||||
bind TSizegrip <B1-Motion> { ttk::sizegrip::Drag %W %X %Y }
|
||||
bind TSizegrip <ButtonRelease-1> { ttk::sizegrip::Release %W %X %Y }
|
||||
|
||||
proc ttk::sizegrip::Press {W X Y} {
|
||||
variable State
|
||||
|
||||
if {[$W instate disabled]} { return }
|
||||
|
||||
set top [winfo toplevel $W]
|
||||
|
||||
# If the toplevel is not resizable then bail
|
||||
foreach {State(resizeX) State(resizeY)} [wm resizable $top] break
|
||||
if {!$State(resizeX) && !$State(resizeY)} {
|
||||
return
|
||||
}
|
||||
|
||||
# Sanity-checks:
|
||||
# If a negative X or Y position was specified for [wm geometry],
|
||||
# just bail out -- there's no way to handle this cleanly.
|
||||
#
|
||||
if {[scan [wm geometry $top] "%dx%d+%d+%d" width height x y] != 4} {
|
||||
return;
|
||||
}
|
||||
|
||||
# Account for gridded geometry:
|
||||
#
|
||||
set grid [wm grid $top]
|
||||
if {[llength $grid]} {
|
||||
set State(widthInc) [lindex $grid 2]
|
||||
set State(heightInc) [lindex $grid 3]
|
||||
} else {
|
||||
set State(widthInc) [set State(heightInc) 1]
|
||||
}
|
||||
|
||||
set State(toplevel) $top
|
||||
set State(pressX) $X
|
||||
set State(pressY) $Y
|
||||
set State(width) $width
|
||||
set State(height) $height
|
||||
set State(x) $x
|
||||
set State(y) $y
|
||||
set State(pressed) 1
|
||||
}
|
||||
|
||||
proc ttk::sizegrip::Drag {W X Y} {
|
||||
variable State
|
||||
if {!$State(pressed)} { return }
|
||||
set w $State(width)
|
||||
set h $State(height)
|
||||
if {$State(resizeX)} {
|
||||
set w [expr {$w + ($X - $State(pressX))/$State(widthInc)}]
|
||||
}
|
||||
if {$State(resizeY)} {
|
||||
set h [expr {$h + ($Y - $State(pressY))/$State(heightInc)}]
|
||||
}
|
||||
if {$w <= 0} { set w 1 }
|
||||
if {$h <= 0} { set h 1 }
|
||||
set x $State(x) ; set y $State(y)
|
||||
wm geometry $State(toplevel) ${w}x${h}+${x}+${y}
|
||||
}
|
||||
|
||||
proc ttk::sizegrip::Release {W X Y} {
|
||||
variable State
|
||||
set State(pressed) 0
|
||||
}
|
||||
|
||||
#*EOF*
|
Reference in New Issue
Block a user