我是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函数的名称(方法/属性)。
答案 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);