[PD-cvs] extensions/gui/ix kbd-demo.pd, 1.2, 1.3 kbd.wid, 1.1, 1.2 mat-demo.pd, 1.3, 1.4 mat.wid, 1.5, 1.6 kbd2.wid, 1.1, NONE

carmen rocco ix9 at users.sourceforge.net
Wed May 25 00:28:10 CEST 2005


Update of /cvsroot/pure-data/extensions/gui/ix
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3593

Modified Files:
	kbd-demo.pd kbd.wid mat-demo.pd mat.wid 
Removed Files:
	kbd2.wid 
Log Message:
adding chords to kbd


--- kbd2.wid DELETED ---

Index: kbd-demo.pd
===================================================================
RCS file: /cvsroot/pure-data/extensions/gui/ix/kbd-demo.pd,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** kbd-demo.pd	17 May 2005 17:53:41 -0000	1.2
--- kbd-demo.pd	24 May 2005 22:28:08 -0000	1.3
***************
*** 21,25 ****
  #X floatatom 149 21 5 0 12 0 - - -;
  #X msg 148 38 #octaves \$1;
! #X obj 165 140 widget kbd2 k2 #octaves 3 #bg purple #fg pink -height
  32;
  #X obj 56 174 + 36;
--- 21,25 ----
  #X floatatom 149 21 5 0 12 0 - - -;
  #X msg 148 38 #octaves \$1;
! #X obj 165 140 widget kbd k2 #octaves 3 #bg purple #fg pink -height
  32;
  #X obj 56 174 + 36;

