我正在努力了解开罗的框架;但我不知道如何在绘图区域放置多个形状。我见过的所有代码/教程要么太高级,要么与此问题无关。
这是我绘制圆圈的代码(我使用的是C和gtk + 3.0):
void draw(GtkWidget *this, cairo_t *cr, gpointer data) {
cairo_set_line_width(cr, 5);
cairo_set_source_rgb(cr, 0, 0, 0);
cairo_translate(cr, prog.width/2, prog.height/2);
cairo_arc(cr, 0, 0, 50, 0, 2 * M_PI);
cairo_stroke_preserve(cr);
cairo_set_source_rgb(cr, 0.9, 0.9, 0.9);
cairo_fill(cr);
}
我完全理解一件事:cairo_t *cr
。从我一直在寻找的cr
是一个上下文,但没有完全理解它的含义(也许我的问题在于这个理解?)。
所以,如果我在这个附近需要更多圈子,我怎么能创建它们呢?
我尝试使用cairo_move_to(cr, x, y)
并绘制另一种形状,但显然它不起作用。
谢谢!
答案 0 :(得分:2)
是的,cairo_t
是cairo上下文的类型。
要在cairo上绘图,可以设置绘图参数,定义绘制颜色或图像的源,以及指定绘制形状的路径,然后致电cairo_stroke()
或cairo_fill()
进行实际绘图。调用之后,路径将被重置(除非您使用函数的_preserve
版本),但其他所有内容都保持不变。
因此,要再次绘制,您只需要在第一个之后添加更多设置和绘图函数调用。
cairo_move_to()
实际上并没有移动任何东西。 cairo_move_to()
所做的是改变"当前点的位置"的路径。稍后添加的路径组件(例如cairo_line_to()
)将从当前点开始,然后将当前点设置为其结束点。
在您的情况下,您可以通过在绘制处理程序的最后一行之后添加cairo_move_to()
来绘制多个圆,然后重复用于绘制第一个圆的步骤。
cairo_arc()
不同,因为您将弧的中心指定为第二个和第三个参数。要在其他地方绘制弧,您需要更改这两个参数。 (当前点确实在cairo_arc()
中发挥作用;您需要查看文档以获取信息。)
The cairo documentation是开始学习开罗的最佳地点;它有很多教程和样本。