#!/usr/bin/perl package scaleme; use strict; use diagnostics; use warnings; use Gtk2 '-init'; use Glib qw(TRUE FALSE); # Display this image my $path = 'change_this_directory/cat.bmp'; # Open a Gtk2 window with a Gtk2::TextView my $window = Gtk2::Window->new('toplevel'); $window->set_title('scaleme'); $window->set_position('center'); $window->set_default_size(800, 600); $window->signal_connect('delete-event' => sub { Gtk2->main_quit(); exit; }); my $frame = Gtk2::Frame->new(); $window->add($frame); my $scrollWin = Gtk2::ScrolledWindow->new(undef, undef); $frame->add($scrollWin); $scrollWin->set_policy('automatic', 'automatic'); $scrollWin->set_border_width(0); my $textView = Gtk2::TextView->new; $scrollWin->add_with_viewport($textView); if (-e $path) { # Display a photo of a cat face my $pixbuf = Gtk2::Gdk::Pixbuf->new_from_file($path); my $buffer = $textView->get_buffer(); $buffer->insert_pixbuf( $buffer->get_end_iter(), $pixbuf, ); # Make the overall image 20% bigger, but the cat's face is its # original size (and centred in the middle) my $factor = 0.2; my $w = $pixbuf->get_width(); my $h = $pixbuf->get_height(); my $pixbuf2 = Gtk2::Gdk::Pixbuf->new( 'GDK_COLORSPACE_RGB', FALSE, $pixbuf->get_bits_per_sample(), ($w * (1 + $factor)), ($h * (1 + $factor)), ); $pixbuf->scale( # $dest $pixbuf2, # $destx, $desty 0, 0, # $dest_width, $dest_height ($w * (1 + $factor)), ($h * (1 + $factor)), # $offset_x, $offset_y ($w * ($factor / 2)), ($h * ($factor / 2)), # $scale_x, $scale_y 1, 1, # $interp_type 'GDK_INTERP_NEAREST', ); $buffer->insert_pixbuf( $buffer->get_end_iter(), $pixbuf2, ); } $window->show_all(); Gtk2->main();