Index: mat.wid
===================================================================
RCS file: /cvsroot/pure-data/extensions/gui/ix/mat.wid,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -d -r1.5 -r1.6
*** mat.wid	17 May 2005 07:46:57 -0000	1.5
--- mat.wid	24 May 2005 22:28:08 -0000	1.6
***************
*** 2,88 ****
  namespace eval ::ix {
      proc random_int {} {return [expr "int(floor(rand()*16))"]}
!     proc random_clr {} {
!         return [format "\#%1X%1X%1X%1X%1X%1X" [random_int] [random_int] [random_int] [random_int] [random_int] [random_int]]
!     }
!     variable _
      proc mat_note {p t item} {
  	set id [lindex [$p.m itemcget $item -tags] 1]
  	set len [expr [lindex $_($t:items:$id) 2] - [lindex $_($t:items:$id) 0]]
  	set vel [$p.m itemcget $item -fillopacity]
! 	pd [concat $t.rp _cb note [lindex $_($t:items:$id) 1] $vel $len \;]
!     }
!     proc mat_click {button action p t x y} {
  	variable _
! 	set clicked [$p.m find overlapping $x $y $x $y]
! 	switch $action {
! 	    hover {
! 		foreach item $clicked {
! 		    if {[lindex [$p.m itemcget $item -tags] 0] eq "item"} {
! 			mat_note $p $t $item
! 		    }
! 		}
! 	    }
! 	    first {
! #		if {$clicked ne ""} {
! 		    set _($t:cl) $clicked
! #		}
! 		foreach xy {x y}  {set _($t:f$xy) [set $xy]}
! 	    }
! 	    motion {
! 		set mx [expr $x - $_($t:cx)]
! 		set my [expr $y - $_($t:cy)]
! 		foreach xy {x y} {
! 		    set mvt [mat_tr $p $t $xy d [expr $$xy - $_($t:c$xy)]]
! 		    switch $button {
! 			1 {
! 			    foreach ab {a b} {
! 				set _($t:${xy}$ab) [expr $_($t:${xy}$ab) - $mvt]   
  			    }
  			}
- 			2 {
- 			    set _($t:${xy}a) [expr $_($t:${xy}a) - $mvt]
- 			    set _($t:${xy}b) [expr $_($t:${xy}b) + $mvt]
- 			}
  		    }
! 		}
! 		switch $button {
! 		    1 {			    
! 			if {$clicked ne ""} {
! 			    set items $clicked
! 			} else {
! 			    set items [$p.m find withtag item] 			   
! 			    mat_gridlines $p $t
! 			}
! 			foreach item $items {
! 			    set m [$p.m itemcget $item -matrix]
! 			    set m [list [lindex $m 0] [lindex $m 1] [list [expr [lindex [lindex $m 2] 0] + $mx] [expr [lindex [lindex $m 2] 1] + $my]]]
! 			    $p.m itemconfigure $item -matrix $m
! 			}
! 		    }
! 		    2 {
! 			foreach item [$p.m find withtag item] {
! 			    set id [lindex [$p.m itemcget $item -tags] 1]
! 			    set px [mat_tr $p $t x t [lindex $_($t:items:$id) 0]]
! 			    set py [mat_tr $p $t y t [lindex $_($t:items:$id) 1]]
! 			    set sx [mat_tr $p $t x id [expr [lindex $_($t:items:$id) 2] - [lindex $_($t:items:$id) 0]]]
! #			    set sy [mat_tr $p $t y id [expr [lindex $_($t:items:$id) 3] - [lindex $_($t:items:$id) 1]]]
! 			    set sy [mat_tr $p $t y id 1]
! 			    $p.m coords $item [::tkpath::coords rect $px $py $sx $sy -rx 3 -ry 3]
! 			}
! 			mat_gridlines $p $t
  		    }
! 		    3 {
! 			set velo [expr ($x - $_($t:cx)) / 100.0]
! 			foreach item $_($t:cl) {
! 			    set vel [expr $velo + [$p.m itemcget $item -fillopacity]]
! 			    if {$vel > 1} {set vel 1}
! 			    if {$vel < 0} {set vel 0}
! 			    $p.m itemconfigure $item -fillopacity $vel
  			}
  		    }
! 		}			
  	    }
  	}
- 	foreach xy {x y}  {set _($t:c$xy) [set $xy]}
      }
      
--- 2,92 ----
  namespace eval ::ix {
      proc random_int {} {return [expr "int(floor(rand()*16))"]}
!     proc random_clr {} {return [format "\#%1X%1X%1X%1X%1X%1X" [random_int] [random_int] [random_int] [random_int] [random_int] [random_int]]}
! 
      proc mat_note {p t item} {
+ 	variable _
  	set id [lindex [$p.m itemcget $item -tags] 1]
  	set len [expr [lindex $_($t:items:$id) 2] - [lindex $_($t:items:$id) 0]]
  	set vel [$p.m itemcget $item -fillopacity]
! 	pd [concat $t.rp _cb note [lindex $_($t:items:$id) 1] $vel $len \;]}
! 
!     proc mat_click {m button action p t x y} {
  	variable _
! 	switch $m {
! 	    control {mat_draw $action $p $t $x $y}	    
! 	    "" {
! 		set clicked [$p.m find overlapping $x $y $x $y]
! 		switch $action {
! 		    hover {
! 			foreach item $clicked {
! 			    if {[lindex [$p.m itemcget $item -tags] 0] eq "item"} {
! 				mat_note $p $t $item
  			    }
  			}
  		    }
! 		    first {
! 			#		if {$clicked ne ""} {
! 			set _($t:cl) $clicked
! 			#		}
! 			foreach xy {x y}  {set _($t:f$xy) [set $xy]}
  		    }
! 		    motion {
! 			set mx [expr $x - $_($t:cx)]
! 			set my [expr $y - $_($t:cy)]
! 			foreach xy {x y} {
! 			    set mvt [mat_tr $p $t $xy d [expr $$xy - $_($t:c$xy)]]
! 			    switch $button {
! 				1 {
! 				    foreach ab {a b} {
! 					set _($t:${xy}$ab) [expr $_($t:${xy}$ab) - $mvt]   
! 				    }
! 				}
! 				2 {
! 				    set _($t:${xy}a) [expr $_($t:${xy}a) - $mvt]
! 				    set _($t:${xy}b) [expr $_($t:${xy}b) + $mvt]
! 				}
! 			    }
  			}
+ 			switch $button {
+ 			    1 {			    
+ 				if {$clicked ne ""} {
+ 				    set items $clicked
+ 				} else {
+ 				    set items [$p.m find withtag item] 			   
+ 				    mat_gridlines $p $t
+ 				}
+ 				foreach item $items {
+ 				    set m [$p.m itemcget $item -matrix]
+ 				    set m [list [lindex $m 0] [lindex $m 1] [list [expr [lindex [lindex $m 2] 0] + $mx] [expr [lindex [lindex $m 2] 1] + $my]]]
+ 				    $p.m itemconfigure $item -matrix $m
+ 				}
+ 			    }
+ 			    2 {
+ 				foreach item [$p.m find withtag item] {
+ 				    set id [lindex [$p.m itemcget $item -tags] 1]
+ 				    set px [mat_tr $p $t x t [lindex $_($t:items:$id) 0]]
+ 				    set py [mat_tr $p $t y t [lindex $_($t:items:$id) 1]]
+ 				    set sx [mat_tr $p $t x id [expr [lindex $_($t:items:$id) 2] - [lindex $_($t:items:$id) 0]]]
+ 				    #			    set sy [mat_tr $p $t y id [expr [lindex $_($t:items:$id) 3] - [lindex $_($t:items:$id) 1]]]
+ 				    set sy [mat_tr $p $t y id 1]
+ 				    $p.m coords $item [::tkpath::coords rect $px $py $sx $sy -rx 3 -ry 3]
+ 				}
+ 				mat_gridlines $p $t
+ 			    }
+ 			    3 {
+ 				set velo [expr ($x - $_($t:cx)) / 100.0]
+ 				foreach item $_($t:cl) {
+ 				    set vel [expr $velo + [$p.m itemcget $item -fillopacity]]
+ 				    if {$vel > 1} {set vel 1}
+ 				    if {$vel < 0} {set vel 0}
+ 				    $p.m itemconfigure $item -fillopacity $vel
+ 				}
+ 			    }
+ 			}			
  		    }
! 		}
! 		foreach xy {x y}  {set _($t:c$xy) [set $xy]}
  	    }
  	}
      }
      
***************
*** 91,117 ****
  	switch $action {
  	    motion {
! 		if {$x >= $_($t:cx)} {
! 		    set xa $_($t:cx)
! 		    set xb $x
! 		} else {
! 		    set xa $x
! 		    set xb $_($t:cx)
! 		}
  		$p.m coords drawing [::tkpath::coords rect $xa $y [expr $xb - $xa] [mat_tr $p $t y id 1] -rx 3 -ry 3]
  		set yi [mat_tr $p $t y i $y]
  		set _($t:items:$_($t:i)) [list [mat_tr $p $t x i $xa] $yi [mat_tr $p $t x i $xb] $yi]
! #		pd [concat $t.rp _cb note $yi \;]
! 	    }
  	    first {
  		foreach xy {x y}  {set _($t:c$xy) [set $xy]}
! 		$p.m create path [::tkpath::coords rect $_($t:cx) $_($t:cy) 0 0 -rx 3 -ry 3] -tags drawing -fill green -fillopacity 0.8
! 	    }
  	    release {
  		$p.m itemconfigure drawing -tags [list item $_($t:i)] -matrix {{1.0 0.0} {0.0 1.0} {0.0 0.0}}
! 		incr _($t:i) 2
! 	    }
! 	}
  
-     }
      proc mat_tr {p t d inv v} {
  	variable _
--- 95,110 ----
  	switch $action {
  	    motion {
! 		if {$x >= $_($t:cx)} {set xa $_($t:cx);set xb $x} else {set xa $x;set xb $_($t:cx)}
  		$p.m coords drawing [::tkpath::coords rect $xa $y [expr $xb - $xa] [mat_tr $p $t y id 1] -rx 3 -ry 3]
  		set yi [mat_tr $p $t y i $y]
  		set _($t:items:$_($t:i)) [list [mat_tr $p $t x i $xa] $yi [mat_tr $p $t x i $xb] $yi]
! 		pd [concat $t.rp _cb note $yi 0.8 \;]}
  	    first {
  		foreach xy {x y}  {set _($t:c$xy) [set $xy]}
! 		$p.m create path [::tkpath::coords rect $_($t:cx) $_($t:cy) 0 0 -rx 3 -ry 3] -tags drawing -fill green -fillopacity 0.8}
  	    release {
  		$p.m itemconfigure drawing -tags [list item $_($t:i)] -matrix {{1.0 0.0} {0.0 1.0} {0.0 0.0}}
! 		incr _($t:i) 2}}}
  
      proc mat_tr {p t d inv v} {
  	variable _
***************
*** 121,173 ****
  	    i {return [expr ($_($t:${d}b) - $_($t:${d}a)) * $v /([winfo $dm($d) $p.m] + 0.0) + $_($t:${d}a)]}
  	    d {return [expr ($_($t:${d}b) - $_($t:${d}a)) * $v /([winfo $dm($d) $p.m] + 0.0)]}
! #	    id {return [expr $v / ($_($t:${d}b) - $_($t:${d}a) + 0.0) * [winfo $dm($d) $p.m]]}
! 	    id {return [expr abs($v / ($_($t:${d}b) - $_($t:${d}a) + 0.0) * [winfo $dm($d) $p.m])]}
! 	}
!     }
      proc mat_zoomReset {p t} {
  	variable _
! 	set _($t:ya) $_($t:yao)
! 	set _($t:yb) $_($t:ybo)
! 	set _($t:xa) $_($t:xao)
! 	set _($t:xb) $_($t:xbo)
! 	mat_gridlines $p $t
!     }
!     proc mat_new {path target w h bg ln Xa Xb Ya Yb qXv qYv} {
  	variable _
! 	set _($target:i) 0
! 	set _($target:ln) $ln
! 	set _($target:qxv) $qXv
! 	set _($target:qyv) $qYv
! 	set _($target:ya) $Ya
! 	set _($target:xa) $Xa
! 	set _($target:yb) $Yb
! 	set _($target:xb) $Xb
! 	set _($target:yao) $Ya
! 	set _($target:xao) $Xa
! 	set _($target:ybo) $Yb
! 	set _($target:xbo) $Xb
  	if {[winfo exists $path.m] != 1} {
  	    canvas $path.m -bg $bg -width $w -height $h
  	    pack $path.m -side left
! 	    bind $path.m <Motion> "::ix::mat_click 0 hover $path $target %x %y"
! 	    bind $path.m <1> "::ix::mat_click 1 first $path $target %x %y"
! 	    bind $path.m <B1-Motion> "::ix::mat_click 1 motion $path $target %x %y"
! 	    bind $path.m <ButtonRelease-1> "::ix::mat_click 1 release $path $target %x %y"
! 	    bind $path.m <2> "::ix::mat_click 2 first $path $target %x %y"
! 	    bind $path.m <Double-2> "::ix::mat_zoomReset $path $target" 
! 	    bind $path.m <B2-Motion> "::ix::mat_click 2 motion $path $target %x %y"
! 	    bind $path.m <ButtonRelease-2> "::ix::mat_click 2 release $path $target %x %y"
! 	    bind $path.m <3> "::ix::mat_click 3 first $path $target %x %y"
! 	    bind $path.m <B3-Motion> "::ix::mat_click 3 motion $path $target %x %y"
! 	    bind $path.m <ButtonRelease-3> "::ix::mat_click 3 release $path $target %x %y"
! 	    bind $path.m <Control-1> "::ix::mat_draw first $path $target %x %y"
! 	    bind $path.m <Control-B1-Motion> "::ix::mat_draw motion $path $target %x %y"
! 	    bind $path.m <Control-ButtonRelease-1> "::ix::mat_draw release $path $target %x %y"
  	    set bd [expr {[$path cget -bd] * 2}]
!             $path configure -bg gray -width [expr [winfo width $path.m] + $bd] \
! 		-height [expr [winfo height $path.m] + $bd]
! 	    update
! 	    mat_gridlines $path $target
! 	}}
      
      proc mat_gridlines {path target} {
--- 114,142 ----
  	    i {return [expr ($_($t:${d}b) - $_($t:${d}a)) * $v /([winfo $dm($d) $p.m] + 0.0) + $_($t:${d}a)]}
  	    d {return [expr ($_($t:${d}b) - $_($t:${d}a)) * $v /([winfo $dm($d) $p.m] + 0.0)]}
! 	    #	    id {return [expr $v / ($_($t:${d}b) - $_($t:${d}a) + 0.0) * [winfo $dm($d) $p.m]]}
! 	    id {return [expr abs($v / ($_($t:${d}b) - $_($t:${d}a) + 0.0) * [winfo $dm($d) $p.m])]}}}
! 
      proc mat_zoomReset {p t} {
  	variable _
! 	set _($t:ya) $_($t:yao);set _($t:yb) $_($t:ybo);set _($t:xa) $_($t:xao);set _($t:xb) $_($t:xbo)
! 	mat_gridlines $p $t}
! 
!     proc mat_new {path target w h bg ln xa xb ya yb qx qy} {
  	variable _
! 	set i 0
! 	foreach xy {x y} {foreach ab {a b} {set ${xy}${ab}o [set ${xy}${ab}]}}
! 	foreach a {i ln xa xb ya yb xao xbo yao ybo qx qy} {set _($target:$a) [set $a]}
  	if {[winfo exists $path.m] != 1} {
  	    canvas $path.m -bg $bg -width $w -height $h
  	    pack $path.m -side left
! 	    bind $path.m <Motion> "::ix::mat_click {} 0 hover $path $target %x %y"
! 	    foreach m {"Control-" "" "Shift-"} {
! 		foreach bn {1 2 3} {
! 		    set b [list [concat $bn first] [concat B${bn}-Motion motion] [concat ButtonRelease-$bn release]]
! 		    foreach ba {0 1 2} {
! 			bind $path.m <$m[lindex [lindex $b $ba] 0]> "::ix::mat_click [list [string tolower [string trimright $m -1]]] $bn [lindex [lindex $b $ba] 1] $path $target %x %y"}}}
  	    set bd [expr {[$path cget -bd] * 2}]
!             $path configure -bg gray -width [expr [winfo width $path.m] + $bd] -height [expr [winfo height $path.m] + $bd]
! 	    mat_gridlines $path $target}}
      
      proc mat_gridlines {path target} {
***************
*** 178,182 ****
  	set gh [winfo height $w]
  	set gw [winfo width $w]
! 	foreach item [$path.m find withtag gridline] {$path.m delete $item}
  	foreach xy {x y} {
  	    array set ta {x n y w}
--- 147,151 ----
  	set gh [winfo height $w]
  	set gw [winfo width $w]
! 	foreach item [$w find withtag gridline] {$w delete $item}
  	foreach xy {x y} {
  	    array set ta {x n y w}
***************
*** 184,202 ****
  	    array set igx {y width x height}
  	    if {$_($target:${xy}a) > $_($target:${xy}b)} {set oa ">=";set ob "-"} {set oa "<=";set ob "+"}
! 	    for {set x [expr int($_($target:${xy}a) / ($_($target:q${xy}v) + 0.0) + 1)*($_($target:q${xy}v) + 0.0)]} {[expr $x $oa $_($target:${xy}b)]} {set x [expr $x $ob $_($target:q${xy}v)]} {
  		set og [mat_tr $path $target $xy t $x]
! 		set invgeo [winfo $igx($xy) $path.m]
  		switch $xy {y {set coords [concat M 0 $og L $invgeo $og]}
  		    x {set coords [concat M $og 0 L $og $invgeo]}}
  		$w lower [$w create path $coords -stroke $_($target:ln) -strokedasharray 2 -tags gridline -strokewidth 1]
  		$w lower [$w create text [lrange $coords 1 2] -font {{Bitstream Vera Sans} 8} \
! 			      -fill green -anchor $ta($xy) -text $x -justify $tj($xy) -tags gridline]}}
!     }
! }
  #> mat frame
  #. -bd 3 #w 384 #h 144 #bg white #ln purple
