Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 18 additions & 2 deletions bin/shutter
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,23 @@ BEGIN {
);
}

package Gtk3::ImageViewCustom;

use Gtk3::ImageView 10;
use Glib::Object::Subclass Gtk3::ImageView::, properties => [
# override minium zoom
Glib::ParamSpec->float(
'zoom', #name
'zoom', #nick
'zoom level', #blurb
0.0001, #minium, tuned to fit 4K/8K modern display
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why not to fix it in Gtk3::ImageView itself?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Another PR to Gtk3::ImageView?

If no change to upstream, derived class is the most convenient way to override GObject Property, AFAIK.

Alternative way: if extending with package Gtk3::ImageView; ... , some low-level C functions (e.g. g_object_class_install_property) may help. (see https://docs.gtk.org/gobject/class_method.Object.install_property.html). But this is not recommended and more complex.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's at https://github.com/carygravel/gtk3-imageview

Or you think only shutter can benefit from 8k display?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What we're trying to say is that it would be more beneficial to try a fix upstream in addition to the one here, so we get a fix right away plus other projects can be benefit long term as well :)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Got it. PR for upstream on the way.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

After more investigation, it turns out the RCA is the lazy allocation of Gtk widgets:

New ImageView widgets created during invisible state would keep 1x1 dummy size allocation till first show. When this size applied in set_fitting(), pixbuf with height or width over 1000px would have zoom factor beyond the range.

100, #maximum
1.0, #default
[qw/readable writable/],
),
];


package Shutter::App;

#Deal with encoding problem
Expand All @@ -71,7 +88,6 @@ use Pango;
use Glib qw/TRUE FALSE/;
use Gtk3 '-init';
use Glib::Object::Subclass qw/Gtk3::Application/;
use Gtk3::ImageView 10;

#filename parsing
use POSIX qw/ strftime /;
Expand Down Expand Up @@ -4428,7 +4444,7 @@ sub STARTUP {
unless ($is_all) {

#Gtk2::ImageView - empty at first
$session_screens{$key}->{'image'} = Gtk3::ImageView->new();
$session_screens{$key}->{'image'} = Gtk3::ImageViewCustom->new();
#$session_screens{$key}->{'image'}->set_show_frame(FALSE);
$session_screens{$key}->{'image'}->set_fitting(TRUE);
$session_screens{$key}->{'image'}->get_style_context->add_provider($css_provider_alpha, 0);
Expand Down
2 changes: 1 addition & 1 deletion cpanfile
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
requires "Gtk3";
requires "Pango";
requires "Glib";
requires "Gtk3::ImageView";
requires "Gtk3::ImageView", ">= 10";
requires "Number::Bytes::Human";
requires "XML::Simple";
requires "Net::DBus";
Expand Down