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