! #. #Xa 123 #Xb 2000 #Ya 0 #Yb 127 #qXv 125 #qYv 1
  #. @list  ::ix::mat_add .- .| {.#1} .#2 .#3 .#4
  #. @add  ::ix::mat_add .- .| {.#1} .#2 .#3 .#4
  puts "mat .- .|"
! ::ix::mat_new .- .| .#w .#h .#bg .#ln .#Xa .#Xb .#Ya .#Yb .#qXv .#qYv
--- 153,170 ----
  	    array set igx {y width x height}
  	    if {$_($target:${xy}a) > $_($target:${xy}b)} {set oa ">=";set ob "-"} {set oa "<=";set ob "+"}
! 	    for {set x [expr int($_($target:${xy}a) / ($_($target:q${xy}) + 0.0) + 1)*($_($target:q${xy}) + 0.0)]} {[expr $x $oa $_($target:${xy}b)]} {set x [expr $x $ob $_($target:q${xy})]} {
  		set og [mat_tr $path $target $xy t $x]
! 		set invgeo [winfo $igx($xy) $w]
  		switch $xy {y {set coords [concat M 0 $og L $invgeo $og]}
  		    x {set coords [concat M $og 0 L $og $invgeo]}}
  		$w lower [$w create path $coords -stroke $_($target:ln) -strokedasharray 2 -tags gridline -strokewidth 1]
  		$w lower [$w create text [lrange $coords 1 2] -font {{Bitstream Vera Sans} 8} \
! 			      -fill green -anchor $ta($xy) -text $x -justify $tj($xy) -tags gridline]}}}}
! 
  #> mat frame
  #. -bd 3 #w 384 #h 144 #bg white #ln purple
