Bug#908745: libgtk3-perl: avoid using deprecated gdk_pixbuf_new_from_inline()
Simon McVittie
smcv at debian.org
Thu Sep 13 12:06:14 BST 2018
Package: libgtk3-perl
Version: 0.034-1
Severity: wishlist
Tags: upstream
libgtk3-perl currently uses gdk_pixbuf_new_from_inline() to implement
Gtk3::Gdk::Pixbuf::new_from_data, because using gdk_pixbuf_new_from_data()
would require being able to hand over ownership of a buffer to gdk-pixbuf,
whereas gdk_pixbuf_new_from_inline() copies the input. However,
gdk_pixbuf_new_from_inline() is deprecated.
A gdk-pixbuf maintainer recommends[1] using GBytes and new_from_bytes(),
which is also what pygobject does in its own overrides:
> # /usr/lib/python3/dist-packages/gi/overrides/GdkPixbuf.py
> @override
> class Pixbuf(GdkPixbuf.Pixbuf):
>
> @classmethod
> def new_from_data(
> cls, data, colorspace, has_alpha, bits_per_sample,
> width, height, rowstride,
> destroy_fn=None, *destroy_fn_data):
>
> if destroy_fn is not None:
> w = PyGIDeprecationWarning("destroy_fn argument deprecated")
> warnings.warn(w)
> if destroy_fn_data:
> w = PyGIDeprecationWarning("destroy_fn_data argument deprecated")
> warnings.warn(w)
>
> data = GLib.Bytes.new(data)
> return cls.new_from_bytes(
> data, colorspace, has_alpha, bits_per_sample,
> width, height, rowstride)
In Perl I think that would be spelled something like:
sub Gtk3::Gdk::Pixbuf::new_from_data {
my ($class, $data, $colorspace, $has_alpha, $bits_per_sample, $width, $height, $rowstride) = @_;
return Gtk3::Gdk::Pixbuf->new_from_bytes(GLib::Bytes->new($data),
$colorspace, $has_alpha,
$bits_per_sample, $width,
$height, $rowstride);
}
(but please note that I have not tested that at all.)
It looks as though this might even add support for bits per sample != 8
and non-RGB colour spaces as a side effect, if the underlying library
ever supports them (but it currently doesn't, and that probably won't
change).
Regards,
smcv
[1] on https://gitlab.gnome.org/GNOME/gdk-pixbuf/merge_requests/17
More information about the pkg-perl-maintainers
mailing list