summaryrefslogtreecommitdiffstats
path: root/library/demos/cscroll.tcl
diff options
context:
space:
mode:
Diffstat (limited to 'library/demos/cscroll.tcl')
-rw-r--r--library/demos/cscroll.tcl111
1 files changed, 37 insertions, 74 deletions
diff --git a/library/demos/cscroll.tcl b/library/demos/cscroll.tcl
index b155d37..8c16cf3 100644
--- a/library/demos/cscroll.tcl
+++ b/library/demos/cscroll.tcl
@@ -17,7 +17,7 @@ wm iconname $w "cscroll"
positionWindow $w
set c $w.c
-label $w.msg -font $font -wraplength 4i -justify left -text "This window displays a canvas widget that can be scrolled either using the scrollbars or by dragging with button 2 in the canvas. If you click button 1 on one of the rectangles, its indices will be printed on stdout."
+label $w.msg -font $font -wraplength 4i -justify left -text "This window displays a canvas widget that can be scrolled by using the scrollbars, by dragging with button 2 in the canvas, by using a mouse wheel, or with the two-finger gesture on a touchpad. If you click button 1 on one of the rectangles, its indices will be printed on stdout."
pack $w.msg -side top
## See Code / Dismiss buttons
@@ -56,84 +56,47 @@ 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 ensures 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/-12}] units
- } else {
- %W yview scroll [expr {(%D-11)/-12}] 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/-12}] units
- } else {
- %W xview scroll [expr {(%D-11)/-12}] units
- }
+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
}
}