! #. #Xa 123 #Xb 2000 #Ya 0 #Yb 127 #qx 125 #qy 1
  #. @list  ::ix::mat_add .- .| {.#1} .#2 .#3 .#4
  #. @add  ::ix::mat_add .- .| {.#1} .#2 .#3 .#4
  puts "mat .- .|"
! ::ix::mat_new .- .| .#w .#h .#bg .#ln .#Xa .#Xb .#Ya .#Yb .#qx .#qy

Index: kbd.wid
===================================================================
RCS file: /cvsroot/pure-data/extensions/gui/ix/kbd.wid,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** kbd.wid	5 Apr 2005 13:32:37 -0000	1.1
--- kbd.wid	24 May 2005 22:28:08 -0000	1.2
***************
*** 1,95 ****
  namespace eval ::ix {
! variable kbd_lastplayed
  
! proc kbd_click {target w h} {
!     set height [winfo height $w]
!     set vel [expr $h.0 / $height.0]
!     variable kbd_lastplayed
!     set kbd_lastplayed $w
!     kbd_down $target $w $vel
! }
! proc kbd_down {target w vel} {
!     pd "$target.rp _cb [winfo name $w] $vel;"
!     $w conf -relief sunken
! }
! proc kbd_up {target w} {
!     pd "$target.rp _cb [winfo name $w] 0;"
!     $w conf -relief raised
! }
! proc kbd_release {target} {
!     variable kbd_lastplayed
!     if {$kbd_lastplayed != {}} {kbd_up $target $kbd_lastplayed}
! }
! proc kbd_key {path target count vel key} {
!     set w $path.f[expr $key / 12].$key
!     if {$vel > 0} {kbd_down $target $w $vel}
!     if {$vel == 0} {kbd_up $target $w}
! }
! proc kbd_fkey {path target count key} {
!     set w $path.f[expr $key / 12].$key
!     kbd_down $target $w 1
!     kbd_up $target $w
! }
  
! proc kbd_drag {target x y} {
!     variable kbd_lastplayed
!     set w [winfo containing $x $y]
!     if { $w == "" } { kbd_release $target; set kbd_lastplayed {}; return }
!     if { $w == $kbd_lastplayed } return
!     if {[lsearch -exact [bindtags $w] key ] == -1 } {
! 	kbd_release $target
! 	set kbd_lastplayed {}; return
!     } 
!     kbd_release $target
!     set h [expr $y - [winfo rooty $w]]
!     kbd_click $target $w $h
! }
! proc kbd_white {w t p} { set t {}
!     label $w -text $t -background white -foreground black \
! 				     -borderwidth 1 -relief raised 
!     place $w -relx $p -y 0 -relwidth 0.142857 -relheight 1
!     bindtags $w {key}
!     lower $w
! }
! proc kbd_black {w t p} { set t {}
!     label $w -text $t -background black -foreground white \
! 			     -borderwidth 1 -relief raised 
!     place $w -relx $p -y 0 -relwidth 0.1 -relheight 0.6 -anchor n
!     bindtags $w {key}
! }
! proc kbd {path target octaves} {
!     if {[winfo exists $path.f0] != 1} {
! #    foreach oct [winfo children $path] {destroy $oct}
! 	$path config -width [expr $octaves * 66]
! 	for {set o 0} {$o < $octaves} {incr o} {
! 	    set w $path.f$o
! 	    frame $w -bd 0 -height 66 -width 66
! 	    kbd_white $w.[expr $o * 12]  C  0.0
! 	    kbd_black $w.[expr $o * 12 + 1]  C# 0.142857
! 	    kbd_white $w.[expr $o * 12 + 2]  D  0.142857
! 	    kbd_black $w.[expr $o * 12 + 3]  D# 0.285714
! 	    kbd_white $w.[expr $o * 12 + 4]  E  0.285714
! 	    kbd_white $w.[expr $o * 12 + 5]  F  0.428571
! 	    kbd_black $w.[expr $o * 12 + 6]  F# 0.571428
! 	    kbd_white $w.[expr $o * 12 + 7]  G  0.571428
! 	    kbd_black $w.[expr $o * 12 + 8]  G# 0.714285
! 	    kbd_white $w.[expr $o * 12 + 9]  A  0.714285
! 	    kbd_black $w.[expr $o * 12 + 10] A# 0.857142
! 	    kbd_white $w.[expr $o * 12 + 11] H  0.857142
! 	    place $w -y 0 -relheight 1.0 -relx [expr $o / $octaves.0] -relwidth [expr 1 / $octaves.0]
! 	}
!     }
! }
  
- }
  #> kbd frame
  #. -height 100 -width 60
