Re: Goo::Canvas::Polyline acts not as expected



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]