4 # --------------------------------------------------------------------------
5 # Starting with Tcl 8.x, the BLT commands are stored in their own
6 # namespace called "blt". The idea is to prevent name clashes with
7 # Tcl commands and variables from other packages, such as a "table"
8 # command in two different packages.
10 # You can access the BLT commands in a couple of ways. You can prefix
11 # all the BLT commands with the namespace qualifier "blt::"
14 # blt::table . .g -resize both
16 # or you can import all the command into the global namespace.
18 # namespace import blt::*
20 # table . .g -resize both
22 # --------------------------------------------------------------------------
23 if { $tcl_version >= 8.0 } {
24 namespace import blt::*
25 namespace import -force blt::tile::*
27 source scripts/demo.tcl
28 bltdebug watch ResizeEpsItem
30 proc MoveEpsItem { canvas tagName x y } {
32 $canvas move $tagName [expr $x - $lastX] [expr $y - $lastY]
33 set lastX $x; set lastY $y
36 proc GetEpsBBox { canvas tagName } {
37 global left top right bottom
38 set anchor [$canvas coords $tagName-image]
39 set left [lindex $anchor 0]
40 set top [lindex $anchor 1]
41 set width [$canvas itemcget $tagName-image -width]
42 set height [$canvas itemcget $tagName-image -height]
43 set right [expr $left + $width]
44 set bottom [expr $top + $height]
47 proc SaveImageCoords { canvas x y } {
51 $canvas configure -cursor sb_h_double_arrow
57 se bottom_right_corner
61 proc StartResize { canvas tagName x y anchor } {
62 global left top right bottom image
64 GetEpsBBox $canvas $tagName
65 $canvas itemconfigure $tagName-image -quick yes
66 $canvas itemconfigure $tagName-grip -fill red
67 $canvas create line $left $top $right $bottom \
68 -tags "$tagName $tagName-cross $tagName-l1" \
71 $canvas create line $left $bottom $right $top \
72 -tags "$tagName $tagName-cross $tagName-l2" \
74 $canvas raise $tagName-grip
76 $canvas configure -cursor $cursors($anchor)
82 proc EndResize { canvas tagName x y anchor } {
83 $canvas itemconfigure $tagName-image -quick no \
85 ResizeEpsItem $canvas $anchor $tagName $x $y
86 $canvas itemconfigure $tagName-grip -fill green
87 $canvas delete $tagName-cross
88 $canvas configure -cursor ""
91 proc ResetGrips { canvas tagName } {
93 global left top right bottom
95 GetEpsBBox $canvas $tagName
96 $canvas coords $tagName-nw \
97 $left $top [expr $left + $gripSize] [expr $top + $gripSize]
98 $canvas coords $tagName-se \
99 [expr $right - $gripSize] [expr $bottom - $gripSize] $right $bottom
100 $canvas coords $tagName-ne \
101 [expr $right - $gripSize] [expr $top + $gripSize] $right $top
102 $canvas coords $tagName-sw \
103 $left $bottom [expr $left + $gripSize] [expr $bottom - $gripSize]
104 $canvas coords $tagName-l1 $left $top $right $bottom
105 $canvas coords $tagName-l2 $left $bottom $right $top
108 proc ResizeEpsItem { canvas anchor tagName x y } {
109 global lastX lastY left top right bottom
111 GetEpsBBox $canvas $tagName
114 set left $x ; set bottom $y
115 set cursor bottom_left_corner
118 set right $x ; set top $y
119 set cursor top_right_corner
122 set right $x ; set bottom $y
123 set cursor bottom_right_corner
126 set left $x ; set top $y
127 set cursor top_left_corner
130 error "anchor can't be $anchor"
133 set w [expr $right - $left]
134 set h [expr $bottom - $top]
137 append options "-width $w "
140 append options "-height $h "
142 $canvas coords $tagName-image $left $top
143 eval $canvas itemconfigure $tagName-image $options
144 GetEpsBBox $canvas $tagName
145 ResetGrips $canvas $tagName
151 proc MakeEps { canvas {epsFile ""} {imageFile ""} } {
152 global numGroups id gripSize image
154 # set image [image create photo -width 200 -height 200]
155 # if { $imageFile != "" } {
156 # $image configure -file $imageFile
158 set tagName "epsGroup[incr numGroups]"
159 $canvas create eps 20 20 \
162 -tags "$tagName $tagName-image" \
166 -font *helvetica*24* \
175 GetEpsBBox $canvas $tagName
176 global left top right bottom
177 $canvas create rectangle \
178 $left $top [expr $left + $gripSize] [expr $top + $gripSize] \
179 -tags "$tagName $tagName-grip $tagName-nw" \
180 -fill red -outline ""
181 $canvas create rectangle \
182 [expr $right - $gripSize] [expr $bottom - $gripSize] $right $bottom \
183 -tags "$tagName $tagName-grip $tagName-se" \
184 -fill red -outline ""
185 $canvas create rectangle \
186 [expr $right - $gripSize] [expr $top + $gripSize] $right $top \
187 -tags "$tagName $tagName-grip $tagName-ne" \
188 -fill red -outline ""
189 $canvas create rectangle \
190 $left $bottom [expr $left + $gripSize] [expr $bottom - $gripSize] \
191 -tags "$tagName $tagName-grip $tagName-sw" \
192 -fill red -outline ""
194 $canvas bind $tagName <ButtonRelease-1> \
195 "$canvas configure -cursor {}"
196 $canvas bind $tagName-image <ButtonPress-1> \
197 "SaveImageCoords $canvas %x %y"
198 $canvas bind $tagName-image <B1-Motion> \
199 "MoveEpsItem $canvas $tagName %x %y"
201 foreach grip { sw ne se nw } {
202 $canvas bind $tagName-$grip <ButtonPress-1> \
203 "StartResize $canvas $tagName %x %y $grip"
204 $canvas bind $tagName-$grip <B1-Motion> \
205 "ResizeEpsItem $canvas $grip $tagName %x %y"
206 $canvas bind $tagName-$grip <ButtonRelease-1> \
207 "EndResize $canvas $tagName %x %y $grip"
208 $canvas raise $tagName-$grip
212 source scripts/stipples.tcl
215 # Script to test the BLT "eps" canvas item.
218 canvas .layout -bg white
220 button .print -text "Print" -command {
223 .layout postscript -file eps.ps
227 button .quit -text "Quit" -command {
232 0,0 .layout -fill both -cspan 2 \
236 table configure . r1 -resize none
238 foreach file { ./images/out.ps xy.ps test.ps } {
239 if { [file exists $file] } {
240 MakeEps .layout $file
244 .layout create rectangle 10 10 50 50 -fill blue -outline white
246 .layout create text 200 200 \
247 -text "This is a text item" \
252 .layout create rectangle 50 50 150 150 -fill green -outline red
254 wm colormapwindows . .layout
256 .layout configure -scrollregion [.layout bbox all]