! #. #octaves 6
! #. @list ::ix::kbd_key .- .| .#n .#2 .#1
! #. @float ::ix::kbd_fkey .- .| .#n .#1
! puts "kbd .- .|"
! ::ix::kbd .- .| .#octaves
  
! bind key <1> {::ix::kbd_click .| %W %y}
! bind key <B1-Motion> {::ix::kbd_drag .| %X %Y}
! bind key <ButtonRelease-1> {::ix::kbd_release .|}
--- 1,39 ----
  namespace eval ::ix {
!     proc kbd_play {t m b x y} {
! 	variable _
! 	foreach a {{rs {0 sunken 1 raised}} {sr {0 raised 1 sunken}} {v {0 0 1 {($y - [winfo rooty $w]) / ([winfo height $w] + 0.0)}}}} {array set [lindex $a 0] [lindex $a 1]}
! 	set w [winfo containing $x $y]; set tp $t.rp
! 	if {$m != 1 && $_($t:lp) != -1 && $_($t:lp) ne $w} {
! 	    $_($t:lp) config -relief raised;pd "$tp _cb [winfo name $_($t:lp)] 0 \;"}
! 	if {[$w cget -relief] eq $rs($b)} {
! 	    eval $w config -relief $sr($b); pd "$tp _cb [winfo name $w] [eval expr $v($b)] \;"}
! 	set _($t:lp) $w}
  
!     proc kbd_off {p t octaves} {
! 	for {set o 0} {$o < $octaves} {incr o} {	
! 	    for {set on 0} {$on < 12} {incr on} {
! 		set no [expr $o * 12 + $on]
! 	        if {[$p.f$o.$no cget -relief] eq "sunken"} {
! 		    $p.f$o.$no config -relief raised
! 		    pd "$t.rp _cb $no 0 \;"}}}}
  
!     proc kbd {path t octaves b f} {
! 	if {![winfo exists $path.f0]} {
! 	    variable _
! 	    set _($t:lp) -1
! 	    $path config -width [expr $octaves * 66]
! 	    set bw {0 1 0 1 0 0 1 0 1 0 1 0} ; set npl {0 1 1 2 2 3 4 4 5 5 6 6}
! 	    foreach a {{bg "0 $b 1 $f"} {fg "1 $b 0 $f"} {an {0 ";lower $wk" 1 "-anchor n"}} {rw {0 {[expr 1 / 7.]} 1 {[expr 1 / 10.]}}} {rh {0 {[expr 1.]} 1 {[expr 6 / 10.]}}}} {array set [lindex $a 0] [lindex $a 1]}
! 	    for {set o 0} {$o < $octaves} {incr o} {
! 		set w $path.f$o ; frame $w -bd 0 -height 66 -width 66
! 		for {set on 0} {$on < 12} {incr on} {
! 		    set wk $w.[expr $o * 12 + $on] ; set n [lindex $bw $on]
! 		    eval "label $wk -bg $bg($n) -fg $fg($n) -bd 1 -relief raised;place $wk -relx [expr [lindex $npl $on] / 7.] -y 0 -relwidth $rw($n) -relheight $rh($n) $an($n)"
! 		    bind $wk <1> "::ix::kbd_play $t 0 1 %X %Y"; bind $wk <B1-Motion> [bind $wk <1>];bind $wk <ButtonRelease-1> "::ix::kbd_play $t 0 0 %X %Y"; bind $wk <Enter> "::ix::kbd_play $t 1 0 %X %Y"; bind $wk <3> "::ix::kbd_play $t 1 1 %X %Y"; bind $wk <B3-Motion> [bind $wk <3>]; bind $wk <2> "::ix::kbd_off $path $t $octaves"}
! 		place $w -y 0 -relheight 1.0 -relx [expr $o / $octaves.0] -relwidth [expr 1 / $octaves.0]}}}}
  
  #> kbd frame
  #. -height 100 -width 60
