You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
95 lines
2.1 KiB
95 lines
2.1 KiB
## -*- tcl -*- |
|
# # ## ### ##### ######## ############# ##################### |
|
## |
|
# Canvas Behavior Module. Managing semi-crosshair rubber bands when |
|
# dragging. Tracers are lines from fixed points to current location |
|
# Purely visual. Driven from the outside. No bindings of its own. |
|
## |
|
|
|
## TODO : Callback to customize the rubberband lines. |
|
|
|
# # ## ### ##### ######## ############# ##################### |
|
## Requisites |
|
|
|
package require Tcl 8.5- |
|
package require Tk |
|
package require snit |
|
|
|
namespace eval ::canvas::track { |
|
namespace export lines |
|
namespace ensemble create |
|
} |
|
|
|
# # ## ### ##### ######## ############# ##################### |
|
## API |
|
|
|
snit::type ::canvas::track::lines { |
|
# # ## ### ##### ######## ############# ##################### |
|
## Lifecycle management |
|
|
|
constructor {c} { |
|
set mycanvas $c |
|
return |
|
} |
|
|
|
destructor { |
|
$self done |
|
} |
|
|
|
# # ## ### ##### ######## ############# ##################### |
|
## API. |
|
|
|
method start {center args} { |
|
if {![llength $args]} return |
|
$self done |
|
|
|
# args = list of pairs, each pair contains the x- and |
|
# y-coordinates of a fixed point. |
|
# center is current location. |
|
|
|
set mycoords $args |
|
set myitems {} |
|
|
|
foreach p $mycoords { |
|
lappend myitems [$mycanvas create line \ |
|
{*}$p {*}$center \ |
|
-width 0 -fill black -dash .] |
|
} |
|
return |
|
} |
|
|
|
method move {center} { |
|
if {![llength $myitems]} return |
|
foreach p $mycoords item $myitems { |
|
$mycanvas coords $item {*}$p {*}$center |
|
} |
|
return |
|
} |
|
|
|
method done {} { |
|
if {![llength $myitems]} return |
|
$mycanvas delete {*}$myitems |
|
set myitems {} |
|
set mycoords {} |
|
return |
|
} |
|
|
|
# # ## ### ##### ######## ############# ##################### |
|
## STATE |
|
|
|
variable mycanvas {} ; # The canvas we are working with/on. |
|
variable mycoords {} ; # List of fixed points for the rubberbands. |
|
variable myitems {} ; # Liust of the canvas items representing the rubberbands. |
|
|
|
## |
|
# # ## ### ##### ######## ############# ##################### |
|
} |
|
|
|
# # ## ### ##### ######## ############# ##################### |
|
## Ready |
|
|
|
package provide canvas::track::lines 0.1 |
|
return |
|
|
|
# # ## ### ##### ######## ############# ##################### |
|
## Scrap yard.
|
|
|