From: Martin Mares Date: Fri, 26 Oct 2007 19:04:35 +0000 (+0200) Subject: Added a skeleton of the animator module. X-Git-Url: http://mj.ucw.cz/gitweb/?a=commitdiff_plain;h=a4d1b189d5747d8a8c618c64189e914f17b0bcca;p=anim.git Added a skeleton of the animator module. --- diff --git a/AA.pm b/AA.pm index f402f41..631958a 100644 --- a/AA.pm +++ b/AA.pm @@ -35,10 +35,10 @@ sub calculate($) { 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}; } } diff --git a/AA/Anim.pm b/AA/Anim.pm new file mode 100644 index 0000000..a399d6b --- /dev/null +++ b/AA/Anim.pm @@ -0,0 +1,28 @@ +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; diff --git a/a.pl b/a.pl index 3c87c91..59829c7 100755 --- a/a.pl +++ b/a.pl @@ -9,6 +9,7 @@ use Cairo; use AA; use AA::Graph; use AA::Net; +use AA::Anim; my $v = AA::NetV->new('v'); $v->Set('x', 100); @@ -16,7 +17,7 @@ $v->Set('y0', 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'); @@ -80,11 +81,15 @@ sub draw($) { } 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) { @@ -101,16 +106,20 @@ $area->signal_connect('key-press-event' => sub { 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;