! #. #octaves 6 #bg black #fg white
  
! ::ix::kbd .- .| .#octaves .#bg .#fg

Index: mat-demo.pd
===================================================================
RCS file: /cvsroot/pure-data/extensions/gui/ix/mat-demo.pd,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** mat-demo.pd	17 May 2005 07:47:15 -0000	1.3
--- mat-demo.pd	24 May 2005 22:28:08 -0000	1.4
***************
*** 1,31 ****
! #N canvas 25 146 920 1008 12;
! #X obj 17 12 widget mat n1 #w 881 #bg white #divX 8 #divY 5 #h 740
  #Yb 1 #Ya 88 #qYv 2 #qYa 8;
! #X msg 1080 -23 -height 26 -width 26 -bg gray95;
! #X msg 19 -10 redefine;
! #X msg 229 -9 #w \$1;
! #X msg 193 -10 #h \$1;
! #X floatatom 159 -11 5 0 0 0 - - -;
! #X floatatom 127 -9 5 0 0 0 - - -;
! #X obj 84 767 widget kbd k1 #octaves 7 -width 483 -height 76;
! #X obj 85 846 unpack 0 0;
! #X obj 134 868 * 127;
! #X obj 85 892 pack 0 0;
! #X msg 447 679 #w \$1 \, #h \$1;
! #X floatatom 453 662 5 0 0 0 - - -;
! #X obj 85 867 + 36;
! #X obj 574 858 rp ss s1;
! #X obj 632 787 rr ss;
! #X obj 632 768 rg;
! #X obj 17 761 route note;
! #X msg 317 -8 #Ya 1 \, #Yb 128 \, #qYv 8;
! #X msg 460 -9 #Ya 88 \, Yb 24 \, #qYv 2;
! #X obj 9 826 unpack f f f;
! #X obj 37 861 * 127;
! #X obj 16 891 pack f f f;
! #X obj 18 948 print note;
! #X obj 73 917 makenote 99 250;
! #X obj 88 948 noteout;
! #X connect 0 0 17 0;
  #X connect 2 0 0 0;
  #X connect 3 0 0 0;
