Create a new base object for the photo classes which contains common code.
[picture-display.git] / picture.pl
index fc8a632..eb86f14 100755 (executable)
@@ -4,53 +4,96 @@ use strict;
 use FindBin;
 use Module::Pluggable search_path => ['Display::Plugins'];
 use Clutter qw( :init );
+use Glib;
+use POE qw(Loop::Glib);
 use Getopt::Long;
 
 use lib "$FindBin::Bin/lib";
 
+use Display::Config;
+use Display::Notifications;
+
 my $full_screen = 1;
 
 GetOptions(
   'full|f!' => \$full_screen,
 );
 
-my $stage = Clutter::Stage->get_default();
-$stage->set_color(Clutter::Color->parse('Black'));
-$stage->signal_connect('key-press-event' => sub { Clutter->main_quit() });
+my $session = POE::Session->create (
+  inline_states => {
+    _start =>  \&start,
+  },
+);
 
-if ($full_screen) {
-  $stage->fullscreen;
-} else {
-  $stage->set_size(800, 600);
-}
+$poe_kernel->run;
 
-my @modules = loadModules();
+#Clutter->main();
 
-$stage->show_all();
+sub start {
+  my ( $kernel, $session ) = @_[ KERNEL, SESSION ];
 
-Glib::Timeout->add_seconds(30, \&update_screen);
+  $kernel->alias_set('display');
 
-Clutter->main();
+  my $stage = Clutter::Stage->get_default();
+  $stage->set_color(Clutter::Color->parse('Black'));
+  $stage->signal_connect('key-press-event' => sub { exit; });
 
-sub update_screen {
-  for my $module (@modules) {
-    $module->display();
+  if ($full_screen) {
+    $stage->fullscreen;
+  } else {
+    $stage->set_size(800, 600);
   }
+
+  my $config = Display::Config->new();
+  my $notifications = Display::Notifications->new($kernel, $session, $stage);
+
+  my @modules = loadModules($kernel, $session, $stage, $config, $notifications);
+
+  $stage->show_all();
 }
 
+
+my @modules;
 sub loadModules {
-  my @modules;
+  my ($kernel, $session, $stage, $config, $notifications) = @_;
+
+  my @plugins = plugins();
+  if (defined $config->{_config}{'background'}) {
+    warn "background module is set\n";
+    warn "Considering background: " . join(", ", grep /$config->{_config}{'background'}/, @plugins) . "\n";
+    load_plugin($kernel, $session, $stage, $config, $notifications, grep /$config->{_config}{'background'}/, @plugins );
+  }
 
-  for my $module (plugins()) {
-  warn "Considering $module\n";
+  for my $module (@{ $config->{_config}{'enabled'} }) {
+    warn "Considering $module: " . join(", ", grep /$module/, @plugins) . "\n";
+    load_plugin($kernel, $session, $stage, $config, $notifications, grep /$module/, @plugins);
+  }
+}
+
+sub load_plugin {
+  my ($kernel, $session, $stage, $config, $notifications, @plugin) = @_;
+
+  for my $module (@plugin) {
     eval "use $module";
     if ($@) {
-      die "Failed to load plugin: $module ($@)\n";
+      warn "Failed to load plugin: $module ($@)\n";
+    } else {
+      push @modules, $module->new($kernel, $session, $stage, $config, $notifications);
     }
-
-    push @modules, $module->new($stage);
   }
-
-  return @modules;
 } 
 
+sub linear {
+  my $alpha    = shift;
+  my $timeline = $alpha->get_timeline();
+
+  return int($timeline->get_progress() * Clutter::Alpha->MAX_ALPHA);
+}
+
+sub smoothstep_dec {
+  return Clutter::Alpha->smoothstep_dec($_[0]);
+}
+sub smoothstep_inc {
+  return Clutter::Alpha->smoothstep_inc($_[0]);
+}
+