]> mj.ucw.cz Git - anim.git/blobdiff - AA/UI.pm
Mrazeni scen a obousmerny posun v GUI.
[anim.git] / AA / UI.pm
index c20318ec9f37b765a2622167ad9f6af6adfbe2e4..0b7af2ecef811eab49debb443ceb615367470ceb 100644 (file)
--- a/AA/UI.pm
+++ b/AA/UI.pm
@@ -3,7 +3,9 @@ package AA::UI;
 sub new($$) {
        my ($class, $name) = @_;
        if ($name eq "") {
-               return AA::UI::GTK->new;
+               return AA::UI::GTK->new(1);
+       } elsif ($name eq "gtk") {
+               return AA::UI::GTK->new(0);
        } elsif ($name =~ /\.pdf$/) {
                return AA::UI::PDF->new($name);
        } elsif ($name =~ /\.png$/) {
@@ -15,15 +17,17 @@ package AA::UI::GTK;
 
 @ISA = ('AA::UI');
 
-sub new($) {
-       my ($class) = @_;
+sub new($$) {
+       my ($class, $mode) = @_;
        my $ui = {
+               MODE => $mode,
        };
        return bless($ui, $class);
 }
 
 my $u_scenario;
 my $u_scene;
+my @u_scenes = ();
 
 my $window;
 my $cairo;
@@ -73,8 +77,16 @@ sub draw($) {
        $cairo->set_source_rgb(0, 0, 0);
        $cairo->fill;
 
-       AA->calculate;
-       AA->draw($cairo);
+       if (@u_scenes) {
+               $u_scenes[$u_scene]->Draw($cairo);
+               $cairo->set_source_rgb(.5, .5, .5);
+               $cairo->set_font_size(15);
+               $cairo->move_to(950,750);
+               $cairo->show_text($u_scene . "/" . $#u_scenes);
+       } else {
+               AA->calculate;
+               AA->draw($cairo);
+       }
 
        $win->draw_drawable($wgc, $pixmap, 0, 0, 0, 0, $pixw, $pixh);
 }
@@ -101,18 +113,38 @@ sub prepare() {
                print "Pressed key $k\n";
                if ($k eq "Escape") {
                        Gtk2->main_quit;
-               } elsif ($k eq "space") {
-                       $stopped = !$stopped;
                } elsif ($k eq "f") {
                        if ($fullscreen = !$fullscreen) {
                                $window->fullscreen;
                        } else {
                                $window->unfullscreen;
                        }
-               } elsif ($k eq "Right") {
-                       if ($u_scene+1 < @$u_scenario) {
-                               $u_scene++;
-                               &{$u_scenario->[$u_scene]};
+               } elsif ($k eq "space" || $k eq "Right" || $k eq "Page_Down") {
+                       if (@u_scenes) {
+                               if ($u_scene+1 < @u_scenes) {
+                                       $u_scene++;
+                                       draw(0);
+                               }
+                       } else {
+                               if ($u_scene+1 < @$u_scenario) {
+                                       $u_scene++;
+                                       &{$u_scenario->[$u_scene]};
+                                       draw(0);
+                               }
+                       }
+               } elsif ($k eq "BackSpace" || $k eq "Left" || $k eq "Page_Up") {
+                       if (@u_scenes && $u_scene) {
+                               $u_scene--;
+                               draw(0);
+                       }
+               } elsif ($k eq "Home" || $k eq "0") {
+                       if (@u_scenes) {
+                               $u_scene = 0;
+                               draw(0);
+                       }
+               } elsif ($k eq "End" || $k eq "9") {
+                       if (@u_scenes) {
+                               $u_scene = $#u_scenes;
                                draw(0);
                        }
                }
@@ -128,9 +160,21 @@ sub prepare() {
 
 sub RunScenario($$$) {
        my ($ui, $scenario, $live) = @_;
-       $u_scenario = $scenario;
+
+       if ($ui->{MODE}) {
+               print "Rendering...\n";
+               foreach my $s (@$scenario) {
+                       &$s;
+                       AA->calculate;
+                       push @u_scenes, AA::Scene->new();
+               }
+               print "Ready.\n";
+       } else {
+               $u_scenario = $scenario;
+               &{$scenario->[0]};
+       }
+
        $u_scene = 0;
-       &{$scenario->[0]};
        prepare();
        Gtk2->main;
 }