while ($o = shift @pending_recalcs) {
print "Going to recalculate object $o\n" if $debug;
my $pend = $o->{PENDING};
+ delete $o->{PENDING};
foreach my $a (keys %$pend) {
$o->Calc("$a");
}
- delete $o->{PENDING};
}
}
--- /dev/null
+package AA::Anim;
+
+our $timer = AA->new('T');
+$timer->DefSet('T', 0);
+
+sub time($) {
+ return $timer->Get('T');
+}
+
+sub step($) {
+ $timer->Set('T', $timer->Get('T') + 1);
+ AA->calculate;
+}
+
+sub ticker($$$$) {
+ my ($class, $x0, $x1, $dt) = @_;
+ my $t0 = AA::Anim->time;
+ return sub {
+ my $t = AA::Anim->time;
+ if ($t - $t0 >= $dt) {
+ return $x1;
+ } else {
+ return $x0 + ($x1 - $x0) * ($t - $t0)/$dt;
+ }
+ };
+}
+
+1;
use AA;
use AA::Graph;
use AA::Net;
+use AA::Anim;
my $v = AA::NetV->new('v');
$v->Set('x', 100);
$v->Set('label', '1');
my $w = AA::NetV->new('w');
-$w->Set('x', 200);
+$w->Bind('x', AA::Anim->ticker(200, 600, 200));
$w->Set('y0', 100);
$w->Set('label', '2');
}
sub step() {
+ AA::Anim->step;
draw(0);
}
-my $timer = 1;
+my $window = Gtk2::Window->new ('toplevel');
+
+my $timer;
my $stopped = 1;
+my $fullscreen = 0;
$area->signal_connect("expose-event" => sub {
draw(1);
if (!defined $timer) {
Gtk2->main_quit;
} elsif ($k eq "space") {
$stopped = !$stopped;
+ } elsif ($k eq "f") {
+ if ($fullscreen = !$fullscreen) {
+ $window->fullscreen;
+ } else {
+ $window->unfullscreen;
+ }
}
});
-my $window = Gtk2::Window->new ('toplevel');
$window->signal_connect ("delete-event" => sub { Gtk2->main_quit });
$window->set_title("Brum");
$window->set_wmclass("brum", "Brum");
$window->set_default_size(640, 480);
$window->add ($area);
$window->show_all;
-#$window->fullscreen;
Gtk2->main;