I'm porting an application from Gtk2/Gnome2::Canvas to Gtk3/GooCanvas2. Most of the process has gone relatively smoothly, but I have hit segmentation faults when calling the GooCanvas2 transform methods.
Calling the set_transform method on a canvas item results in "ERROR:gperl-i11n-marshal-struct.c:119:sv_to_struct: assertion failed: (package)".
Code to reproduce is below (adapted from the GooCanvas2 module synopsis). Â
I've also reported this to RT, but have yet to get a response from the module author. Â
https://rt.cpan.org/Public/Bug/Display.html?id=133659Is this something that can be fixed in the perl bindings? Or is the issue deeper?Â
FWIW, I can reproduce on Windows (Strawberry perl 5.28.0, using PPMs from Sisyphusion.tk), and on Centos (perlbrew 5.30).
Thanks,
Shawn.
====
use strict;
use warnings;
use 5.022;
local $| = 1;
use Gtk3 -init;
use GooCanvas2;
Â
my $window = Gtk3::Window->new();
$window->set_default_size(640, 600);
$window->signal_connect('destroy' => sub {Gtk3->main_quit()});
Â
my $scrolled_win = Gtk3::ScrolledWindow->new();
$scrolled_win->set_shadow_type('in');
Â
my $canvas = GooCanvas2::Canvas->new();
$canvas->set_size_request(600,450);
$canvas->set_bounds(0,0,1000,1000);
$scrolled_win->add($canvas);
Â
my $root = $canvas->get_root_item();
my $rect_item = GooCanvas2::CanvasRect->new(
  'parent' => $root,
  'x' => 100,
  'y' => 100,
  'width' => 300,
  'height' => 400,
  'line_width' => 10.0,
  'radius-x' => 20.0,
  'radius-y' => 10.0,
  'stroke-color' => 'yellow',
  'fill-color' => 'red',
);
Â
my $mx = Cairo::Matrix->init (1, 0, 0, 1, 1, 1);
# Â this fails
my $tfm = eval {
  $rect_item->set_transform ($mx);
};
say $@ if $@;
say 'Getting transform';
my (@tt) = eval {
  $rect_item->get_transform;
};
say $@ if $@;
say join ' ', map {$_ // 'undef'} @tt;
Â
# Connect a signal handler for the rectangle item.
$rect_item->signal_connect('button_press_event' => \&on_rect_button_press);
Â
$window->add($scrolled_win);
$window->show_all;
Â
# Pass control to the Gtk3 main event loop
Gtk3->main();
Â
# This handles button presses in item views.
#We simply output a message to the console
sub on_rect_button_press {
  my ($item, $target, $event) = @_;
  print "rect item received button press event \n";
  return 1;
}