diff --git a/gtk_prueba.pl b/gtk_prueba.pl new file mode 100644 index 0000000..5374f78 --- /dev/null +++ b/gtk_prueba.pl @@ -0,0 +1,73 @@ +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 );