#!/usr/bin/perl use strict; use warnings; use Glib qw/TRUE FALSE/; use Gtk2 -init; use Gtk2::WebKit; my $url = shift || 'http://www.youtube.com/watch?v=9HIybxmMerA'; my $win = Gtk2::Window->new; $win->set_default_size(800, 600); $win->signal_connect(destroy => sub { Gtk2->main_quit }); my $view = Gtk2::WebKit::WebView->new; $view->signal_connect( 'notify::progress' => \¬ify_progress, undef ); $view->signal_connect( 'load_finished' => \&load_finished, undef ); my $sw = Gtk2::ScrolledWindow->new; $sw->add($view); my $vbox = Gtk2::VBox->new( FALSE, 6 ); $vbox->set_size_request(0,0); $win->add($vbox); $vbox->set_border_width(2); $vbox->pack_start( $sw,TRUE, TRUE, 0 ); $vbox->pack_start (Gtk2::HSeparator->new, FALSE, FALSE, 0); my $button = Gtk2::Button->new_from_stock('gtk-quit'); $vbox->pack_start( $button, FALSE, FALSE, 0 ); $button->signal_connect( clicked => \&delete_event ); my $button1 = Gtk2::Button->new_from_stock('Screenshot'); $vbox->pack_start( $button1, FALSE, FALSE, 0 ); $button1->signal_connect( clicked => \&screenshot ); $win->show_all; $view->open($url ); Gtk2->main; sub notify_progress{ my $load_progress = $view->get('progress'); print "$load_progress\n"; } sub load_finished{ print "load complete\n"; # screenshot(); # do auto screenshot on full load return 0; } ##################################### sub delete_event { Gtk2->main_quit; return FALSE; } ##################################### sub screenshot{ #we are going to save the $view my ($width, $height) = $view->window->get_size; # create blank pixbuf to hold the image my $gdkpixbuf = Gtk2::Gdk::Pixbuf->new ('rgb', 0, 8, $width, $height); $gdkpixbuf->get_from_drawable ($view->window, undef, 0, 0, 0, 0, $width, $height); #only jpeg and png is supported !!!! it's 'jpeg', not 'jpg' $gdkpixbuf->save ("$0.jpg", 'jpeg', quality => 100); print "screenshot\n"; return FALSE; } #$pixbuf->save ($filename, 'jpeg', quality => '100'); # Currently only a few parameters exist. JPEG images can be saved # with a "quality" parameter; its value should be in the range # [0,100]. Text chunks can be attached to PNG images by specifying # parameters of the form "tEXt::key", where key is an ASCII string of # length 1-79. The values are UTF-8 encoded strings.