Show images alternating between two directories.
[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 use Display::Config;
14 use Display::Notifications;
15
16 my $full_screen = 1;
17
18 GetOptions(
19   'full|f!' => \$full_screen,
20 );
21
22 my $session = POE::Session->create (
23   inline_states => {
24     _start =>  \&start,
25   },
26 );
27
28 $poe_kernel->run;
29
30 #Clutter->main();
31
32 sub start {
33   my ( $kernel, $session ) = @_[ KERNEL, SESSION ];
34
35   $kernel->alias_set('display');
36
37   my $stage = Clutter::Stage->get_default();
38   $stage->set_color(Clutter::Color->parse('Black'));
39   $stage->signal_connect('key-press-event' => sub { exit; });
40
41   if ($full_screen) {
42     $stage->fullscreen;
43   } else {
44     $stage->set_size(800, 600);
45   }
46
47   my $config = Display::Config->new();
48   my $notifications = Display::Notifications->new($kernel, $session, $stage);
49
50   my @modules = loadModules($kernel, $session, $stage, $config, $notifications);
51
52   $stage->show_all();
53 }
54
55
56 my @modules;
57 sub loadModules {
58   my ($kernel, $session, $stage, $config, $notifications) = @_;
59
60   my @plugins = plugins();
61   if (defined $config->{_config}{'background'}) {
62     warn "background module is set\n";
63     warn "Considering background: " . join(", ", grep /$config->{_config}{'background'}/, @plugins) . "\n";
64     load_plugin($kernel, $session, $stage, $config, $notifications, grep /$config->{_config}{'background'}/, @plugins );
65   }
66
67   for my $module (@{ $config->{_config}{'enabled'} }) {
68     warn "Considering $module: " . join(", ", grep /$module/, @plugins) . "\n";
69     load_plugin($kernel, $session, $stage, $config, $notifications, grep /$module/, @plugins);
70   }
71 }
72
73 sub load_plugin {
74   my ($kernel, $session, $stage, $config, $notifications, @plugin) = @_;
75
76   for my $module (@plugin) {
77     eval "use $module";
78     if ($@) {
79       warn "Failed to load plugin: $module ($@)\n";
80     } else {
81       push @modules, $module->new($kernel, $session, $stage, $config, $notifications);
82     }
83   }
84
85
86 sub linear {
87   my $alpha    = shift;
88   my $timeline = $alpha->get_timeline();
89
90   return int($timeline->get_progress() * Clutter::Alpha->MAX_ALPHA);
91 }
92
93 sub smoothstep_dec {
94   return Clutter::Alpha->smoothstep_dec($_[0]);
95 }
96 sub smoothstep_inc {
97   return Clutter::Alpha->smoothstep_inc($_[0]);
98 }
99