GtkPerlPruebas/gtk_prueba.pl
2021-07-16 04:44:55 +02:00

74 lines
2.3 KiB
Perl

use 5.30.0;
use strict;
use warnings;
use Glib::Object::Introspection;
use Cairo::GObject;
use Data::Dumper;
Glib::Object::Introspection->setup(
basename => 'Gtk',
version => '4.0',
package => 'Gtk4',
);
Glib::Object::Introspection->setup(
basename => 'Gio',
version => '2.0',
package => 'G',
);
Glib::Object::Introspection->setup(
basename => 'Gdk',
version => '4.0',
package => 'Gtk4::Gdk',
);
Glib::Object::Introspection->_register_boxed_synonym(
"cairo", "RectangleInt",
"gdk_rectangle_get_type"
);
my $application =
Gtk4::Application->new( 'me.sergiotarxz.manga', 'G_APPLICATION_FLAGS_NONE' );
$application->signal_connect(
activate => sub {
my $window = Gtk4::ApplicationWindow->new($application);
my $grid = Gtk4::Grid->new;
$window->set_title('Sergiotarxz\'s Manga Reader');
my $scroll = Gtk4::ScrolledWindow->new;
$window->set_child($scroll);
my $scroll_image = Gtk4::Viewport->new();
$scroll->set_child($grid);
my $image = Gtk4::Picture->new_for_file(
G::File::new_for_path(
'/home/sergio/2020-05-06-235314_636x1023_scrot.png')
);
$image->set_can_shrink(0);
$image->set_keep_aspect_ratio(1);
$scroll_image->set_child($image);
$grid->attach( $scroll_image, 1, 1, 1, 1 );
$window->signal_connect(
'state-flags-changed' => sub {
my $allocation = $window->get_allocation;
my $paintable = $image->get_paintable;
return if grep { !$_ } $allocation->@{ 'width', 'height' };
my $new_width = $allocation->{width};
my ($old_width, $old_height) = $image->get_allocation->@{ 'width', 'height' };
my $new_height = $new_width / $old_width * $old_height;
$scroll_image->set_size_request($new_width, $new_height);
$grid->set_size_request($new_width, $new_height);
$image->set_size_request($new_width, $new_height);
print Data::Dumper::Dumper $paintable->compute_concrete_size(
$new_width, $new_height, $new_width, $new_height
);
$window->show;
}
);
$window->show;
}
);
$application->run( \@ARGV );