use Tk;
use English;
my $w = MainWindow->new();
$w->title('Card Demonstration');
$w->iconname('Card');
# my @ARG = $w;
my $w_msg = $w->Label(-font => '-Adobe-Times-Medium-R-Normal-*-180-*-*-*-*-*-*', -wraplength => '4i',
-justify => 'left', -text => 'Card Demonstratoin');
my $c = $w->Canvas(-relief => 'raised', -width => '450', -height => '300');
my $w_ok = $w->Button(-text => 'Quit', -width => 8, -command => ['destroy', $w]);
$w_msg->pack(-side => 'top', -fill => 'x');
$c->pack(-side => 'top', -fill => 'x');
$w_ok->pack(-side => 'bottom', -pady => '5');
# $c = $w->Canvas(-width=>100,-height=>100);
# $c->pack();
# $w->update();
$dir = "/usr/open/lectures/kono/software/card9";
$imagedir = "$dir/image83x131/";
$imagedir = "$dir/image53x83/";
$imagedir =~ /(\d+)x(\d+)/;
$cx = $1;
$cy = $2;
$x = 20;
$y = 20;
foreach $suit ( 's','h','c','d') {
for($i=1;$i<14;$i++) {
$tag = $suit.$i;
# image cache
$image{$tag} =
$w->Photo($tag, -file=>$imagedir.$tag.".gif",-width=>$cx,-height=>$cy);
$card{$tag} = $c->create('image',$x,$y,-image=>$tag,-anchor=>'nw',-tag=>$tag);
$c->delete($card{$tag});
$card{$tag} = $c->create('rectangle',$x,$y,$x+$cx-1,$y+$cy-1,-tag=>$tag,-fill=>"blue");
$c->addtag('card', 'withtag', $tag);
$x+=10;
}
$y += 40;
$x = 20;
}
print STDOUT "initialzation done\n";
$w->update();
# $c->bind('card', '<Any-Enter>' => [sub{shift->itemconfigure(@ARG)}, qw(current -fill red)]);
# $c->bind('card', '<Any-Leave>' => [sub{shift->itemconfigure(@ARG)}, qw(current -fill SkyBlue2)]);
$c->bind('card', '<1>' => sub{plot_down(@ARG)});
$c->bind('card', '<2>' => sub{hide_card(@ARG)});
$c->bind('card', '<3>' => sub{open_card(@ARG)});
$c->bind('card', '<ButtonRelease-1>' => sub {shift->dtag('selected')});
# $c->Tk::bind('<B1-Motion>' => sub {plot_move(@ARG)});
$c->bind('card', '<B1-Motion>' => sub {plot_move(@ARG)});
# sleep(1);
# $c->itemconfigure($card{'h1'},-fill=>blue);
# $w->update();
# sleep(1);
sub
hide_card {
my($w) = @ARG;
my($card) = ¤t_card($w);
($x,$y) = $w->coords($card{$card});
$w->delete($card{$card});
$card{$card} = $c->create('rectangle',$x,$y,$x+$cx-1,$y+$cy-1,-tag=>$card,-fill=>"blue");
$w->addtag('card', 'withtag', $card);
}
sub
open_card {
my($w) = @ARG;
my($card) = ¤t_card($w);
($x,$y) = $w->coords($card{$card});
$w->delete($card{$card});
$card{$card} =
$w->create('image',$x,$y,-image=>$card,-anchor=>'nw',-tag=>$card);
$w->addtag('card', 'withtag', $card);
$w->raise($card{$card});
}
# use subs qw(plot_down plot_move);
$point{'lastX'} = 0;
$point{'lastY'} = 0;
sub current_card {
my($w) = @ARG;
return (grep(/^[shdc]\d*/,$w->gettags('current')))[0];
}
sub plot_down {
my($w) = @ARG;
my $e = $w->XEvent;
my($x, $y) = ($e->x, $e->y);
my($card) = ¤t_card($w);
$w->dtag('selected');
$w->addtag('selected', withtag => $card);
$w->raise($card);
$point{'lastX'} = $x;
$point{'lastY'} = $y;
} # end plot_down
sub plot_move {
my($w) = @ARG;
my $e = $w->XEvent;
my($x, $y) = ($e->x, $e->y);
$w->move('selected', $x-$point{'lastX'}, $y-$point{'lastY'});
$point{'lastX'} = $x;
$point{'lastY'} = $y;
} # end plot_move
$w->MainLoop();
1;
# end