diff options
Diffstat (limited to 'library/demos/cscroll.tcl')
-rw-r--r-- | library/demos/cscroll.tcl | 116 |
1 files changed, 36 insertions, 80 deletions
diff --git a/library/demos/cscroll.tcl b/library/demos/cscroll.tcl index 3d14146..0463cec 100644 --- a/library/demos/cscroll.tcl +++ b/library/demos/cscroll.tcl @@ -56,94 +56,50 @@ for {set i 0} {$i < 20} {incr i} { $c bind all <Enter> "scrollEnter $c" $c bind all <Leave> "scrollLeave $c" $c bind all <Button-1> "scrollButton $c" -if {([tk windowingsystem] eq "aqua") && ![package vsatisfies [package provide tk] 8.7-]} { - bind $c <Button-3> "$c scan mark %x %y" - bind $c <B3-Motion> "$c scan dragto %x %y" - bind $c <MouseWheel> { - %W yview scroll [expr {-%D}] units - } - bind $c <Option-MouseWheel> { - %W yview scroll [expr {-10*%D}] units - } - bind $c <Shift-MouseWheel> { - %W xview scroll [expr {-%D}] units - } - bind $c <Shift-Option-MouseWheel> { - %W xview scroll [expr {-10*%D}] units - } -} else { - bind $c <Button-2> "$c scan mark %x %y" - bind $c <B2-Motion> "$c scan dragto %x %y" - # We must make sure that positive and negative movements are rounded - # equally to integers, avoiding the problem that - # (int)1/-30 = -1, - # but - # (int)-1/-30 = 0 - # The following code ensure equal +/- behaviour. - bind $c <MouseWheel> { - if {%D >= 0} { - %W yview scroll [expr {%D/-30}] units - } else { - %W yview scroll [expr {(%D-29)/-30}] units - } - } - bind $c <Option-MouseWheel> { - if {%D >= 0} { - %W yview scroll [expr {%D/-3}] units - } else { - %W yview scroll [expr {(%D-2)/-3}] units - } - } - bind $c <Shift-MouseWheel> { - if {%D >= 0} { - %W xview scroll [expr {%D/-30}] units - } else { - %W xview scroll [expr {(%D-29)/-30}] units - } - } - bind $c <Shift-Option-MouseWheel> { - if {%D >= 0} { - %W xview scroll [expr {%D/-3}] units - } else { - %W xview scroll [expr {(%D-2)/-3}] units - } - } - bind $c <TouchpadScroll> { - lassign [tk::PreciseScrollDeltas %D] deltaX deltaY - if {$deltaX != 0 || $deltaY != 0} { - tk::ScrollByPixels %W $deltaX $deltaY - } +bind $c <Button-2> "$c scan mark %x %y" +bind $c <B2-Motion> "$c scan dragto %x %y" + +# We must make sure that positive and negative movements are rounded +# equally to integers, avoiding the problem that +# (int)1/-40 = -1, +# but +# (int)-1/-40 = 0 +# The following code ensures equal +/- behaviour. +bind $c <MouseWheel> { + if {%D >= 0} { + %W yview scroll [expr {%D/-40}] units + } else { + %W yview scroll [expr {(%D-39)/-40}] units } } - -if {[tk windowingsystem] eq "x11" && ![package vsatisfies [package provide tk] 8.7-]} { - # Support for mousewheels on Linux/Unix commonly comes through mapping - # the wheel to the extended buttons. If you have a mousewheel, find - # Linux configuration info at: - # https://linuxreviews.org/HOWTO_change_the_mouse_speed_in_X - bind $c <Button-4> { - if {!$tk_strictMotif} { - %W yview scroll -5 units - } +bind $c <Option-MouseWheel> { + if {%D >= 0} { + %W yview scroll [expr {%D/-12}] units + } else { + %W yview scroll [expr {(%D-11)/-12}] units } - bind $c <Shift-Button-4> { - if {!$tk_strictMotif} { - %W xview scroll -5 units - } +} +bind $c <Shift-MouseWheel> { + if {%D >= 0} { + %W xview scroll [expr {%D/-40}] units + } else { + %W xview scroll [expr {(%D-39)/-40}] units } - bind $c <Button-5> { - if {!$tk_strictMotif} { - %W yview scroll 5 units - } +} +bind $c <Shift-Option-MouseWheel> { + if {%D >= 0} { + %W xview scroll [expr {%D/-12}] units + } else { + %W xview scroll [expr {(%D-11)/-12}] units } - bind $c <Shift-Button-5> { - if {!$tk_strictMotif} { - %W xview scroll 5 units - } +} +bind $c <TouchpadScroll> { + lassign [tk::PreciseScrollDeltas %D] deltaX deltaY + if {$deltaX != 0 || $deltaY != 0} { + tk::ScrollByPixels %W $deltaX $deltaY } } - proc scrollEnter canvas { global oldFill set id [$canvas find withtag current] |