74 lines
2.3 KiB
Perl
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 );
|