#!../bltwish

source bltDemo.tcl
bltdebug watch ResizeEpsItem

proc MoveEpsItem { canvas tagName x y } {
    global lastX lastY
    $canvas move $tagName [expr $x - $lastX] [expr $y - $lastY]
    set lastX $x; set lastY $y
}

proc GetEpsBBox { canvas tagName } {
    global xMin yMin xMax yMax
    set anchor [$canvas coords $tagName-image]
    set xMin [lindex $anchor 0]
    set yMin [lindex $anchor 1]
    set width [$canvas itemcget $tagName-image -width]
    set height [$canvas itemcget $tagName-image -height]
    set xMax [expr $xMin + $width]
    set yMax [expr $yMin + $height]
}
    
proc SaveImageCoords { canvas x y } {
    global lastX lastY 
    set lastX $x
    set lastY $y
    $canvas configure -cursor sb_h_double_arrow
}

set cursors(sw) bottom_left_corner
set cursors(ne) top_right_corner
set cursors(se) bottom_right_corner
set cursors(nw) top_left_corner

proc StartResize { canvas tagName x y anchor } {
    global xMin yMin xMax yMax image

    GetEpsBBox $canvas $tagName
    $canvas itemconfigure $tagName-image -quick yes 
    $canvas itemconfigure $tagName-grip -fill red
    $canvas create line $xMin $yMin $xMax $yMax  \
	-tags "$tagName $tagName-cross $tagName-l1" \
	-fill red -width 2

    $canvas create line $xMin $yMax $xMax $yMin \
	-tags "$tagName $tagName-cross $tagName-l2" \
	-fill red  -width 2
    $canvas raise $tagName-grip
    global cursors
    $canvas configure -cursor $cursors($anchor)
    global lastX lastY 
    set lastX $x
    set lastY $y
}

proc EndResize { canvas tagName x y anchor } {
    $canvas itemconfigure $tagName-image -quick no \
        -showimage yes
    ResizeEpsItem $canvas $anchor $tagName $x $y
    $canvas itemconfigure $tagName-grip -fill green
    $canvas delete $tagName-cross
    $canvas configure -cursor ""
}

proc ResetGrips { canvas tagName } {
    global gripSize
    global xMin yMin xMax yMax

    GetEpsBBox $canvas $tagName
    $canvas coords $tagName-nw \
	$xMin $yMin [expr $xMin + $gripSize] [expr $yMin + $gripSize] 
    $canvas coords $tagName-se \
	[expr $xMax - $gripSize] [expr $yMax - $gripSize] $xMax $yMax 
    $canvas coords $tagName-ne \
	[expr $xMax - $gripSize] [expr $yMin + $gripSize] $xMax $yMin 
    $canvas coords $tagName-sw \
	$xMin $yMax [expr $xMin + $gripSize] [expr $yMax - $gripSize] 
    $canvas coords $tagName-l1 $xMin $yMin $xMax $yMax  
    $canvas coords $tagName-l2 $xMin $yMax $xMax $yMin 
}

proc ResizeEpsItem { canvas anchor tagName x y } {
    global lastX lastY xMin yMin xMax yMax 

    GetEpsBBox $canvas $tagName
    switch $anchor {
	sw {
	    set xMin $x ; set yMax $y
	    set cursor bottom_left_corner
	}
	ne {
	    set xMax $x ; set yMin $y
	    set cursor top_right_corner
	}
	se {
	    set xMax $x ; set yMax $y
	    set cursor bottom_right_corner
	}
	nw {
	    set xMin $x ; set yMin $y
	    set cursor top_left_corner
	}
	default {
	    error "anchor can't be $anchor"
	}
    }
    set w [expr $xMax - $xMin]
    set h [expr $yMax - $yMin]
    set options ""
    if { $w > 1 } {
	append options "-width $w "
    }
    if { $h > 1 } {
	append options "-height $h "
    }
    $canvas coords $tagName-image $xMin $yMin
    eval $canvas itemconfigure $tagName-image $options
    GetEpsBBox $canvas $tagName
    ResetGrips $canvas $tagName
}

set numGroups 0
set id 0

proc MakeEps { canvas {epsFile ""} {imageFile ""} } {
    global numGroups id gripSize image

    set image [image create photo -width 200 -height 200]
    if { $imageFile != "" } {
	$image configure -file $imageFile
    }
    set tagName "epsGroup[incr numGroups]"
    $canvas create eps 20 20 \
	-anchor nw \
	-borderwidth 4 \
	-tags "$tagName $tagName-image" \
	-titlecolor white \
	-titlerotate 90 \
	-titleanchor nw \
	-font *helvetica*24* \
	-stipple hobbes \
	-outline orange4 \
	-fill orange \
	-file $epsFile \
	-image $image 
    
    set gripSize 8
    GetEpsBBox $canvas $tagName
    global xMin yMin xMax yMax
    $canvas create rectangle \
	$xMin $yMin [expr $xMin + $gripSize] [expr $yMin + $gripSize] \
	-tags "$tagName $tagName-grip $tagName-nw" \
	-fill red -outline ""
    $canvas create rectangle \
	[expr $xMax - $gripSize] [expr $yMax - $gripSize] $xMax $yMax \
	-tags "$tagName $tagName-grip $tagName-se" \
	-fill red -outline ""
    $canvas create rectangle \
	[expr $xMax - $gripSize] [expr $yMin + $gripSize] $xMax $yMin \
	-tags "$tagName $tagName-grip $tagName-ne" \
	-fill red -outline ""
    $canvas create rectangle \
	$xMin $yMax [expr $xMin + $gripSize] [expr $yMax - $gripSize] \
	-tags "$tagName $tagName-grip $tagName-sw" \
	-fill red -outline ""

    $canvas bind $tagName <ButtonRelease-1> \
	"$canvas configure -cursor {}"
    $canvas bind $tagName-image <ButtonPress-1> \
	"SaveImageCoords $canvas %x %y"
    $canvas bind $tagName-image <B1-Motion> \
	"MoveEpsItem $canvas $tagName %x %y"

    foreach grip { sw ne se nw } {
	$canvas bind $tagName-$grip <ButtonPress-1> \
	    "StartResize $canvas $tagName %x %y $grip"
	$canvas bind $tagName-$grip <B1-Motion> \
	    "ResizeEpsItem $canvas $grip $tagName %x %y"
	$canvas bind $tagName-$grip <ButtonRelease-1> \
	    "EndResize $canvas $tagName %x %y $grip"
	$canvas raise $tagName-$grip
    }
}

source patterns.tcl

#
# Script to test the BLT "eps" canvas item.
# 

canvas .layout

button .print -text "Print" -command {
    wm iconify .
    update
    .layout postscript -file eps.ps 
    wm deiconify .
    update
}
button .quit -text "Quit" -command {
    exit 0
}

table . \
    0,0 .layout -fill both -cspan 2 \
    1,0 .print \
    1,1 .quit \

table configure . r1 -resize none

MakeEps .layout ./images/out.ps
MakeEps .layout xy.ps

.layout create rectangle 10 10 50 50 -fill blue -outline white

.layout create text 200 200 \
    -text "This is a text item" \
    -fill yellow \
    -anchor w \
    -font *helvetica*24*

.layout create rectangle 50 50 150 150 -fill green -outline red

wm colormapwindows . .layout

.layout configure -scrollregion [.layout bbox all]
