Re: Goo::Canvas::Polyline acts not as expected
- From: jeremy volkening <volkening mailshack com>
- To: gtk-perl-list gnome org
- Subject: Re: Goo::Canvas::Polyline acts not as expected
- Date: Wed, 28 Apr 2010 10:44:30 -0400
This is an simple example. An screenshot is attached. I'm using
Fedora12, with GooCanvas installed using yum.
##############################################
#!/usr/bin/perl
use strict;
use Glib qw/TRUE FALSE/;
use Gtk2 qw/-init -threads-init/;
use Goo::Canvas;
my $win = Gtk2::Window->new;
$win->signal_connect( destroy => sub { Gtk2->main_quit; } );
my $vbox = Gtk2 ::VBox->new( FALSE, 6 );
$win->add($vbox);
my $canvas = Goo::Canvas->new();
$canvas->set_size_request( 600, 450 );
$vbox->pack_start( $canvas, FALSE, FALSE, 0 );
my $root = $canvas->get_root_item;
# a crosshair targeted at (100,100)
Goo::Canvas::Rect->new( $root, 100, 100, 50, 50 );
Goo::Canvas::Rect->new( $root, 50, 50, 50, 50 );
Goo::Canvas::Rect->new( $root, 50, 100, 50, 50 );
Goo::Canvas::Rect->new( $root, 100, 50, 50, 50 );
# here, I expect the diamond centered at (100,100)
# but it left-top point is placed at (100,100)
Goo::Canvas::Polyline->new( $root, TRUE,
[
0, 10,
10, 0,
0, -10,
-10, 0
],
'x'=>100,
'y' =>100
);
$win->show_all;
Gtk2->main;
Ah. Your problem stems from explicitly setting the 'x' and 'y'
properties of the Polyline. These refer not to the origin of the item
(although this is a reasonable assumption), but to the left and top
edges of its bounding box. This is intentional
(http://mail.gnome.org/archives/goocanvas-list/2008-October/msg00033.html).
You could set 'x' and 'y' to what you intend them to be (i.e. [90,90]),
but it might be better either to use absolute coordinates in the shape
definition (if it is a static item) or to do a transform on the item
after the fact. Either:
$polyline->set_simple_transform( 100, 100, 1, 0); #absolute positioning
or
$polyline->translate(100,100); #relative positioning
Jeremy
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]