Try the Tk-Canvas-Point module, by Slaven Rezic. It is mostly a proof-of-concept trial module, and not gauranteed to do what
you want. Try this sample code. It makes little circles, but that is just so you can see them, it will do a single pixel.
#!/usr/bin/perl -w
use Tk;
use Tk::Canvas::Point;
use strict;
#adapted from Tk::CanvasPoint by Slaven Rezic
my $mw = MainWindow->new;
my $c = $mw->Canvas->pack(-fill => "both", -expand => 1);
$c->bind("all", "<1>" => sub {
my($c) = @_;
my(@tags) = $c->gettags("current");
warn "Tags of current item: @tags\n";
my(@coords) = $c->coords("current");
warn "Coords of current item: @coords\n";
});
my $tag = "";
$c->bind("all", "<Enter>" => sub {
my($c) = @_;
$tag = ($c->gettags("current"))[0];
});
$c->bind("all", "<Leave>" => sub {
my($c) = @_;
$tag = "";
});
my @p;
$mw->update;
create_points();
$mw->update;
for (1..10) {
delete_last_point();
$mw->update;
}
postscript(0);
$mw->update;
my $f = $mw->Frame->pack;
$mw->Button(-text => "Create points",
-command => sub { create_points() }
)->pack(-side => "left");
$mw->Button(-text => "Delete last point",
-command => sub { delete_last_point() },
)->pack(-side => "left");
$mw->Button(-text => "PS",
-command => sub { postscript(1) })->pack(-side => "left");
$mw->Label(-width => 10, -textvariable => \$tag)->pack;
MainLoop;
sub create_points {
for(1..100) {
my $width = rand(20);
push @p, $c->create('point',
rand($c->width),rand($c->height),
-width => $width,
-activefill => "white",
-activewidth => $width+2,
-fill => [qw(blue red green yellow black white)]->[ran
+d(5)],
-tags => "tag".int(rand(100)),
);
}
}
sub delete_last_point {
$c->delete(pop @p) if @p;
}
sub postscript {
my $display = shift;
my $f = "test.$$.ps";
$c->postscript(-file => $f);
open(F, $f) or die $!;
my($firstline) = <F>;
close F;
system("gv $f &") if $display;
}
__END__
Otherwise, you need to go to SDL to do this. SDL just "blits" stuff to the screen, and there is no object-item associated with it. That is why it is used for games, it can be alot faster. To erase what you previously blited, you write the background color to it's location. Tk is designed to have items, that you can tag, and have mouse and key bindings to it.
| [reply] [d/l] |