Gtk2
view release on metacpan - search on metacpan
view release on metacpan or search on metacpan
gtk-demo/images.pl view on Meta::CPAN
$load_timeout = 0;
return FALSE; # uninstall the timeout
}
$pixbuf_loader = undef;
}
} else {
my $error_message = undef;
#
# demo_find_file() looks in the the current directory first,
# so you can run gtk-demo without installing GTK, then looks
# in the location where the file is installed.
#
my $filename;
eval { $filename = main::demo_find_file ("alphatest.png"); };
if ($@) {
$error_message = $@;
} else {
open $image_stream, "<:raw", $filename
or $error_message = "Unable to open image file 'alphatest.png': $!";
}
if (not defined $image_stream) {
error_popup ($window, $error_message);
$load_timeout = 0;
return FALSE; # uninstall the timeout
}
if ($pixbuf_loader) {
$pixbuf_loader->close;
$pixbuf_loader = undef;
}
$pixbuf_loader = Gtk2::Gdk::PixbufLoader->new;
$pixbuf_loader->signal_connect (area_prepared =>
\&progressive_prepared_callback, $image);
$pixbuf_loader->signal_connect (area_updated =>
\&progressive_updated_callback, $image);
}
# leave timeout installed
return TRUE;
}
sub start_progressive_loading {
my $image = shift;
#
# This is obviously totally contrived (we slow down loading
# on purpose to show how incremental loading works).
# The real purpose of incremental loading is the case where
# you are reading data from a slow source such as the network.
# The timeout simply simulates a slow data source by inserting
# pauses in the reading process.
#
$load_timeout = Glib::Timeout->add (150, \&progressive_timeout, $image);
}
sub cleanup_callback {
my ($object, $data) = @_;
if ($load_timeout) {
Glib::Source->remove ($load_timeout);
$load_timeout = 0;
}
if ($pixbuf_loader) {
$pixbuf_loader->close;
$pixbuf_loader = undef;
}
if ($image_stream) {
close $image_stream;
}
$image_stream = undef;
}
sub toggle_sensitivity_callback {
my ($togglebutton, $container) = @_;
my $newstate = ! $togglebutton->get_active;
foreach my $child ($container->get_children) {
# don't disable our toggle
$child->set_sensitive ($newstate)
if $child != $togglebutton;
}
}
sub do {
if (!$window) {
$window = Gtk2::Window->new;
$window->set_title ("Images");
$window->signal_connect (destroy => sub { $window = undef; 1 });
$window->signal_connect (destroy => \&cleanup_callback);
$window->set_border_width (8);
my $vbox = Gtk2::VBox->new (FALSE, 8);
$vbox->set_border_width (8);
$window->add ($vbox);
my $label = Gtk2::Label->new;
$label->set_markup ("<u>Image loaded from a file</u>");
$vbox->pack_start ($label, FALSE, FALSE, 0);
my $frame = Gtk2::Frame->new;
$frame->set_shadow_type ('in');
#
# The alignment keeps the frame from growing when users resize
# the window
#
my $align = Gtk2::Alignment->new (0.5, 0.5, 0, 0);
$align->add ($frame);
$vbox->pack_start ($align, FALSE, FALSE, 0);
view all matches for this distributionview release on metacpan - search on metacpan
( run in 0.664 second using v1.00-cache-2.02-grep-82fe00e-cpan-1925d2aa809 )