--- 1,40 ----
! #N canvas 25 0 920 1029 12;
! #X obj 17 22 widget mat n1 #w 881 #bg white #divX 8 #divY 5 #h 740
  #Yb 1 #Ya 88 #qYv 2 #qYa 8;
! #X msg 1080 -13 -height 26 -width 26 -bg gray95;
! #X msg 19 0 redefine;
! #X msg 229 1 #w \$1;
! #X msg 193 0 #h \$1;
! #X floatatom 159 -1 5 0 0 0 - - -;
! #X floatatom 127 1 5 0 0 0 - - -;
! #X obj 121 879 * 127;
! #X msg 447 689 #w \$1 \, #h \$1;
! #X floatatom 453 672 5 0 0 0 - - -;
! #X obj 85 877 + 36;
! #X obj 577 798 rr ss;
! #X obj 577 779 rg;
! #X obj 17 771 route note;
! #X msg 460 1 #Ya 88 \, Yb 24 \, #qYv 2;
! #X obj 9 836 unpack f f f;
! #X obj 37 871 * 127;
! #X obj 16 901 pack f f f;
! #X obj 18 958 print note;
! #X obj 73 927 makenote 99 250;
! #X obj 92 961 noteout;
! #X msg 317 2 #Ya 1 \, #Yb 128 \, #qYv 8;
! #X obj 535 833 rp ss kbd;
! #X obj 591 833 rp ss kb2;
! #X obj 109 775 widget kbd k1 #bg blue #fg green -height 32;
! #X obj 207 823 widget kbd k2 #bg blue #fg green -height 32;
! #X obj 97 854 unpack 0 0;
! #X obj 98 897 pack 0 0 1;
! #X obj 211 894 * 127;
! #X obj 175 892 + 36;
! #X obj 187 869 unpack 0 0;
! #X obj 188 912 pack 0 0 2;
! #X msg 283 874 redefine;
! #X msg 414 885 #bg blue \, #fg green;
! #X obj 115 818 print a;
! #X connect 0 0 13 0;
  #X connect 2 0 0 0;
  #X connect 3 0 0 0;
