GooCanvas(Perl GTK2,Goo :: Canvas):在绑定到一个点时移动路径(线),添加文本框,并将其与其他画布项连接。

时间:2014-01-18 23:34:27

标签: perl canvas gtk

我是GooCanvas库的新手。目前使用Perl :: Gtk2和Goo :: Canvas模块 通过查看代码,从演示示例中,我可以绘制主要画布项,将键盘和鼠标事件(如拖动,聚焦,移动)绑定到它们。
现在,我想进一步操纵路径。下面是路径(行)的代码:

my $objLine = Goo::Canvas::Path->new(
                                                                        $root,
                                                                        "M 20 20 L 80 80",
                                                                        'width' => 10.0,
                                                                        'stroke-color' => 'black',
#                                                                       'fill-color' => 'red',
                                                                        'can-focus' => TRUE                                                                     
                                                                        );
$objLine->{id} = "Line";
$objLine->signal_connect('focus_in_event' => \&on_focus_in);
$objLine->signal_connect('focus_out_event' => \&path_on_focus_out);
$objLine->signal_connect('key_press_event' => \&on_key_press);
$objLine->signal_connect('motion_notify_event', \&on_motion_notify);
$objLine->signal_connect('button_press_event', \&on_button_press);
$objLine->signal_connect('button_release_event', \&on_button_release);

我想做三件事:
如何在固定到特定点时移动,延伸线 我想绑定一个文本框。我尝试使用其他项目,但当项目移动时,文本框保持在原始位置 使用path(line)连接其他画布项。

我不是要求直接代码(例如可能是赞赏的),但需要逻辑和goocanvas函数的名称(方法/属性)。

1 个答案:

答案 0 :(得分:0)

使用GooCanvasGroup,将其作为一个应该作为一个单元移动的所有项目的父项,并通过设置其位置来移动该组。


来自devhelp手册的快速ripof C示例 - 通过更改一端的坐标修改线

line = 
goo_canvas_polyline_new_line
                        (yourgroup,
                         100.0, 100.0,
                         300.0, 100.0,
                         "stroke-color", "red",
                         "line-width", 5.0,
                         NULL);

更新位置(或者甚至只是2点线的一端)

GooCanvasPoints *points = NULL;
g_object_get (line, "points", &points);
// modify "points" as you need to update its position
// it may be needed to re-set the "points" property via 
g_object_set (line, "points", points);

如果您想移动 GooCanvasGroup

g_object_set (group, "x", new_x_pos, "y", new_y_pos, NULL);