#!/usr/bin/perl use strict; use warnings; use Gtk2 '-init'; use LWP::Simple; # cheap webget, no error reporting if( ! -e 'earth.jpg' and ! -e 'moon.jpg'){ print "downloading test images, please wait\n"; foreach my $localfile('earth.jpg','moon.jpg'){ mirror( "http://zentara.net/$localfile", $localfile ); } } my $mw = Gtk2::Window->new; $mw->signal_connect('destroy', sub { Gtk2->main_quit }); my $vp = Gtk2::Viewport->new(undef, undef); $mw->add($vp); my $pixbuf = Gtk2::Gdk::Pixbuf->new_from_file_at_scale ('earth.jpg', 600,600,0); my $pixbufa = $pixbuf->copy(); #my ($x, $y) = ($pixbufa->get_width, $pixbufa->get_height); #print "$x $y\n"; my $pixbuf1 = Gtk2::Gdk::Pixbuf->new_from_file_at_scale ('moon.jpg', 600,600,0); my $pixbufb = $pixbuf1->copy(); #my ($x1, $y1) = ($pixbufb->get_width, $pixbufb->get_height); #print "$x1 $y1\n"; #$pixbuf1->composite ($pixbuf, $dest_x, $dest_y, $dest_width, $dest_height, # $offset_x, $offset_y, $scale_x, $scale_y, $interp_type, $overall_alpha) # start with base image my $toggle = 5; my $alpha = 0; $pixbufb->composite ($pixbufa, 0, 0, 600, 600, 0, 0, 1, 1, 'nearest', $alpha); # 0 <= alpha <= 255 my $image = Gtk2::Image->new_from_pixbuf ($pixbufa); $vp->add($image); $mw->set_title("fade demo"); $mw->show_all(); my $id = Glib::Timeout->add (100, \&sequence); Gtk2->main; sub sequence{ $alpha += $toggle; print "$alpha\n"; if ($alpha == 255){ $toggle = -5 } if ($alpha == 0){ $toggle = 5 } $pixbufb->composite ($pixbufa, 0, 0, 600, 600, 0, 0, 1, 1, 'nearest', $alpha); # 0 <= alpha <= 255 $image->set_from_pixbuf ($pixbufa); Gtk2->main_iteration while Gtk2->events_pending; # prevents accumulation of pixbuf changes $pixbufa = $pixbuf->copy(); return 1; }