***************
*** 33,55 ****
  #X connect 5 0 3 0;
  #X connect 6 0 4 0;
! #X connect 7 0 8 0;
! #X connect 7 0 14 0;
! #X connect 8 0 13 0;
! #X connect 8 1 9 0;
! #X connect 9 0 10 1;
! #X connect 10 0 25 0;
  #X connect 12 0 11 0;
! #X connect 13 0 10 0;
! #X connect 14 0 7 0;
! #X connect 16 0 15 0;
! #X connect 17 0 20 0;
! #X connect 18 0 0 0;
! #X connect 19 0 0 0;
! #X connect 20 0 22 0;
! #X connect 20 1 21 0;
! #X connect 20 2 22 2;
! #X connect 21 0 22 1;
! #X connect 22 0 23 0;
! #X connect 22 0 24 0;
! #X connect 24 0 25 0;
! #X connect 24 1 25 1;
--- 42,73 ----
  #X connect 5 0 3 0;
  #X connect 6 0 4 0;
! #X connect 7 0 27 1;
! #X connect 9 0 8 0;
! #X connect 10 0 27 0;
  #X connect 12 0 11 0;
! #X connect 13 0 15 0;
! #X connect 14 0 0 0;
! #X connect 15 0 17 0;
! #X connect 15 1 16 0;
! #X connect 15 2 17 2;
! #X connect 16 0 17 1;
! #X connect 17 0 18 0;
! #X connect 17 0 19 0;
! #X connect 19 0 20 0;
! #X connect 19 1 20 1;
! #X connect 21 0 0 0;
! #X connect 24 0 26 0;
! #X connect 24 0 34 0;
! #X connect 25 0 30 0;
! #X connect 26 0 10 0;
! #X connect 26 1 7 0;
! #X connect 27 0 20 0;
! #X connect 28 0 31 1;
! #X connect 29 0 31 0;
! #X connect 30 0 29 0;
! #X connect 30 1 28 0;
! #X connect 31 0 20 0;
! #X connect 32 0 24 0;
! #X connect 32 0 25 0;
! #X connect 33 0 25 0;
! #X connect 33 0 24 0;





More information about the Pd-cvs mailing list