my $u_frame;
my $u_direction;
my @u_scenes = ();
+my @u_last_frame = ();
my $window;
my $cairo;
$pixmap = Gtk2::Gdk::Pixmap->new($win, $pixw, $pixh, $d);
$cairo = Gtk2::Gdk::Cairo::Context->create($pixmap);
- $cairo->select_font_face('URW Palladio L', 'normal', 'normal');
my $scale = $pixw/1024;
$cairo->scale($scale, $scale);
}
# FIXME: the timer still runs
if (@u_scenes) {
if ($u_direction > 0) {
- if ($u_frame < @{$u_scenes[$u_scene]}-1) {
+ if ($u_frame < $u_last_frame[$u_scene]) {
$u_frame++;
- } elsif ($movie && $u_scene < @u_scenes - 1) {
+ } elsif ($u_scene < @u_scenes - 1) {
$u_scene++;
$u_frame = 0;
}
+ if ($u_frame == $u_last_frame[$u_scene]) {
+ $u_direction = 0 unless $movie;
+ }
} elsif ($u_direction < 0) {
if ($u_frame) {
$u_frame--;
- } elsif ($movie && $u_scene) {
+ } elsif ($u_scene) {
$u_scene--;
- $u_frame = @{$u_scenes[$u_scene]} - 1;
+ $u_frame = $u_last_frame[$u_scene];
+ $u_direction = 0 unless $movie;
}
}
return if ($u_scene == $last_scene && $u_frame == $last_frame);
}
} elsif ($k eq "space" || $k eq "Right" || $k eq "Page_Down") {
if (@u_scenes) {
- if ($u_direction > 0 && $u_scene+1 < @u_scenes) {
- $u_scene++;
- $u_frame = 0;
+ if ($stopped || $k eq "Page_Down") {
+ if ($u_scene+1 < @u_scenes) {
+ $u_scene++;
+ $u_frame = $u_last_frame[$u_scene];
+ }
+ $u_direction = 0;
+ } elsif ($u_direction > 0) {
+ $u_frame = $u_last_frame[$u_scene];
+ $u_direction = 0;
+ } else {
+ $u_direction = 1;
}
- $u_direction = 1;
draw(0);
} else {
while (AA::Anim->step) { AA->calculate; }
}
}
} elsif ($k eq "BackSpace" || $k eq "Left" || $k eq "Page_Up") {
- if (@u_scenes && $u_scene) {
- if (!$u_frame || $u_direction < 0) {
- $u_scene--;
- $u_frame = @{$u_scenes[$u_scene]}-1;
+ if (@u_scenes) {
+ if ($stopped || $k eq "Page_Up") {
+ if ($u_scene > 0) {
+ $u_scene--;
+ $u_frame = $u_last_frame[$u_scene];
+ }
+ $u_direction = 0;
+ } elsif ($u_direction < 0) {
+ $u_frame = 0;
+ } else {
+ $u_direction = -1;
}
- $u_direction = -1;
draw(0);
}
} elsif ($k eq "Home" || $k eq "0") {
if (@u_scenes) {
$u_scene = 0;
$u_frame = 0;
- $u_direction = 1;
+ $u_direction = 0;
draw(0);
}
} elsif ($k eq "End" || $k eq "9") {
if (@u_scenes) {
$u_scene = $#u_scenes;
- $u_frame = @{$u_scenes[$u_scene]}-1;
- $u_direction = 1;
+ $u_frame = $u_last_frame[$u_scene];
+ $u_direction = 0;
draw(0);
}
} elsif ($k eq "p") {
$stopped = !$stopped;
+ $u_direction = 0 if $stopped;
print "Stopped is $stopped\n" if $debug;
} elsif ($k eq "m") {
$movie = !$movie;
print "Movie mode is $movie\n" if $debug;
} elsif ($k eq "Return") {
if (@u_scenes) {
- $u_frame = ($u_direction > 0) ? @{$u_scenes[$u_scene]}-1 : 0;
+ $u_frame = ($u_direction > 0) ? $u_last_frame[$u_scene] : 0;
} else {
while (AA::Anim->step) { AA->calculate; }
}
push @$show, AA::Scene->new();
}
push @u_scenes, $show;
+ push @u_last_frame, scalar @$show - 1;
}
print "Ready.\n";
} else {