Update of /cvsroot/pure-data/pd/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5624
Modified Files: Tag: desiredata desire.tk Log Message: better cursor io approximation
Index: desire.tk =================================================================== RCS file: /cvsroot/pure-data/pd/src/Attic/desire.tk,v retrieving revision 1.1.2.600.2.199 retrieving revision 1.1.2.600.2.200 diff -C2 -d -r1.1.2.600.2.199 -r1.1.2.600.2.200 *** desire.tk 30 Jun 2007 19:20:08 -0000 1.1.2.600.2.199 --- desire.tk 1 Jul 2007 00:08:58 -0000 1.1.2.600.2.200 *************** *** 1564,1568 **** set @motion_watch 0 set @iohilite {-1 0 0 0 0} ! set @pointer_sense 2 set @keyprefix 0 } --- 1564,1568 ---- set @motion_watch 0 set @iohilite {-1 0 0 0 0} ! set @pointer_sense 30 set @keyprefix 0 } *************** *** 2693,2698 **** set c [$self widget] $self motion_checkhairtip $target $x $y ! #eval $@dehighlight ! #set @dehighlight {} set oldpos $@curpos set @curpos [list $x $y] --- 2693,2698 ---- set c [$self widget] $self motion_checkhairtip $target $x $y ! eval $@dehighlight ! set @dehighlight {} set oldpos $@curpos set @curpos [list $x $y] *************** *** 2833,2875 **** def Canvas motion_iohilite2 {x y f} { set c [$self widget] ! set obj [$self identify_closestobj $x $y $f] ! if {$obj < 0} {if {$@dehighlight != ""} { ! set @iohilite [list -1 0 0 0 0] ! eval $@dehighlight} ! return ! } ! mset {x1 y1 x2 y2} [$obj bbox] ! if {$x > $x1 && $x < $x2 && $y > $y1 && $y < $y2} { ! set @iohilite [list -1 0 0 0 0] ! if {$@dehighlight != ""} {eval $@dehighlight} ! set @dehighlight "" ! return ! } ! mset {cx cy} [rect_centre [$obj bbox]] ! if {$y < $cy} {set io i} else {set io o} ! switch $io { ! i {set ports [$obj ninlets]} ! o {set ports [$obj noutlets]} ! } ! if {!$ports} {set io i; set ports [$obj ninlets]} ! set mindist 66666 ! set idx 0 ! if {!$ports} {return} ! for {set i 0} {$i < $ports} {incr i} { ! set point2 [lmap / [rect_centre [$c bbox ${obj}$io${i}]] $@zoom] ! set point1 [list $x $y] ! set dist [distance $point1 $point2] ! if {$dist < $mindist} {set mindist $dist; set idx $i; mset {iox ioy} $point2} ! } ! $obj hilite_io $io [expr floor($iox)] [expr floor($ioy)] ! set hilite ${obj}$io${idx}b ! set @iohilite [list $obj [expr floor($iox)] [expr floor($ioy)] $io $idx] ! if {$hilite != [lindex $@dehighlight 2]} { ! eval $@dehighlight ! set @dehighlight [list $c delete $hilite] } ! #set @dehighlight [list $c delete ${obj}$io${idx}b] ! #puts "dehilite is :: $@dehighlight" ! #puts "obj:: $obj :: [$obj text] :: hilite $io :: $idx" }
--- 2833,2850 ---- def Canvas motion_iohilite2 {x y f} { set c [$self widget] ! set io [$self identify_closestio $x $y $f] ! if {$io<0} {set @iohilite [list -1 0 0 0 0]; return} ! foreach item {i o} { ! set type_idx [string first $item $io] ! set type [string index $io $type_idx] ! set port [string range $io $type_idx+1 end] ! set object [string range $io 0 $type_idx-1] ! if {$type_idx >= 0} {break} } ! ! mset {iox ioy} [lmap / [rect_centre [$c bbox $io]] $@zoom] ! set @iohilite [list $object $iox $ioy $type $port] ! $object hilite_io $type $iox $ioy ! set @dehighlight [list $c delete ${io}b] }
*************** *** 2967,2995 **** }
! def Canvas identify_closestobj {x y f} { set c [$self widget] set cx [expr $x*$@zoom] set cy [expr $y*$@zoom] - #set offset 50 set stack [$c find overlapping [expr $cx-$@pointer_sense] [expr $cy-$@pointer_sense] \ [expr $cx+$@pointer_sense] [expr $cy+$@pointer_sense]] set stack [lreverse $stack] set objs {} foreach tag $stack { set tags [$c gettags $tag] ! if {[regexp {^[xo][0-9a-f]{6,8}} $tags id]} { ! set class [$id class] ! switch $class { ! Wire {} Crosshair {} Tooltip {} Comment {} SelRect {} FutureWire {} Sense {} ! default {lappend objs $id} ! } ! } } ! set objs [lsort -unique $objs] ! if {![llength $objs]} {return -1} set mindist 66666 set idx 0; set i 0 ! foreach obj $objs { ! set point2 [rect_centre [$obj bbox]] set point1 [list $x $y] set dist [distance $point2 $point1] --- 2942,2965 ---- }
! def Canvas identify_closestio {x y f} { set c [$self widget] set cx [expr $x*$@zoom] set cy [expr $y*$@zoom] set stack [$c find overlapping [expr $cx-$@pointer_sense] [expr $cy-$@pointer_sense] \ [expr $cx+$@pointer_sense] [expr $cy+$@pointer_sense]] set stack [lreverse $stack] + set ios {} set objs {} foreach tag $stack { set tags [$c gettags $tag] ! if {[regexp {^[x][0-9a-f]{6,8}[oi][0-9]{1,3}} $tags io]} { ! lappend ios $io ! } } ! if {![llength $ios]} {return -1} set mindist 66666 set idx 0; set i 0 ! foreach io $ios { ! set point2 [rect_centre [$c bbox $io]] set point1 [list $x $y] set dist [distance $point2 $point1] *************** *** 2997,3002 **** incr i; } ! return [lindex $objs $idx] ! #puts " mindist:: $mindist || idx:: $idx || [[lindex $objs $idx] text]" }
--- 2967,2971 ---- incr i; } ! return [lindex $ios $idx] }