Convert to using POE for the event management.
[picture-display.git] / picture.pl
1 #!/usr/bin/perl -w
2
3 use strict;
4 use FindBin;
5 use Module::Pluggable search_path => ['Display::Plugins'];
6 use Clutter qw( :init );
7 use Glib;
8 use POE qw(Loop::Glib);
9 use Getopt::Long;
10
11 use lib "$FindBin::Bin/lib";
12
13 my $full_screen = 1;
14
15 GetOptions(
16   'full|f!' => \$full_screen,
17 );
18
19 my $session = POE::Session->create (
20   inline_states => {
21     _start =>  \&start,
22   },
23 );
24
25 $poe_kernel->run;
26
27 #Clutter->main();
28
29 sub start {
30   my ( $kernel, $session ) = @_[ KERNEL, SESSION ];
31
32   my $stage = Clutter::Stage->get_default();
33   $stage->set_color(Clutter::Color->parse('Black'));
34   $stage->signal_connect('key-press-event' => sub { Clutter->main_quit() });
35
36   if ($full_screen) {
37     $stage->fullscreen;
38   } else {
39     $stage->set_size(800, 600);
40   }
41
42   my @modules = loadModules($kernel, $session, $stage);
43
44   $stage->show_all();
45 }
46
47
48 sub loadModules {
49   my ($kernel, $session, $stage) = @_;
50   my @modules;
51
52   for my $module (plugins()) {
53   warn "Considering $module\n";
54     eval "use $module";
55     if ($@) {
56       warn "Failed to load plugin: $module ($@)\n";
57     } else {
58       push @modules, $module->new($kernel, $session, $stage);
59     }
60   }
61
62   return @modules;
63
64
65 sub linear {
66   my $alpha    = shift;
67   my $timeline = $alpha->get_timeline();
68
69   return int($timeline->get_progress() * Clutter::Alpha->MAX_ALPHA);
70 }
71
72 sub smoothstep_dec {
73   return Clutter::Alpha->smoothstep_dec($_[0]);
74 }
75 sub smoothstep_inc {
76   return Clutter::Alpha->smoothstep_inc($_[0]);
77 }
78