[perl-Gtk3] Make Gtk3::Gdk::Pixbuf::save, save_to_buffer and save_to_callback usable



commit cc292710ce4188eacf81923784a7d55c324fc2c3
Author: Torsten SchÃnfeld <kaffeetisch gmx de>
Date:   Sat Feb 9 23:08:20 2013 +0100

    Make Gtk3::Gdk::Pixbuf::save, save_to_buffer and save_to_callback usable

 lib/Gtk3.pm   |    9 ++++++---
 t/overrides.t |   40 +++++++++++++++++++++++++++++-----------
 2 files changed, 35 insertions(+), 14 deletions(-)
---
diff --git a/lib/Gtk3.pm b/lib/Gtk3.pm
index 4c91cfc..cd1aeba 100644
--- a/lib/Gtk3.pm
+++ b/lib/Gtk3.pm
@@ -1277,6 +1277,9 @@ sub Gtk3::Gdk::Pixbuf::new_from_xpm_data {
     $class, $real_data);
 }
 
+# The next three subs might have to change when
+# <https://bugzilla.gnome.org/show_bug.cgi?id=670372> is accepted.
+
 sub Gtk3::Gdk::Pixbuf::save {
   my ($pixbuf, $filename, $type, @rest) = @_;
   my ($keys, $values) = _unpack_keys_and_values (\ rest);
@@ -1285,7 +1288,7 @@ sub Gtk3::Gdk::Pixbuf::save {
            " -or-: $pixbuf->save (\$filename, \$type, \$key1 => \$value1, ...)");
   }
   Glib::Object::Introspection->invoke (
-    $_GDK_PIXBUF_BASENAME, 'Pixbuf', 'save',
+    $_GDK_PIXBUF_BASENAME, 'Pixbuf', 'savev',
     $pixbuf, $filename, $type, $keys, $values);
 }
 
@@ -1298,7 +1301,7 @@ sub Gtk3::Gdk::Pixbuf::save_to_buffer {
   }
   my (undef, $buffer) =
     Glib::Object::Introspection->invoke (
-      $_GDK_PIXBUF_BASENAME, 'Pixbuf', 'save_to_buffer',
+      $_GDK_PIXBUF_BASENAME, 'Pixbuf', 'save_to_bufferv',
       $pixbuf, $type, $keys, $values);
   return $buffer;
 }
@@ -1311,7 +1314,7 @@ sub Gtk3::Gdk::Pixbuf::save_to_callback {
            " -or-: $pixbuf->save_to_callback (\$save_func, \$user_data, \$type, \$key1 => \$value1, ...)");
   }
   Glib::Object::Introspection->invoke (
-    $_GDK_PIXBUF_BASENAME, 'Pixbuf', 'save_to_callback',
+    $_GDK_PIXBUF_BASENAME, 'Pixbuf', 'save_to_callbackv',
     $pixbuf, $save_func, $user_data, $type, $keys, $values);
 }
 
diff --git a/t/overrides.t b/t/overrides.t
index 54d6cdb..b5ccc55 100644
--- a/t/overrides.t
+++ b/t/overrides.t
@@ -7,7 +7,7 @@ use warnings;
 use utf8;
 use Encode;
 
-plan tests => 139;
+plan tests => 145;
 
 # Gtk3::CHECK_VERSION and check_version
 {
@@ -552,17 +552,30 @@ SKIP: {
   isa_ok (ref $formats[0], 'Gtk3::Gdk::PixbufFormat');
 }
 
-# Gtk3::Gdk::Pixbuf::save, save_to_buffer, save_to_callback
+# Gtk3::Gdk::Pixbuf::new_from_data
 SKIP: {
-  # FIXME: https://bugzilla.gnome.org/show_bug.cgi?id=670372
-  skip 'Gtk3::Gdk::Pixbuf; save & save_to_buffer annotations missing', 7;
+  skip 'Gtk3::Gdk::Pixbuf; new_from_data has incorrect annotations', 2;
 
   my ($width, $height) = (45, 89);
-  my $data = pack "C*", map { int rand 255 } 0..(3*$width*$height);
+  my ($r, $g, $b) = (255, 0, 255);
+  my $data = pack 'C*', (($r, $g, $b) x ($width*$height));
   my $pixbuf = Gtk3::Gdk::Pixbuf->new_from_data
     ($data, 'rgb', Glib::FALSE, 8, $width, $height, $width*3);
+  is ($pixbuf->get_byte_length, 3*$width*$height);
+  is ($pixbuf->get_pixels, $data);
+}
+
+# Gtk3::Gdk::Pixbuf::save, save_to_buffer, save_to_callback
+SKIP: {
+  #skip 'Gtk3::Gdk::Pixbuf; save & save_to_buffer annotations missing', 11;
+
+  my ($width, $height) = (10, 5);
+  my $pixbuf = Gtk3::Gdk::Pixbuf->new ('rgb', Glib::TRUE, 8, $width, $height);
+  $pixbuf->fill (hex '0xFF000000');
+  my $expected_pixels = $pixbuf->get_pixels;
 
   my $filename = 'testsave.png';
+  END { unlink $filename; }
   eval {
     $pixbuf->save ($filename, 'png',
                    'key_arg_without_value_arg');
@@ -577,13 +590,13 @@ SKIP: {
   isa_ok ($new_pixbuf, 'Gtk3::Gdk::Pixbuf', 'new_from_file');
   is ($new_pixbuf->get_option ('tEXt::Description'), $desc);
   is ($new_pixbuf->get_option ('tEXt::Thumb::MTime'), $mtime);
-  unlink $filename;
+  is ($new_pixbuf->get_width, $width);
+  is ($new_pixbuf->get_height, $height);
+  is ($new_pixbuf->get_pixels, $expected_pixels);
 
   my $buffer = eval {
-    $pixbuf->save_to_buffer ('jpeg', [qw/quality/], [0.75]);
-    $pixbuf->save_to_buffer ('jpeg', quality => 0.75);
-  } || eval {
-    $pixbuf->save_to_buffer ('png'); # fallback if jpeg not supported
+    $pixbuf->save_to_buffer ('png', [qw/compression/], [9]);
+    $pixbuf->save_to_buffer ('png', compression => 9);
   };
   ok (defined $buffer, 'save_to_buffer');
   my $loader = Gtk3::Gdk::PixbufLoader->new;
@@ -592,7 +605,12 @@ SKIP: {
   $new_pixbuf = $loader->get_pixbuf;
   is ($new_pixbuf->get_width, $width);
   is ($new_pixbuf->get_height, $height);
+  is ($new_pixbuf->get_pixels, $expected_pixels);
 
   # FIXME: callbacks with automatic args not supported yet.
-  # $pixbuf->save_to_callback (sub { warn @_; return Glib::TRUE; }, 'data', 'png');
+  #$pixbuf->save_to_callback (sub {
+  #  my ($pixels, $length, $data) = @_;
+  #  warn join ', ', @$pixels;
+  #  return Glib::TRUE, undef;
+  #}, 'data', 'png');
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]