summaryrefslogtreecommitdiffstats
path: root/library/demos/arrow.tcl
diff options
context:
space:
mode:
Diffstat (limited to 'library/demos/arrow.tcl')
-rw-r--r--library/demos/arrow.tcl124
1 files changed, 63 insertions, 61 deletions
diff --git a/library/demos/arrow.tcl b/library/demos/arrow.tcl
index 5011f6f..af367f1 100644
--- a/library/demos/arrow.tcl
+++ b/library/demos/arrow.tcl
@@ -18,13 +18,13 @@ package require Tk
# Arguments:
# c - Name of the canvas widget.
-proc arrowSetup c {
+proc arrowSetup {c} {
upvar #0 demo_arrowInfo v
# Remember the current box, if there is one.
set tags [$c gettags current]
- if {$tags != ""} {
+ if {$tags ne ""} {
set cur [lindex $tags [lsearch -glob $tags box?]]
} else {
set cur ""
@@ -33,81 +33,81 @@ proc arrowSetup c {
# Create the arrow and outline.
$c delete all
- eval {$c create line $v(x1) $v(y) $v(x2) $v(y) -arrow last \
- -width [expr {10*$v(width)}] -arrowshape [list \
- [expr {10*$v(a)}] [expr {10*$v(b)}] [expr {10*$v(c)}]]} \
- $v(bigLineStyle)
- set xtip [expr {$v(x2)-10*$v(b)}]
- set deltaY [expr {10*$v(c)+5*$v(width)}]
- $c create line $v(x2) $v(y) $xtip [expr {$v(y)+$deltaY}] \
- [expr {$v(x2)-10*$v(a)}] $v(y) $xtip [expr {$v(y)-$deltaY}] \
+ $c create line $v(x1) $v(y) $v(x2) $v(y) -arrow last \
+ -width [expr {10 * $v(width)}] \
+ -arrowshape [list [expr {10 * $v(a)}] [expr {10 * $v(b)}] [expr {10 * $v(c)}]] \
+ {*}$v(bigLineStyle)
+ set xtip [expr {$v(x2) - (10 * $v(b))}]
+ set deltaY [expr {(10 * $v(c)) + (5 * $v(width))}]
+ $c create line $v(x2) $v(y) $xtip [expr {$v(y) + $deltaY}] \
+ [expr {$v(x2) - (10 * $v(a))}] $v(y) $xtip [expr {$v(y) - $deltaY}] \
$v(x2) $v(y) -width 2 -capstyle round -joinstyle round
# Create the boxes for reshaping the line and arrowhead.
- eval {$c create rect [expr {$v(x2)-10*$v(a)-5}] [expr {$v(y)-5}] \
- [expr {$v(x2)-10*$v(a)+5}] [expr {$v(y)+5}] \
- -tags {box1 box}} $v(boxStyle)
- eval {$c create rect [expr {$xtip-5}] [expr {$v(y)-$deltaY-5}] \
- [expr {$xtip+5}] [expr {$v(y)-$deltaY+5}] \
- -tags {box2 box}} $v(boxStyle)
- eval {$c create rect [expr {$v(x1)-5}] [expr {$v(y)-5*$v(width)-5}] \
- [expr {$v(x1)+5}] [expr {$v(y)-5*$v(width)+5}] \
- -tags {box3 box}} $v(boxStyle)
- if {$cur != ""} {
- eval $c itemconfigure $cur $v(activeStyle)
+ $c create rect [expr {$v(x2) - (10 * $v(a)) - 5}] [expr {$v(y) - 5}] \
+ [expr {$v(x2) - (10 * $v(a)) + 5}] [expr {$v(y) + 5}] \
+ -tags {box1 box} {*}$v(boxStyle)
+ $c create rect [expr {$xtip - 5}] [expr {$v(y) - $deltaY - 5}] \
+ [expr {$xtip + 5}] [expr {($v(y) - $deltaY) + 5}] \
+ -tags {box2 box} {*}$v(boxStyle)
+ $c create rect [expr {$v(x1) - 5}] [expr {$v(y) - (5 * $v(width)) - 5}] \
+ [expr {$v(x1) + 5}] [expr {$v(y) - (5 * $v(width)) + 5}] \
+ -tags {box3 box} {*}$v(boxStyle)
+ if {$cur ne ""} {
+ $c itemconfigure $cur {*}$v(activeStyle)
}
# Create three arrows in actual size with the same parameters
- $c create line [expr {$v(x2)+50}] 0 [expr {$v(x2)+50}] 1000 \
+ $c create line [expr {$v(x2) + 50}] 0 [expr {$v(x2) + 50}] 1000 \
-width 2
- set tmp [expr {$v(x2)+100}]
- $c create line $tmp [expr {$v(y)-125}] $tmp [expr {$v(y)-75}] \
+ set tmp [expr {$v(x2) + 100}]
+ $c create line $tmp [expr {$v(y) - 125}] $tmp [expr {$v(y) - 75}] \
-width $v(width) \
-arrow both -arrowshape "$v(a) $v(b) $v(c)"
- $c create line [expr {$tmp-25}] $v(y) [expr {$tmp+25}] $v(y) \
+ $c create line [expr {$tmp - 25}] $v(y) [expr {$tmp + 25}] $v(y) \
-width $v(width) \
-arrow both -arrowshape "$v(a) $v(b) $v(c)"
- $c create line [expr {$tmp-25}] [expr {$v(y)+75}] [expr {$tmp+25}] \
- [expr {$v(y)+125}] -width $v(width) \
+ $c create line [expr {$tmp - 25}] [expr {$v(y) + 75}] [expr {$tmp + 25}] \
+ [expr {$v(y) + 125}] -width $v(width) \
-arrow both -arrowshape "$v(a) $v(b) $v(c)"
# Create a bunch of other arrows and text items showing the
# current dimensions.
- set tmp [expr {$v(x2)+10}]
- $c create line $tmp [expr {$v(y)-5*$v(width)}] \
- $tmp [expr {$v(y)-$deltaY}] \
+ set tmp [expr {$v(x2) + 10}]
+ $c create line $tmp [expr {$v(y) - (5 * $v(width))}] \
+ $tmp [expr {$v(y) - $deltaY}] \
-arrow both -arrowshape $v(smallTips)
- $c create text [expr {$v(x2)+15}] [expr {$v(y)-$deltaY+5*$v(c)}] \
+ $c create text [expr {$v(x2) + 15}] [expr {($v(y) - $deltaY) + (5 * $v(c))}] \
-text $v(c) -anchor w
- set tmp [expr {$v(x1)-10}]
- $c create line $tmp [expr {$v(y)-5*$v(width)}] \
- $tmp [expr {$v(y)+5*$v(width)}] \
+ set tmp [expr {$v(x1) - 10}]
+ $c create line $tmp [expr {$v(y) - (5 * $v(width))}] \
+ $tmp [expr {$v(y) + (5 * $v(width))}] \
-arrow both -arrowshape $v(smallTips)
- $c create text [expr {$v(x1)-15}] $v(y) -text $v(width) -anchor e
- set tmp [expr {$v(y)+5*$v(width)+10*$v(c)+10}]
- $c create line [expr {$v(x2)-10*$v(a)}] $tmp $v(x2) $tmp \
+ $c create text [expr {$v(x1) - 15}] $v(y) -text $v(width) -anchor e
+ set tmp [expr {$v(y) + (5 * $v(width)) + (10 * $v(c)) + 10}]
+ $c create line [expr {$v(x2) - (10 * $v(a))}] $tmp $v(x2) $tmp \
-arrow both -arrowshape $v(smallTips)
- $c create text [expr {$v(x2)-5*$v(a)}] [expr {$tmp+5}] \
+ $c create text [expr {$v(x2) - (5 * $v(a))}] [expr {$tmp + 5}] \
-text $v(a) -anchor n
- set tmp [expr {$tmp+25}]
- $c create line [expr {$v(x2)-10*$v(b)}] $tmp $v(x2) $tmp \
+ set tmp [expr {$tmp + 25}]
+ $c create line [expr {$v(x2) - (10 * $v(b))}] $tmp $v(x2) $tmp \
-arrow both -arrowshape $v(smallTips)
- $c create text [expr {$v(x2)-5*$v(b)}] [expr {$tmp+5}] \
+ $c create text [expr {$v(x2) - (5 * $v(b))}] [expr {$tmp + 5}] \
-text $v(b) -anchor n
$c create text $v(x1) 310 -text "-width $v(width)" \
- -anchor w -font {Helvetica 18}
+ -anchor w -font "Helvetica 18"
$c create text $v(x1) 330 -text "-arrowshape {$v(a) $v(b) $v(c)}" \
- -anchor w -font {Helvetica 18}
+ -anchor w -font "Helvetica 18"
incr v(count)
}
set w .arrow
-catch {destroy $w}
+destroy $w
toplevel $w
wm title $w "Arrowhead Editor Demonstration"
wm iconname $w "arrow"
@@ -124,16 +124,18 @@ pack $btns -side bottom -fill x
canvas $c -width 500 -height 350 -relief sunken -borderwidth 2
pack $c -expand yes -fill both
-set demo_arrowInfo(a) 8
-set demo_arrowInfo(b) 10
-set demo_arrowInfo(c) 3
-set demo_arrowInfo(width) 2
-set demo_arrowInfo(motionProc) arrowMoveNull
-set demo_arrowInfo(x1) 40
-set demo_arrowInfo(x2) 350
-set demo_arrowInfo(y) 150
-set demo_arrowInfo(smallTips) {5 5 2}
-set demo_arrowInfo(count) 0
+array set demo_arrowInfo {
+ a 8
+ b 10
+ c 3
+ width 2
+ motionProc arrowMoveNull
+ x1 40
+ x2 350
+ y 150
+ smallTips "5 5 2"
+ count 0
+}
if {[winfo depth $c] > 1} {
set demo_arrowInfo(bigLineStyle) "-fill SkyBlue1"
set demo_arrowInfo(boxStyle) "-fill {} -outline black -width 1"
@@ -167,7 +169,7 @@ bind $c <Any-ButtonRelease-1> "arrowSetup $c"
proc arrowMove1 {c x y} {
upvar #0 demo_arrowInfo v
- set newA [expr {($v(x2)+5-round([$c canvasx $x]))/10}]
+ set newA [expr {(($v(x2) + 5) - ( round ([$c canvasx $x]))) / 10}]
if {$newA < 0} {
set newA 0
}
@@ -175,7 +177,7 @@ proc arrowMove1 {c x y} {
set newA 25
}
if {$newA != $v(a)} {
- $c move box1 [expr {10*($v(a)-$newA)}] 0
+ $c move box1 [expr {10 * ($v(a) - $newA)}] 0
set v(a) $newA
}
}
@@ -191,14 +193,14 @@ proc arrowMove1 {c x y} {
proc arrowMove2 {c x y} {
upvar #0 demo_arrowInfo v
- set newB [expr {($v(x2)+5-round([$c canvasx $x]))/10}]
+ set newB [expr {(($v(x2) + 5) - ( round ([$c canvasx $x]))) / 10}]
if {$newB < 0} {
set newB 0
}
if {$newB > 25} {
set newB 25
}
- set newC [expr {($v(y)+5-round([$c canvasy $y])-5*$v(width))/10}]
+ set newC [expr {(($v(y) + 5) - ( round ([$c canvasy $y])) - (5 * $v(width))) / 10}]
if {$newC < 0} {
set newC 0
}
@@ -206,7 +208,7 @@ proc arrowMove2 {c x y} {
set newC 20
}
if {($newB != $v(b)) || ($newC != $v(c))} {
- $c move box2 [expr {10*($v(b)-$newB)}] [expr {10*($v(c)-$newC)}]
+ $c move box2 [expr {10 * ($v(b) - $newB)}] [expr {10 * ($v(c) - $newC)}]
set v(b) $newB
set v(c) $newC
}
@@ -223,7 +225,7 @@ proc arrowMove2 {c x y} {
proc arrowMove3 {c x y} {
upvar #0 demo_arrowInfo v
- set newWidth [expr {($v(y)+2-round([$c canvasy $y]))/5}]
+ set newWidth [expr {(($v(y) + 2) - ( round ([$c canvasy $y]))) / 5}]
if {$newWidth < 0} {
set newWidth 0
}
@@ -231,7 +233,7 @@ proc arrowMove3 {c x y} {
set newWidth 20
}
if {$newWidth != $v(width)} {
- $c move box3 0 [expr {5*($v(width)-$newWidth)}]
+ $c move box3 0 [expr {5 * ($v(width) - $newWidth)}]
set v(width) $newWidth
}
}